2017-01-10 25 views
-3

我用加速度計記錄2小時(它的採樣率爲100Hz)。爲了分析數據,我想執行fft。我認爲整個數據都很長,所以我想把它分成10秒或5秒。可能嗎?長加速度計數據除以短的一個在matlab中執行fft

現在,我有100Hz採樣率的數據(1479168x1; x,y,z之一)。我想分析它除以5秒的時間窗口。 (512x2889)。那麼,是否正確地執行512個樣本(作爲一個幀樣本,總共2889幀)的fft?以下是我的代碼

no_point = 512; %% for 5seconds data of 10ms data point 
Fs=100; %% sample rate 
acc = data; 
no_frame = length(data)/no_point;  
frame_data = reshape(acc, no_point, no_frame)'; 
f = hann(no_point); 
hann_window = repmat(f',no_frame,1); 
fspace = Fs/2*linspace(0,1,no_point/2+1); 

fp = zeros(no_frame, no_point); 
for iframe = 1:no_frame 
    mean_data = mean(frame_data(iframe,:)); 
    std_data = std(frame_data(iframe,:)); 
    fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data; 
end 

fp_hann = hann_window.*fp; 

abs_fp = zeros(no_frame, no_point/2+1); 
for iframe = 1:no_frame 
    Y = fft(fp_hann(iframe,:),no_point); 
    abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1)); 
end 
+0

FFT的時間複雜度爲O(n * log(n)),所以我懷疑它會花費更長的時間,如果它甚至需要更長的時間。 – flawr

+0

更改採樣率 https://www.mathworks.com/help/signal/ref/resample.html –

+0

謝謝您的回答,但是,我不明白。你能告訴我更多細節嗎? –

回答

0

我用加速度計記錄2小時(它的採樣率爲100Hz)。爲了分析數據,我想執行fft。我認爲整個數據都很長,所以我想把它分成10秒或5秒。可能嗎?

爲了回答這個部分,你必須明白FFT的分辨率取決於觀察的時間,所以在你的情況下,你需要將完整的讀數分成時間窗口。這種效果會降低分辨率。 如果他們沒有出現在您執行的窗口中,您也會錯過一些頻率。由於突然剪切,旁瓣將會非常高。

如果解決方案對您的情況並不重要,那麼答案是肯定的,您可以做到這一點,並對部分執行FFT,但分辨率最差,並且出現上述所有問題。