MATLAB中FFT函数的意义

文章转自:https://wenku.baidu.com/view/8863fd1614791711cc791774?pcf=2

FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。

模拟信号经过ADC采样之后变成数字信号,可对此数字信号做FFT变换。N个采样点经过FFT之后就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次幂。

假设采样频率为Fs,信号频率为F,采样点数为N。则FFT之后结果为N点复数,其中每一个点对应着一个频率点,该点复数的模值为原始信号在该频率值下的幅度特性。具体为:假设原始信号在某频率点的幅值为A,则该频点对应的FFT点复数的模值为A的N/2倍。而FFT第一点为原始信号的直流分量,其模值为原始信号模值的N倍。对于相位,FFT复数的相位即为原始信号在该频率点处的相位。

FFT后的N点复数,第一点表示直流分量(0Hz),而最后一点的下一点(实际不存在,假设为第N+1点)表示的频率为采样频率(Fs),这中间被N-1个点平均分为N等份,每点频率依次增加。例如,第k点所表示的频率为:FK=(K-1)Fs/N。所以FFT所能达到的频率分辨率为Fs/N。

FFT结果以N/2(换算为频率即为乃奎斯特频率,Fs/2)对称。因此我们只需要前半部分的结果,即在乃奎斯特频率内的结果。

示例1:假设FFT第k点用复数表示为:a+ib,则该数的模(或绝对值)为Ak=(a2+b2)0.5,相位为Pk=arctan(b/a),对应频率为FK=(K-1)Fs/N。所以该点对应的时域信号分量为:AnN2∙cos2∙π∙Fk∙t+Pn。

示例2:假设用1000Hz的采样率采信号:s=2+3∙cos2π∙200∙t+60°+4∙cos2π∙300∙t+120°,采样点数为1024。MATLAB程序如下:

N=1024;  //采样点数为1024

Fs=1000; //采样频率为1000Hz

t=[0:1/Fs:(N-1)/Fs];                //采样时刻

s=2+3*cos(2*pi*200*t+60*pi/180)+4*cos(2*pi*300*t+120*pi/180);   //对信号采样

Y=fft(s);  //做FFT运算

y=abs(Y);         //对FFT结果求模

i=1:N/2;  //

x=(i-1)*F/N;   //将时间点换算为相应频率

yy(i)=y(i);        //取前N/2点的FFT模值

yy=yy/(N/2); //做幅值变换,变换至时域信号幅值

yy(1)==yy(1)/2;     //对直流信号做幅值变换

plot(x,yy)                 //绘制图形

上图为FFT的幅频特性图。由上图可以看出,在200Hz和300Hz频点处幅值比原始信号(3、4)要低。这是因为对信号进行非整数倍周期采样(截断),产生频谱泄露。

上图为在同样条件下(N=1024,F=1000Hz)对信号s=2+1.5∙cos2π∙125∙t+60°+2.5∙cos2π∙250∙t+120°进行处理得到的FFT幅频特性图。可以看到由于是对信号进行整数倍的采样,不存在截断误差引起的频谱泄露。在125Hz频点和250Hz频点处幅值与原始信号相同。

  • 27
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值