在写那个音频检索的程序中,要对音频信号进行频谱分析,遇到了一个难题。对于MATLAB中的那个FFT函数,我不知道得到的值最后与频率之间是怎样的对应关系。
在我看的《数字语音处理及MATLAB仿真》这本书中,8KHz的采样率,一帧256个采样点的信号,对其做的1024点FFT。之后将得到的前256个值对应到的频率范围是
0-4000Hz。
可是在网上的其他地方,好像对应的不是Fs/2,而是Fs.
http://wenku.baidu.com/link?url=HWj0f86I6zi_ZHUSp7SqAw9e9DJw8MTsrBF_ZPMhYpYxLA0MaMFyp-W5gNoQkBr3mQrYH2AsQxqolwkDQacbhwUBy9wZODhSZbXH9u5ApN7
http://anony3721.blog.163.com/blog/static/511974201111313849564/
也是就说,在上面两个文章中,都是这样的::假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N,所以我就有点纠结了。。。
后来看了MATLAB对于FFT的help中的例子,是这样的:
......
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(Y(1:NFFT/2+1)))
可见,做NFFT点的FFT,得到的前一半的点对应的频率就是Fs的一半。即做N点FFT最后得到的频率值就是将Fs进行N等分。这和网上的两篇文章中说法一致。证明是
书上的错了。