我正在使用FFT,似乎无法获得预期的结果。我有一个声音剪辑,是从放在模拟时钟上的麦克风录制的。因此,它每秒都会发出声音。
[wave,fs]=wavread('clock.wav');
t=0:1/fs:(length(wave)-1)/fs;
plot(t,wave);
n=length(wave)-1;
f=0:fs/n:fs;
wavefft=abs(fft(wave));
plot(f,wavefft);
这是我正在使用的代码。这是结果。
我应该在1hz处看到一个巨大的峰值,但是我没有。
FFT后跟声波。
最佳答案
您所看到的是您的麦克风记录的内容。标准麦克风正在过滤非常低的频率(即20 Hz以下),而声卡可能也在过滤低频。
每秒有一个滴答声并不意味着您会在FFT上看到1Hz的巨大峰值。如果要在1hz处看到一个巨大的峰值,请记录一个1Hz正弦信号。但是,正如我上面所说,请注意低频。声音系统测试的通常频率为1000 Hz。
以下是信号Clock.wav的时间 View (带有缩放)。我们可以看到它由许多谐波组成,并且我们可以清晰地看到看到它远不是1Hz的正弦波。
然后,我用低通二阶巴特沃斯滤波器对信号进行了滤波,截止频率为100Hz。
请在过滤前以黄色查看光谱,在过滤后以蓝色查看。
因此,我相信您的matlab代码中没有大问题。
关于matlab - Matlab中的FFT,出乎意料的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21599563/