因此,如果我的采样率是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。
所以显而易见的解决方案是降低采样率,但如果不可能,例如在我的情况下呢?
答案 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。