概述
文章转自: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频点处幅值与原始信号相同。
最后
以上就是霸气烤鸡为你收集整理的二次转载:matlab中的FFT结果理解的全部内容,希望文章能够帮你解决二次转载:matlab中的FFT结果理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复