5
的這部分是從MATLAB FFT的文檔採取:FFT/IFFT:採樣頻率和長度信號
Fs = 30; % Sampling frequency
T = 1/Fs; % Sample time
L = 130; % Length of signal
t = (0:L-1)*T; % Time vector
x = sin(2*pi*1*t); % 1 Hz sinus
plot(real(ifft(abs(fft(x))))); % fft then ifft
% Fs = 30, L = 60/90/120 ... : ok
% Fs = 20, L = 60/80/100 ... : ok
% Fs = 30, L = 50/70/80 ... : not ok
在我看來,每當該信號的長度是採樣頻率的倍數,正弦重構(除了一些移位),例如這裏Fs = 30, L = 60
:
然而,例如,如果Fs = 30, L = 80
(不是多),結果看起來很奇怪:
這種行爲是正確的嗎?爲什麼會發生這種情況,我該如何避免這種情況?只要丟掉信號的一部分,使長度「適合」採樣頻率?
謝謝你,能解決它。不過,我不明白爲什麼需要階段信息。你能詳細解釋一下嗎?爲什麼它在某些情況下可以正常工作(除了輪班)? – Tobold
檢查fft(或dft)的定義。 fft(X)的結果的頻率爲(Fs/2)*(0 ...(N/2)+1)/(N/2 + 1)。爲了達到你的1Hz的竇你需要找到k使得(Fs/2)* K /(N/2 + 1)= 1.當k是一個整數(整數)時,不需要相位(延遲) 1Hz,這發生在N/F(或你的情況下的L/F)是一個整數。如果不是,則FFT輸出中不存在1Hz,算法「表示」1Hz的值接近1Hz,加上將其延遲到1Hz的相位值。我希望我的解釋是清楚的。 :) – Ran
謝謝!現在很清楚:) – Tobold