fft波形与实际频率的关系

来源:互联网 发布:2017年户外广告数据 编辑:程序博客网 时间:2024/05/16 17:08

    之前就知道在matlab里用fft就能看到输入信号的频谱,比如下图

但是波峰值具体表示的频率是多少不是很直观,今天研究了一下他们的对应关系。上面的图形的matlab代码如下

clear
f=10.1;
fs=100;
tao=1/fs;
N=1;
n=0:tao:N;
x=sin(2*pi*f*n);
%for i=500:1000; %模拟加零
% x(i)=0;
%end
subplot(2,1,1)
plot(n,x)                                     (1)
subplot(2,1,2)
plot(n*fs/N,fft(x))                       (2)
从程序可以看出原始波形是频率为10.1Hz的正弦波,以100Hz的频率对其在0~1之间采样,如果直接以n为横坐标去画fft的波形,横坐标的刻度与实际频率的关系就很难看的出来,而如果对n乘以fs再除以N,就会跟实际频率对应起来了,如下图

这时第一个波峰的横坐标显示为10,与实际频率的10.1近似相等,如何精确相等后面会详细说明。

为什么要对n这么进行处理呢,首先看一下fft波形的物理意义。在fft或者dft中,时域采样多少个点,频域就得到多少个点的频谱,而每一个点都代表固定的频率。从程序可以看出采样频率是100Hz,故fft得出的最后一个点代表的频率就是100Hz。又知道做的是100点的dft,故可知第n个点就代表n*1Hz的频点。就是说在100Hz的范围内采了100个点,故每个点代表1Hz,这就是为什么要乘以fs。除以N是因为这次是N=1,除不除没什么变化,如果我的n是在0~8之间取值,就需要把范围归一化到0~1范围内。

以上是如何把fft波形与实际频率对应起来的方法。下面说说怎么才能测到精确的10.1Hz。

单纯的增加采样频率只能增加频谱波形细节,不能增加频谱测量的精度,故即使把采样频率增加到20KHz,如下图,也无法得到精确的10.1Hz。

故只能通过增加采样序列的长度,即可以把N增加到10,如下图,则可得到精确的10.1Hz

当然,通过下图可以看出增加0点也不是个好办法