基2FFT算法分析的介绍
- 格式:doc
- 大小:548.50 KB
- 文档页数:15
57 快速傅里叶变换
有限长序列可以通过离散傅里叶变换(DFT)将其频域也离散化成有限长序列.但其计算量太大,很难实时地处理问题,因此引出了快速傅里叶变换(FFT). 1965年,Cooley和Tukey提出了计算离散傅里叶变换(DFT)的快速算法,将DFT的运算量减少了几个数量级。从此,对快速傅里叶变换(FFT)算法的研究便不断深入,数字信号处理这门新兴学科也随FFT的出现和发展而迅速发展。根据对序列分解与选取方法的不同而产生了FFT的多种算法,基本算法是基2DIT和基2DIF。FFT在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。
快速傅里叶变换(FFT)是计算离散傅里叶变换(DFT)的快速算法。
DFT的定义式为
)(kX=)()(10kRWnxNNnknN
在所有复指数值knNW的值全部已算好的情况下,要计算一个)(kX需要N次复数乘法和N-1次复数加法。算出全部N点)(kX共需2N次复数乘法和)1(NN次复数加法。即计算量是与2N成正比的。
FFT的基本思想:将大点数的DFT分解为若干个小点数DFT的组合,从而减少运算量。
NW因子具有以下两个特性,可使DFT运算量尽量分解为小点数的DFT运算:
(1) 周期性:kNnNknNnNkNWWW)()(
(2) 对称性:kNNkNWW)2/( 58 利用这两个性质,可以使DFT运算中有些项合并,以减少乘法次数。例子:求当N=4时,X(2)的值
)()]3()1([)]2()0([)()]3()1([)]2()0([)3()2()1()0()()2(042404644424043024对称性-=周期性WxxxxWxxWxxWxWxWxWxWnxXnn
通过合并,使乘法次数由4次减少到1次,运算量减少。
FFT的算法形式有很多种,但基本上可以分为两大类:按时间抽取(DIT)和按频率抽取(DIF)。
4.1 按时间抽取(DIT)的FTT
为了将大点数的DFT分解为小点数的DFT运算,要求序列的长度N为复合数,最常用的是MN2的情况(M为正整数)。该情况下的变换称为基2FFT。下面讨论基2情况的算法。
先将序列x(n)按奇偶项分解为两组
)()12()()2(21rxrxrxrx 12,,1,0Nr
将DFT运算也相应分为两组
)]([)(nxDFTkX10)(NnknNWnx
1n 010)()(NnknNNnnknNWnxWnx为奇数为偶数+
12/0)12(12/02)12()2(NrkrNNrrkNWrxWrx= 59 12/02212/021)()(NrrkNkNNrrkNWrxWWrx=
12/02/212/02/1)()(NrrkNkNNrrkNWrxWWrx= (因为rkNrkNWW2/2)
)()(21kXWkXkN
其中)(1kX、)(2kX分别是)()(21nxnx、的N/2点的DFT
)(1kX120,)2()(12/02/12/02/1NkWrxWrxNrrkNNrrkN=
)(2kX120,)12()(12/02/12/02/2NkWrxWrxNrrkNNrrkN=
至此,一个N点DFT被分解为两个N/2点的DFT。
上面是否将全部N点的)(kX求解出来了?
分析:)(1kX和)(2kX只有N/2个点(12,,1,0Nk),则由)(kX)()(21kXWkXkN只能求出)(kX的前N/2个点的DFT,要求出全部N点的)(kX,需要找出)(1kX、)(2kX和)2/(NkX的关系,其中12,,1,0Nk。由式子)(kX)()(21kXWkXkN可得
)2/(NkX)2/()2/(22/1NkXWNkXNkN化简得
)2/(NkX=)()(21kXWkXkN,12,,1,0Nk
这样N点DFT可全部由下式确定出来:
)()()2/()()()(2121kXWkXNkXkXWkXkXkNkN 12,,1,0Nk (*)
上式可用一个专用的碟形符号来表示,这个符号对应一次复乘和两次复加运 60 算。
abkNWbWakNbWakN-1
图 蝶形运算符号
通过这样的分解以后,每一个N/2点的DFT只需要4)2(22NN次复数乘法,两个N/2点的DFT需要2)2(222NN次复乘,再加上将两个N/2点DFT合并成为N点DFT时有N/2次与W因子相乘,一共需要22222NNN次复乘。可见,通过这样的分解,运算量节省了近一半。
因为MN2,N/2仍然是偶数,因此可以对两个N/2点的DFT再分别作进一步的分解,将两个N/2点的DFT分解成两个N/4点的DFT。
例如对)(1rx,可以在按其偶数部分及奇数部分进行分解:
)()12()()2(4131lxlxlxlx 14,,1,0Nl
则的运算可相应分为两组:
)(1kX14/0)12(2/114/022/1)12()2(NlklNNllkNWlxWlx=
14/04/42/14/04/3)()(NllkNkNNllkNWlxWWlx=
)()(42/3kXWkXkN 14,,1,0Nk 61 将系数统一为以N为周期,即kNkNWW22/,可得
)()()4/()()()(42314231kXWkXNkXkXWkXkXkNkN 14,,1,0Nk
同样,对)(2kX也可进行类似的分解。一直分解下去,最后是2点的DFT,2点DFT的运算也可用碟形符号来表示。这样,对于一个823N的DFT运算,其按时间抽取的分解过程及完整流图如下图所示。
62
这种方法,由于每一步分解都是按输入序列在时域上的次序是属于偶数还是奇数来抽取的,故称为“时间抽取法”。
分析上面的流图,MN2,一共要进行M次分解,构成了从x(n)到X(k)的M级运算过程。每一级运算都是由N/2个蝶形运算构成,因此每一级运算都需要N/2次复乘和N次复加,则按时间抽取的M级运算后总共需要
复数乘法次数:NNMNmF2log22
复数加法次数:NNMNaF2log
根据上面的流图,分析FFT算法的两个特点,它们对FFT的软硬件构成产生很大的影响。
(1) 原位运算
也称为同址运算,当数据输入到存储器中以后,每一级运算的结果仍然存储在原来的存储器中,直到最后输出,中间无需其它的存储器。根据运算流图分析原位运算是如何进行的。原位运算的结构可以节省存储单元,降低设备成本。
(2) 变址
分析运算流图中的输入输出序列的顺序,输出按顺序,输入是“码位倒置”的顺序。见图。 63 自然顺序 二进制表示 码位倒置 码位倒置顺序
0 000 000
0
1
001 100 4
2 010 010 2
3 011 110 6
4 100 001 1
5 101 101 5
6 110 011 3
7 111 111 7
码位倒置顺序
01234567X(0)X(4)X(2)X(6)X(1)X(5)X(3)X(7)码位倒置的变址处理
在实际运算中,直接将输入数据x(n)按码位倒置的顺序排好输入很不方便,一般总是先按自然顺序输入存储单元,然后通过变址运算将自然顺序的存储换成码位倒置顺序的存储,这样就可以进行FFT的原位运算。变质的功能如图所示。用软件实现是通用采用雷德(Rader)算法,算出I的倒序J以后立即将输入数据X(I)和X(J)对换。尽管变址运算所占运算量的比例很小,但对某些高要求的应用(尤其在实时信号处理中),也可设法用适当的电路结构直接实现变址。例如单片数字信号处理器TMS320C25就有专用于FFT的二进制码变址模式。 64 4.2 按频率抽取(DIF)的FTT
除时间抽取法外,另外一种普遍使用的FFT结构是频率抽取法。频率抽取法将输入序列不是按奇、偶分组,而是将N点DFT写成前后两部分:
)]([)(nxDFTkX10)(NnknNWnx
12/1)2/(0)()(NNnknNNnknNWnxWnx+
12/0)2/(12/0)2/()(NnkNnNNnnkNWNnxWnx=
nkNNnkNNWNnxWnx12/0)2/()]2/()([=
因为kkNNNNWW)1(,1)2/(2/,k为偶数时1)1(k,k为奇数时1)1(k,由此可将X(k)分解为偶数组和奇数组:
nkNNnkWNnxnxkX12/0)]2/()1()([)(=
nrNNnnrNNnWNnxnxWNnxnxrX2/12/0212/0)]2/()([)]2/()([)2(=
nrNnNNnnrNNnWWNnxnxWNnxnxrX2/12/0)12(12/0)]2/()([)]2/()([)12(=
令nNWNnxnxnxNnxnxnx)]2/()([)()2/()()(21 12/,,1,0Nn 65 这两个序列都是N/2点的序列,对应的是两个N/2点的DFT运算:
nrNNnWnxrX2/12/01)]()2(=
rnNNnWnxrX2/12/02)()12(=
这样,同样是将一个N点的DFT分解为两个N/2点的DFT了。频率抽选法对应的碟形运算关系图如下:
abnNWbanNWba)(-1
对于N=8时频率抽取法的FFT流图如下:
66
这种分组的办法由于每次都是按输出X(k)在频域的顺序上是属于偶数还是奇数来分组的,称为频率抽取法。与前面按时间抽取的方法相比,相同点
问题:如何利用快速算法计算IDFT?
分析IDFT的公式:
1,,1,0,)(1)]([)(10NnWkXNkXIDFTnxNknkN
比较DFT的公式:
1,,1,0,)()]([)(10NkWnxnxDFTkXNnnkN
得知可用两种方法来实现IDFT的快速算法:(1)只要把DFT运算中的每一个系数nkNW该为nkNW,并且最后再乘以常数N1,就可以用时间抽取法或频率抽取的FFT算法来直接计算IDFT。这种方法需要对FFT的程序和参数稍加改动才能实现。(2)因为