当采样率太高时,Matlab会给出不正确的频率

时间:2014-05-29 13:48:25

标签: matlab fft

因此,如果我的采样率是8000,我就像这样制作频率为1000的正弦波:

n = 0:255;
fs = 8000;
fa = 50;
x = sin(2*pi*(fa/fs)*n);
resolution = n * (fs/length(n));
stem(resolution, abs(fft(x)));

一切都很好,情节显示1000Hz的单峰。

但是,如果我设置频率fa = 50,我会更加平稳地上升到峰值,但峰值位置不正确。它的频率为62.5 Hz。

所以显而易见的解决方案是降低采样率,但如果不可能,例如在我的情况下呢?

2 个答案:

答案 0 :(得分:4)

我认为,鉴于您的采样率 fs 和块大小 N 分别为8000和256,上述观察/结果是有意义的。注意

fs/N = 8000/256 = 31.25

FFT N点变换的离散输出只能与上述倍数的频率相关联

m*fs/N = m*31.25 for m=0,1,2,….,255

m 不存在 m * fs / N 等于50,因此最接近的是62.5(2 * 31.25)。

如果您无法更改采样率,那么块大小 N 如何 50 = fs / N ?如果选择 N 为160(= 8000/50)的任意倍数,那么你应该没问题

n = 0:159;  % or any multiple of 160 less one

(你提到更平滑的上升到峰值只是泄漏 - 它导致任何频率不完全在FFT bin中心的输入信号泄漏到所有其他FFT输出箱中。)

请注意,1000 Hz频率的输入信号一切正常,因为当 fs = 8000 N = 256 时,1000 = 32 * 31.25(所以米= 32 )。

答案 1 :(得分:2)

离散傅里叶变换的最大值为62.5Hz。但是,如果进行插值,则会发现最大值为50 Hz。有关详细信息,请参阅http://www.dspguru.com/dsp/howtos/how-to-interpolate-fft-peak