我有一個的加速度數據和它的時間矢量。我確定了高於閾值的峯值,現在我應該爲每個峯值找到FFT
。 作爲結果,我有這樣的:如何確定峯寬並對每個峯進行FFT(並將其繪製在單獨的圖中)
Peak Value 1 = 458, index 1988
Peak Value 2 = 456, index 1990
Peak Value 3 = 450, index 12081
....
Peak Value 9 = 432, index 12151
要找到這些山峯我用peakfinder腳本。 命令[peakLoc,peakMag] = peakfinder(x0,...)給出了峯值的位置和大小。 此外,我有每個峯值的時間(從時間數據向量)。
所以我想,我應該採取每個峯值,找到其寬度(或峯值附近的一些數據點),並使FFT
。我對嗎?你能幫我嗎? 我在八度工作,我是新來的:)
代碼:
load ("C:\\..patch..\\peakfinder.m");
d =dlmread("C:\\..patch..\\acc2.csv", ";");
T=d(:,1);
Ax=d(:,2);
[peakInd peakVal]=peakfinder(Ax,10,430,1);
peakTime=T(peakInd);
[sortVal sortInd] = sort(peakVal, 'descend');
originInd = peakInd(sortInd);
for k = 1 : length(sortVal)
fprintf(1, 'Peak #%d = %d, index%d\n', k, sortVal(k), originInd (k));
end
plot(T,Ax,'b-',T(peakInd),Ax(peakInd),'rv');
,在這裏你可以下載數據http://www.filedropper.com/acc2
FFT
d =dlmread("C:\\..path..\\acc2.csv", ";");
T=d(:,1);
Ax=d(:,2);
% sampling frequency
Fs_a=2000;
% length of FFT
Length_Ax=numel(Ax);
% number of lines of Fourier spectrum
fft_L= Fs_a*2;
% an array of time samples
T_Ax=0:1/Fs_a: Length_Ax;
fft_Ax=abs(fft(Ax,fft_L));
fft_Ax=2*fft_Ax./fft_L;
F=0:Fs_a/fft_L:Fs_a/2-1/fft_L;
subplot(3,1,1);
plot(T,Ax);
title('Ax axis');
xlabel('time (s)');
ylabel('amplitude)'); grid on;
subplot(3,1,2);
plot(F,fft_Ax(1:length(F)));
title('spectrum max Ax axis');
xlabel('frequency (Hz)');
ylabel('amplitude'); grid on;
這沒有意義至我:你不能接受一個峯值的FFT?以整個加速度數據樣本的FFT爲準,但這與峯值無關。 – am304 2014-11-06 11:55:39
另外,我不知道你從哪裏得到你的'peakfinder'函數。我有Octave 3.8,而且就我所見,它不在那裏。 – am304 2014-11-06 11:56:42
@ am304我有相同的Octave,但是我沒有函數findpeaks,因爲目前我在使用此函數安裝包時遇到問題。所以我只是加載了峯峯腳本。 – Alisa 2014-11-06 12:08:12