理论教育 快速傅里叶变换详解

快速傅里叶变换详解

时间:2023-06-15 理论教育 版权反馈
【摘要】:傅里叶变换是一种将时域信号变换为频域信号的积分变换形式。快速傅里叶变换是离散傅里叶变换的快速实现方法,是数字信号处理中的重要算法之一。离散傅里叶变换共需要计算N2次复数乘法和N(N-1)复数次加法,在N较大时,这个计算量很大,为此需要采用快速离散傅里叶变换。

快速傅里叶变换详解

傅里叶变换是一种将时域信号变换为频域信号的积分变换形式。在频域分析中,信号的频率及对应的幅值、相位(统称为频谱)反映了系统的性能。快速傅里叶变换(Fast Fou-rier Transform,FFT)是离散傅里叶变换(Discrete Fourier Transform,DFT)的快速实现方法,是数字信号处理(DSP)中的重要算法之一。

1.快速傅里叶变换的基本原理

非周期连续时间信号xt)的傅里叶变换为

上式计算出来的是信号xt)的连续频谱。实际系统中经常得到的是信号xt)的离散采样值xnT)(T为采样周期,n=0,1,…,N-1),简记为xn)。N点采样值频谱取样的谱间距为

那么序列xn)的离散傅里叶变换为

式中,Xk)是时间序列xn)的频谱;WN称为蝶形因子或旋转因子。对于N点时域采样值,经过离散傅里叶变换计算,可以得到N个频谱条。每计算一个Xk)值需要N复数相乘和N-1次复数相加,对于NXk)应重复计算N次。离散傅里叶变换共需要计算N2次复数乘法和NN-1)复数次加法,在N较大(例如N=1024)时,这个计算量很大,为此需要采用快速离散傅里叶变换。

序列xn)按序号n的奇偶可以分成两组,即

x1n)=x(2n

x2n)=x(2n+1),n=0,1,…,N/2-1

所以,xn)的离散傅里叶变换可写为

由此可得(www.daowen.com)

Xk)=X1k)+WkNX2k),k=0,1,…,N/2-1 (15-19)

式中

X1k)和X2k)分别是x1n)和x2n)的N/2点DFT。上面的推导表明,一个N点的DFT可以分解为两个N/2点的DFT,而这两个N/2点的DFT又可以合成一个N点的DFT,但上面给出的公式仅能得到Xk)的前N/2点的值,要用X1k)和X2k)来表示Xk)的后半部分,还必须运用蝶形因子WN的周期性与对称性,即

因此,Xk)的后N/2点可以表示为

由此可见,一个N点的DFT可以分解为两个N/2点的DFT,每个N/2点的DFT又可以分解为两个N/4点的DFT。依此类推,当N为2的整数次幂(N=2M)时,由于每分解一次降低一次幂阶,所以通过M次分解,最后全部成为一系列2点DFT运算。这样计算量可以减为(N/2)log2N个乘法运算和Nlog2N个加法运算,比DFT的计算量大大减轻。以上就是按时间抽取的FFT算法。式(15-19)和(15-21)表示的运算称为蝶形运算。

2.FFT的实现

例15-1 时间抽取的FFT算法DSPC语言实现实例。

FFT运算函数与主函数为

由于上述代码中调用了pow、log、cos及sin函数,该函数所在的C文件应包含头文件math.h。调用FFT函数进行FFT运算时,需要提供的参数为FFT运算点数、时域序列的实部与虚部。另外,FFT函数包含的函数finv(N,Xr,Xi)为倒序运算,函数代码如下。

可以通过CCS软件调试该程序,并用其中的View>Graph>Time/Frequency菜单功能,显示变量INPUT与DATA图形,观察FFT的效果。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈