【问题标题】:How to cut the desired signal?如何切割想要的信号?
【发布时间】:2022-11-18 02:36:48
【问题描述】:

我需要你的指导切断信号并只保留我想要的信号部分。我有一个生理信号.我只想在信号上升(1.5 秒)时保留信号的一部分,并在 2.5 秒左右停止。并去掉信号的开头和结尾。我附上了信号图像和用于生成它的代码。您能否指导我如何执行此操作,或者是否有任何 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]);
Xi=1.6;
 nMax=30;
 nIMF=100;
 ns=5;
 nbins=10*ns;
 opts=Settings_FIF_v3('verbose',0,'Xi',Xi,'alpha',10,'ExtPoints',
 nMax,'NIMFs',nIMF);

 % FIF with a  asymw pre-extension of the signal

  Lp=0.5*length(s);
  s_ext = Extend_sig_v2(s,{'asymw'},Lp,true);
  tic
  [IMF,logMp] = FIF_v2_13(s_ext,opts);
  time_FIF(i)=toc;    
  IMFs{i}=IMF(:,Lp+1:end-Lp-1)     
  plot_imf_v10(IMFs{i},(1:length(s))/Fs,10);,

【问题讨论】:

    标签: matlab signals signal-processing


    【解决方案1】:

    你已经密谋

    x=(1:length(s))/Fs;
    plot((1:length(s))/Fs,s,'k');
    

    所以你可以使用这样的东西在 1.5 到 2.5 秒之间过滤

    idx = (x>=1.5) & (x<=2.5);
    x_cut = x(idx);
    s_cut = s(idx);
    

    【讨论】:

    • 谢谢,所以对于 plot 来说,只需简单地使用 plot(x_cut, s_cut);。除此之外,如果我们想在垂直方向上切割,比如从 2​​20 到 340 结束。那该怎么做呢?
    • 你会做同样的事情,但创建idx基于s而不是x。请注意,基于 y 的切割可能意味着您连接不连续的区域,即如果有两个凸起,您将切掉中间位
    • 真的很感激,明白你的意思。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多