我有 2 个罪波:
Fs = 1500;
N = 100;
t = (0:N-1)'/Fs;
sinwave = sin(2*pi*15*t);
sinwaveshifted = sin(2*pi*15*t + 1.3);
如果我使用 fft 获得 15Hz 的幅度(由于我无法控制的原因,需要使用 2 次方的 FFT):
fftsin = fft(sinwave,128);
fftsinshift = fft(sinwaveshifted,128);
% 2 corresponds to 15Hz
abs(fftsin(2)) = 51.819;
abs(fftsinshift(2)) = 41.6151;
为什么有区别?我假设因为我的垃圾箱没有完美排列,所以发生了一些泄漏。另外,我没有做任何窗口。
如果我对信号进行窗口化(我使用平顶,因为我读到它在幅度精度方面是最好的),这些是我的结果:
w = window(@flattopwin, 100);
sinwin = sinwave .* w;
sinshiftwin = sinwaveshift .* w;
fftsin = fft(sinwin ,128);
fftsinshift = fft(sinshiftwin ,128);
% 2 corresponds to 15Hz
abs(fftsin(2)) = 2.7283;
abs(fftsinshift(2)) = 17.822;
为什么会有巨大的差异?