如何截取生理信号中1.5-2.5秒的目标片段?
生理信号截取实现方案
问题描述
您好,我需要您指导如何截取信号并仅保留所需部分。我有一段生理信号,希望保留信号上升阶段(1.5秒处开始)至约2.5秒处的片段,移除信号的开头和结尾部分。我附上了信号图像及生成该信号的Matlab代码,恳请您提供实现方法或对应的Matlab代码,期待您的回复,谢谢。
信号波形图

原Matlab代码
cd 'D:\Research\TFR classification\DATI' filenames=dir('*.txt'); Fs=500; TextSize=24; time_FIF=zeros(1,length(filenames)); for i= 24 %length(filenames) %% Signal %close all fprintf(['\n\n\n *******************************************\n\n'... ' CODICE data set = ' filenames(i).name(1:end-4) '\n\n'... ' We are assuming a sampling rate of 500 Hz\n\n'... ' *******************************************\n\n']) %% Import data from text file opts = delimitedTextImportOptions("NumVariables", 25); % Specify range and delimiter opts.DataLines = [1, Inf]; opts.Delimiter = "\t"; % Specify column names and types opts.VariableNames = ["Var1", "Var2", "Var3", "Var4", "Var5", "Var6", "Var7", "Var8", "Var9", "Var10", "Var11", "Var12", "Var13", "Var14", "Var15", "Var16", "Var17", "Var18", "Var19", "Var20", "Var21", "Var22", "Var23", "VarName24", "Var25"]; opts.SelectedVariableNames = "VarName24"; opts.VariableTypes = ["string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "double", "string"]; % Specify file level properties opts.ExtraColumnsRule = "ignore"; opts.EmptyLineRule = "read"; % Specify variable properties opts = setvaropts(opts, ["Var1", "Var2", "Var3", "Var4", "Var5", "Var6", "Var7", "Var8", "Var9", "Var10", "Var11", "Var12", "Var13", "Var14", "Var15", "Var16", "Var17", "Var18", "Var19", "Var20", "Var21", "Var22", "Var23", "Var25"], "WhitespaceRule", "preserve"); opts = setvaropts(opts, ["Var1", "Var2", "Var3", "Var4", "Var5", "Var6", "Var7", "Var8", "Var9", "Var10", "Var11", "Var12", "Var13", "Var14", "Var15", "Var16", "Var17", "Var18", "Var19", "Var20", "Var21", "Var22", "Var23", "Var25"], "EmptyFieldRule", "auto"); opts = setvaropts(opts, "VarName24", "DecimalSeparator", ","); % Import the data s = readtable(filenames(i).name, opts); s = table2array(s); s = s(1420:3358); %s = s(4.1*Fs:7.4*Fs); %% Clear temporary variables clear opts %% Fig=figure; plot((1:length(s))/Fs,s,'k') xlabel('time (s)') title(['Signal ' filenames(i).name(1:end-4)]) set(gca,'fontsize', TextSize); set(Fig,'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
实现方法与修改后代码
核心逻辑
已知采样率Fs=500Hz,直接计算目标时间段对应的采样点索引:
- 1.5秒对应采样点:
start_idx = 1.5 * Fs = 750 - 2.5秒对应采样点:
end_idx = 2.5 * Fs = 1250
通过数组索引切片截取信号片段,同时调整绘图时间轴,确保显示的时间范围与截取区间匹配。
修改后的完整代码
cd 'D:\Research\TFR classification\DATI' filenames=dir('*.txt'); Fs=500; TextSize=24; time_FIF=zeros(1,length(filenames)); for i= 24 %length(filenames) %% Signal %close all fprintf(['\n\n\n *******************************************\n\n'... ' CODICE data set = ' filenames(i).name(1:end-4) '\n\n'... ' We are assuming a sampling rate of 500 Hz\n\n'... ' *******************************************\n\n']) %% Import data from text file opts = delimitedTextImportOptions("NumVariables", 25); % Specify range and delimiter opts.DataLines = [1, Inf]; opts.Delimiter = "\t"; % Specify column names and types opts.VariableNames = ["Var1", "Var2", "Var3", "Var4", "Var5", "Var6", "Var7", "Var8", "Var9", "Var10", "Var11", "Var12", "Var13", "Var14", "Var15", "Var16", "Var17", "Var18", "Var19", "Var20", "Var21", "Var22", "Var23", "VarName24", "Var25"]; opts.SelectedVariableNames = "VarName24"; opts.VariableTypes = ["string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "string", "double", "string"]; % Specify file level properties opts.ExtraColumnsRule = "ignore"; opts.EmptyLineRule = "read"; % Specify variable properties opts = setvaropts(opts, ["Var1", "Var2", "Var3", "Var4", "Var5", "Var6", "Var7", "Var8", "Var9", "Var10", "Var11", "Var12", "Var13", "Var14", "Var15", "Var16", "Var17", "Var18", "Var19", "Var20", "Var21", "Var22", "Var23", "Var25"], "WhitespaceRule", "preserve"); opts = setvaropts(opts, ["Var1", "Var2", "Var3", "Var4", "Var5", "Var6", "Var7", "Var8", "Var9", "Var10", "Var11", "Var12", "Var13", "Var14", "Var15", "Var16", "Var17", "Var18", "Var19", "Var20", "Var21", "Var22", "Var23", "Var25"], "EmptyFieldRule", "auto"); opts = setvaropts(opts, "VarName24", "DecimalSeparator", ","); % Import the data s = readtable(filenames(i).name, opts); s = table2array(s); % 核心修改:截取1.5秒到2.5秒的信号片段 start_time = 1.5; end_time = 2.5; start_idx = start_time * Fs; end_idx = end_time * Fs; s = s(start_idx:end_idx); %% Clear temporary variables clear opts %% Fig=figure; % 调整时间轴,显示实际截取的时间范围 time_axis = start_time:(1/Fs):end_time; plot(time_axis, s, 'k') xlabel('time (s)') title(['Signal ' filenames(i).name(1:end-4) ' (1.5s to 2.5s)']) set(gca,'fontsize', TextSize); set(Fig,'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
内容的提问来源于stack exchange,提问作者muhamamd hammad malik
相关产品推荐
相关产品推荐

