これは、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
(倍数ではない)場合、結果は奇妙に見えます。
この動作は正しいですか?なぜこれが起こっているのですか、どうすればこれを回避できますか?長さがサンプリング周波数に「適合する」ように、信号の一部を捨てるだけですか?