《2022年用Matlab实现快速傅立叶变换 .pdf》由会员分享,可在线阅读,更多相关《2022年用Matlab实现快速傅立叶变换 .pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、用 Matlab 实现快速傅立叶变换FFT 是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT 变换的原因。另外,FFT 可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。虽然很多人都知道FFT 是什么,可以用来做什么,怎么去做,但是却不知道FFT 之后的结果是什意思、如何决定要使用多少点来做FFT。现在就根据实际经验来说说FFT 结果的具体物理意义。一个模拟信号,经过ADC 采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此啰嗦了
2、。采样得到的数字信号,就可以做FFT 变换了。 N 个采样点,经过FFT 之后,就可以得到N 个点的 FFT 结果。为了方便进行FFT 运算,通常N 取 2 的整数次方。假设采样频率为Fs,信号频率F,采样点数为N。那么 FFT 之后结果就是一个为N 点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么 FFT 的结果的每个点(除了第一个点直流分量之外)的模值就是 A 的 N/2 倍。而第一个点就是直流分量,它的模值就是直流分量的N 倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即
3、 0Hz),而最后一个点N 的再下一个点(实际上这个点是不存在的,这里是假设的第N+1 个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1 个点平均分成N 等份,每个点的频率依次增加。例如某点n 所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出, Fn 所能分辨到频率为为Fs/N,如果采样频率Fs 为 1024Hz ,采样点数为1024 点,则可以分辨到1Hz。1024Hz 的采样率采样1024 点,刚好是 1 秒,也就是说,采样1 秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2 秒时间的信号并做FFT,则结果可以分析到0.5
4、Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。假设 FFT 之后某点 n 用复数 a+bi 表示,那么这个复数的模就是An= 根号 a*a+b*b, 相位就是Pn=atan2(b,a)。 根据以上的结果, 就可以计算出n 点 (n1,且 n=N/2 )对应的信号的表达式为:An/(N/2)*cos(2*pi*Fn*t+Pn),即 2*An/N*cos(2*pi*Fn*t+Pn)。对于 n=1 点的信号, 是直流分量, 幅度即为 A1/N 。由于 FFT 结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。下面以一个实际的信号来做
5、说明。假设我们有一个信号,它含有2V 的直流分量,频率为50Hz、相位为 -30 度、幅度为3V 的交流信号,以及一个频率为75Hz、相位为90 度、幅度为1.5V 的交流信号。用数学表达式就是如下:S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)。式中 cos参数为弧度, 所以-30 度和 90 度要分别换算成弧度。 我们以 256Hz 的采样率对这个信号进行采样,总共采样256 点。 按照我们上面的分析, Fn=(n-1)*Fs/N,我们可以知道,每两个点之间的间距就是1Hz,第 n 个点的频率就是n-1 。我们的信号有
6、3 个频率: 0Hz、50Hz、75Hz,应该分别在第1 个点、第51 个点、第 76 个点上出现峰值,其它各点应该接近0。实际情况如何呢?我们来看看FFT 的结果的模值如图所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 4 页 - - - - - - - - - 从图中我们可以看到,在第1 点、第 51 点、和第 76 点附近有比较大的值。我们分别将这三个点附近的数据拿上来细看:1 点:512+0i 2 点:-2.6195E-14 - 1.4162E-13i 3
7、点:-2.8586E-14 - 1.1898E-13i 50 点: -6.2076E-13 - 2.1713E-12i 51 点: 332.55 - 192i 52 点: -1.6707E-12 - 1.5241E-12i 75 点: -2.2199E-13 -1.0076E-12i 76 点: 3.4315E-12 + 192i 77 点: -3.0263E-14 +7.5609E-13i 很明显, 1 点、 51 点、 76 点的值都比较大,它附近的点值都很小,可以认为是0,即在那些频率点上的信号幅度为0。接着,我们来计算各点的幅度值。名师资料总结 - - -精品资料欢迎下载 - - -
8、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 4 页 - - - - - - - - - 分别计算这三个点的模值,结果如下:1 点:512 51 点: 384 76 点: 192 按照公式,可以计算出直流分量为:512/N=512/256=2; 50Hz 信号的幅度为: 384/(N/2)=384/(256/2)=3; 75Hz 信号的幅度为192/(N/2)=192/(256/2)=1.5。可见,从频谱分析出来的幅度是正确的。然后再来计算相位信息。直流信号没有相位可言,不用管它。先计算50Hz 信号的相位, atan2(
9、-192, 332.55)=-0.5236,结果是弧度,换算为角度就是180*(-0.5236)/pi=-30.0001。再计算 75Hz 信号的相位, atan2(192, 3.4315E-12)=1.5708弧度,换算成角度就是180*1.5708/pi=90.0002。可见,相位也是对的。根据FFT 结果以及上面的分析计算,我们就可以写出信号的表达式了,它就是我们开始提供的信号。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 4 页 - - - - - - - -
10、- 总结:假设采样频率为Fs,采样点数为N,做 FFT 之后,某一点n(n 从 1 开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2 就是对应该频率下的信号的幅度(对于直流信号是除以N);该点的相位即是对应该频率下的信号的相位。相位的计算可用函数atan2(b,a) 计算。 atan2(b,a) 是求坐标为(a,b) 点的角度值,范围从-pi 到 pi。要精确到xHz,则需要采样长度为1/x 秒的信号,并做FFT。要提高频率分辨率,就需要增加采样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析。解决这个问题的方法有频率细分法,比较简单的方法是采样比较短时间的信号,然后在后面补充一定数量的0,使其长度达到需要的点数,再做FFT,这在一定程度上能够提高频率分辨力。具体的频率细分法可参考相关文献。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 4 页 - - - - - - - - -