在Matlab中选择一定的时间范围

时间:2013-12-01 07:48:35

标签: matlab time fft

我有一个项目要做,我面临一些问题。请帮我。我还不太熟悉matlab。 基本上,我有一组运动数据(data.mat),它们被记录了3天不间断。我需要: 1.仅选择整组数据的某些特定时刻(时间范围) 2.将这些力矩分成2.56秒的小部分 3.对每个小部件进行FFT,以查看频域中的运动,并仅选择5-25 Hz 4.找到一些最大的频率峰值

我为整个数据“Data.mat”编写了一个用于制作FFT和峰值的代码,它正在运行。 这是我的代码:

load('Data.mat');
P=data1(,2); %  
Fs=100       
Ts=1/Fs        
L=length(P)     
t = (0:L-1)*Ts;    
nfft = 256    

figure(1)      % raw signal plotting
plot(t,P);

y = fft(P,nfft)/L;       % FFT
ymag = abs(y(1:length(y)/2+1));
ft = Fs/2*linspace(0,1,nfft/2+1);

figure(2)    % FFT plotting
plot(ft,2*abs(y(1:nfft/2+1)))

indx=ft>= 5 & ft<= 25; % only 5-25Hz
ftsub=ft(indx);
ymagsub=ymag(indx);

% highest peaks
[pks,locs] = findpeaks(ymagsub,'MinPeakHeight',0.02)
plot(ftsub,ymagsub,ftsub(locs),pks,'rv','MarkerFaceColor','r')

现在我试图只选择数据的某些时刻,但我遇到了问题。 例如。比方说,我想只选择时间范围:13-03-2013 9:20:00-9:45:00 AM

我试过了:

t_start =datenum('13-03-2013 9:20:00 AM', 'dd-mm-yyyy HH:MM:SS AM');
t_end = datenum('13-03-2013 9:45:00 AM', 'dd-mm-yyyy HH:MM:SS AM');
rows=find(P>= t_start & P<= t_end); 

但我得到答案:     行=     空矩阵:0乘1

什么错了?如果此代码错误,如何选择某个时间范围呢? 如何选择2.56秒?

请帮助我,我一直试图找到解决方案,因为几个星期,我现在真的很郁闷。

1 个答案:

答案 0 :(得分:1)

让这条线正常工作: rows=find(P>= t_start & P<= t_end); P必须是MATLAB datenum格式的一系列次。

我猜P是你的实际数据 - 所以它不起作用,因为find只是简单地将P中的数值与数字日期值进行比较 - 你的“P”值没有在日期标记MATLAB。要记住的重要事项是datenum的输出只是一个数字,因此即使结果没有真实意义,MATLAB也可以将它与其他数字进行比较。

您的选择是:

  1. 如果您的数据包含时间戳,请加载该时间戳,检查其格式是否正确(转换回datestr进行完整性检查)。这可能是您数据的第一列。对时间值执行查找,然后使用它来绘制/提取P的相应部分。
  2. 构建时间向量 - 使用您对第一个数据点的时间+采样率的了解,并执行相同的操作。与您的t类似,但在datenums中。如果您的数据采集意味着您只有时间 - 从文件开始到加上开始时间,这也会有效。
  3. 然后它就像是:

    r=find(t>= t_start & t<= t_end); 
    plot(t(r),P(r);