【发布时间】:2014-08-25 23:20:43
【问题描述】:
我正在使用 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);
【问题讨论】:
-
“结果”是什么意思?
-
请注意,这里有 50001 个样本。
-
嗨 Oli,“结果”是指时域信号指定的频率中的 FFT 幅度。例如,50 赫兹频率的幅度应该是 100,它是,但对于更高的频率,它与我在时域信号中表示的不完全一样,它会导致我的计算出现显着错误!
-
这是频谱泄漏 - 有限长度序列的离散 FT 的固有属性。
-
在 R2014a 上,看起来幅度排列:plot([50 123 203 223 331 2812 5752 7993],[100 1 2 3 4 5 6 7],'xr')