无法得到正确的fft图

时间:2014-03-05 12:56:52

标签: matlab signal-processing

我的频谱图有问题,我有一个音频文件,我在其上运行fft函数并尝试绘制其频谱:

    fileName = 'stuff.wav' ;
[y, Fs] = audioread(fileName);
Y = fft(y(:,1));
Y = Y / length(y);
plot(fftshift(abs(Y));

以下是我得到的内容:audio spectrum

幅度是正确的,但频率不是。

所以我写了一个小脚本来测试这个:

fs =8000;
t = 0:1/fs:10;
x = 3*sin(2*pi*5*t);
U = abs(fft(x));
stem(t,fftshift(U));
axis([-20 20 -5 5]);

结果是:

sin为什么峰值在正确的位置意味着5但我在-5 负频率中怀疑第二个为什么我能看到它以及如何正确地缩放X轴? 谢谢你的帮助 !

1 个答案:

答案 0 :(得分:3)

您正在绘制FFT结果(U)vs time ,这没有多大意义。首先生成频率轴值,然后在绘制U

时使用它
%// Same as in your code:
fs = 8000;
t = 0:1/fs:10;
x = 3*sin(2*pi*5*t);
U = abs(fft(x));

%// Do the following changes to your code:
f = -fs/2:fs/(numel(t)-1):fs/2; %// frequency axis
stem(f, fftshift(U)); %// plot U versus frequency
axis([-10 10 0 15e4]); %// zoom in to see -5 Hz and 5 Hz values

enter image description here