您的位置:首页 > 其它

fft波形与实际频率的关系

2012-11-07 15:50 225 查看
之前就知道在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点也不是个好办法

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: