我有一个项目要做,我面临一些问题。请帮我。我还不太熟悉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秒?
请帮助我,我一直试图找到解决方案,因为几个星期,我现在真的很郁闷。
答案 0 :(得分:1)
让这条线正常工作:
rows=find(P>= t_start & P<= t_end);
P必须是MATLAB datenum
格式的一系列次。
我猜P是你的实际数据 - 所以它不起作用,因为find
只是简单地将P中的数值与数字日期值进行比较 - 你的“P”值没有在日期标记MATLAB。要记住的重要事项是datenum
的输出只是一个数字,因此即使结果没有真实意义,MATLAB也可以将它与其他数字进行比较。
您的选择是:
datestr
进行完整性检查)。这可能是您数据的第一列。对时间值执行查找,然后使用它来绘制/提取P
的相应部分。t
类似,但在datenums中。如果您的数据采集意味着您只有时间 - 从文件开始到加上开始时间,这也会有效。然后它就像是:
r=find(t>= t_start & t<= t_end);
plot(t(r),P(r);