5

これは、Matlabfft-documentationから部分的に取得されています。

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(倍数ではない)場合、結果は奇妙に見えます。

ここに画像の説明を入力してください

この動作は正しいですか?なぜこれが起こっているのですか、どうすればこれを回避できますか?長さがサンプリング周波数に「適合する」ように、信号の一部を捨てるだけですか?

4

1 に答える 1

7

ifftでabs(fft())を使用する場合、信号の振幅のみを使用し、必要な位相情報をドロップします。

信号全体を使用します(腹筋を削除):

plot(real(ifft(fft(x)))); % fft then ifft
于 2012-06-11T15:22:37.623 に答える