我正在使用 matlab 进行 FFT。我对其进行 FFT 的时间为 1 秒,它由 50000 个 equlay 空间样本组成。我想测试FFT结果。所以我给出了如下的输入(波),它是正弦波的复合体(并且我通过 50 KHZ 的采样频率对其进行了采样),并且我期望得到我在输入中给出的频率幅度结果。对于低频范围,结果还可以,但对于较高频率(5752 Hz 和 7993 Hz),结果分别为 5.87 和 6.7(而不是 6 和 )。这个大错误的根源是什么?我怎样才能提高我的成绩?!
这是代码:
t = 0:1/50000:1;
wave = 100*sin(2*pi*50*t)+1*sin (2*pi*123*t)+2*sin (2*pi*203*t)+3*sin(2*pi*223*t)+4*sin(2*pi*331*t)+5*sin(2*pi*2812*t)+6*sin(2*pi*5752*t)+7*sin(2*pi*7993*t);
SPEC = fft(wave);
L = size(SPEC,2);
x= (0:L/2-1);
Half_SPEC = abs(SPEC(1:L/2))/(L/2); %% removing the mirror side and ranging the domain
plot(x,Half_SPEC);
最佳答案
正如 Oli Charlesworth 所指出的,您正在进行 50001 个点的 FFT,这意味着频率间隔为 1/50001。
通常,只有当正弦波的频率恰好是频率间隔的倍数时,FFT 才会给出精确的幅度。否则,能量将在称为 spectral leakage 的过程中分布在多个 FFT 箱中。 。 您可以通过更改样本数量来确认这一点,使正弦曲线的频率是频率间隔的倍数:
t = 0:1/50000:1-1/50000;
Windowing输入信号还可以帮助控制泄漏量。
关于matlab - 为什么高频范围内的 FFT 结果不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25488802/