《第2章离散傅里叶变换及其快速算法3.ppt》由会员分享,可在线阅读,更多相关《第2章离散傅里叶变换及其快速算法3.ppt(43页珍藏版)》请在三一办公上搜索。
1、2.3 快速傅里叶变换(FFT),一、直接计算DFT的问题及改进的途径二、按时间抽取的基2FFT算法三、按频率抽取的基2FFT算法四、离散傅立叶反变换的快速算法 五、N为组合数的FFT算法六、Chirpz变换,一、直接计算DFT的问题及改进的途径,1.直接计算DFT的问题 长度为N的有限长序列x(n)的DFT为 考虑x(n)为复数序列的一般情况,对某一个k值,直接按(1)式计算X(k)值需要N次复数乘法、(N-1)次复数加法。,(1),X(k)一共有N个点,故完成全部DFT运算,需要N2次复数相乘和N(N-1)次复数相加,在这些运算中,乘法比加法复杂,需要的运算时间多,尤其是复数相乘,每个复数
2、相乘包括4个实数相乘和2个实数相加,例 又每个复数相加包括2个实数相加,所以,每计算一个 X(k)要进行4N次实数相乘和2N+2(N-1)=2(2N-1)次实数相加,因此,整个DFT运算需要4N2实数相乘和2N(2N-1)次实数相加。,从上面的分析看到,在DFT计算中,不论是乘法和加法,运算量均与N2成正比。因此,N较大时,运算量十分可观。例,计算N=10点的DFT,需要100次复数相乘,而N=1024点时,需要1048576(一百多万)次复数乘法,如果要求实时处理,则要求有很高的计算速度才能完成上述计算量。反变换IDFT与DFT的运算结构相同,只是多乘一个常数1/N,所以二者的计算量相同。,
3、DFT是信号分析与处理中的一种重要变换。因直接计算DFT的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大,所以在快速傅里叶变换(简称FFT)出现以前,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。直到1965年发现了DFT的一种快速算法以后,情况才发生了根本的变化。,2.减少运算量的基本途径 显然,把N点DFT分解为几个较短的DFT,可使乘法次数大大减少。另外,旋转因子 具有明显的周期性和对称性。其周期性表现为,其对称性表现为,或者,二、按时间抽取的基2FFT算法,按n的奇偶把x(n)分解为两个N/2点的子序列。偶数项为一组,奇数项为一组。,则x(n)的DFT为,所以,由
4、于,于是,一个N点的DFT被分解为两个N/2点的DFT了,这两个N/2点的DFT再按照上式合并成一个N点DFT。,(1),只有N/2个点,而 却有N个点,要用,表达全部 值,还必须利用 系数的周期特性。,即,同样又考虑到 的对称性:,将上述三个式子代入式(1),就可将 表达为前后两部分:,(2),(3),式(2)、(3)可以用上图的“蝶形结”来表示。通过上述分解后,每个N/2点DFT只需要(N/2)2=N2/4次复数相乘。依此类推,X1(k)和X2(k)可以继续分下去,这种按时间抽取算法是在输入序列分成越来越小的子序列上执行DFT运算,最后再合成为点的DFT。,蝶形信号流图,将X1(k)和X2
5、(k)合成X(k)运算可归结为:,图(a)为实现这一运算的一般方法,它需要两次乘法、两次加减法。考虑到-bW和bW两个乘法仅相差一负号,可将图(a)简化成图(b),此时仅需一次乘法、两次加减法。图(b)的运算结构像一蝴蝶通常称作蝶形运算结构简称蝶形结,采用这种表示法,就可以将以上所讨论的分解过程用流图表示。,两个N/2点的DFT需要2(N/2)2=N2/2次复乘,再加上将两个N/2点的DFT合成为N点DFT时蝶形结前的N/2次复乘,一共需要 次复乘。可见,分解后运算量大约节省了一倍。既然这样的分解是有效的,由于N/2仍然是偶数,因此可以对两个N/2点的DFT再分别作进一步分解。如右图所示:,N
6、=23=8 的例子。,与第一次分解相同,将x1(r)按奇偶分解成两个N/4长的子序列x3(l)和x4(l),即,那么,X1(k)又可表示为,式中,同理,由X3(k)和X4(k)的周期性和Wm N/2的对称性 Wk+N/4 N/2=-Wk N/2 最后得到:,用同样的方法可计算出,其中,最后剩下的是2点DFT,它可以用一个蝶形结表示:这样,一个8点的完整的按时间抽取运算的流图由于这种方法每一步分解都是按输入时间序列是属于偶数还是奇数来抽取的,所以称为“按时间抽取法”或“时间抽取法”。,按时间抽取的8点FFT,2.DITFFT算法与直接计算DFT运算量的比较 每一级运算都需要N/2次复数乘和N次复
7、数加(每个蝶形需要两次复数加法)。所以,M级运算总共需要的复数乘次数为,复数加次数为,例如,N=210=1024时,图 FFT算法与直接计算DFT所需乘法次数的比较曲线,时间抽取法FFT的运算特点:,(1)蝶形运算,(2)原位计算,(3)序数重排,(4)蝶形类型随迭代次数成倍增加,(1)蝶形运算对于N=2M,总是可以通过M次分解最后成为2点的DFT运算。这样构成从x(n)到X(k)的M级运算过程。从上面的流图可看到,每一级运算都由N/2个蝶形运算构成。因此每一级运算都需要N/2次复乘和N次复加,这样,经过时间抽取后M级运算总共需要的运算:复乘 复加 而直接运算时则与N2 成正比。例N=2048
8、,N2=4194304,(N/2)log2N=11264,N2/(N/2)log2N=392.4。FFT显然要比直接法快得多。,(2)原位计算 当数据输入到存储器中以后,每一级运算的结果仍然储存在同一组存储器中,直到最后输出,中间无需其它存储器,这叫原位计算。每一级运算均可在原位进行,这种原位运算结构可节省存储单元,降低设备成本,还可节省寻址的时间。,(3)序列的倒序 DITFFT算法的输入序列的排序看起来似乎很乱,但仔细分析就会发现这种倒序是很有规律的。由于N=2M,所以顺序数可用M位二进制数(nM-1nM-2n1n0)表示。,图 形成倒序的树状图(N=23),表 顺序和倒序二进制数对照表,
9、图 倒序的变址处理,图 倒序程序框图,第一次分偶、奇,根据最低位n0的0、1状态来分,若n0=0,则为偶序列;n0=1则为奇序列,得到两组序列:000 010 100 110 001 011 101 111第二次对这两个偶、奇序列再分一次偶、奇序列,这就要根据n1的、状态。若n1=0,则为偶序列;n1=1则为奇序列,得到四组序列:000 100 010 110 001 101 011 111同理,再根据n2的、状态来分偶、奇序列,直到不能再分偶、奇时为止。对于N=8,n2已是最高位,最后一次分得结果为000 100 010 110 001 101 011 111,(4)蝶形类型随迭代次数成倍增
10、加观察8点FFT的三次迭代运算:第一级迭代,有一种类型的蝶形运算系数W08,两个数据点间隔为1第二级迭代,有二种类型的蝶形运算系数W08、W28,参加运算的两个数据点间隔为2。第三级迭代,有四类蝶形运算系数W08、W18、W28、W38,参加运算的两个数据点间隔为4。结论:每迭代一次,蝶形类型增加一倍,数据点间隔也增大一倍。每一级的取数间隔和蝶形类型种类均为2i-1,i=1,2,M。,(5)编程思想及程序框图,图 DITFFT运算和程序框图,三、频域抽取法FFT(DIFFFT)在基2快速算法中,频域抽取法FFT也是一种常用的快速算法,简称DIFFFT。设序列x(n)长度为N=2M,首先将x(n
11、)前后对半分开,得到两个子序列,其DFT可表示为如下形式:,偶数,奇数,将X(k)分解成偶数组与奇数组,当k取偶数(k=2r,r=0,1,N/2-1)时,当k取奇数(k=2r+1,r=0,1,N/2-1)时,将x1(n)和x2(n)分别代入上两式,可得,图 DIFFFT蝶形运算流图符号,以N=8的频率抽取为例,按频率抽取将8点DFT分解成四个2点DFT,与时间抽取法一样,由于N=2M,N/2仍是一个偶数,这样,一个N=2M点的DFT通过M次分解后,最后只剩下全部是2点的DFT,2点DFT实际上只有加减运算。但为了比较,也为了统一运算的结构,仍用一个系数为W0N 的蝶形运算来表示。频率抽取法的流
12、图是时域抽取法流图的左右翻转。下图是N=8的频率抽取法FFT流图。,N=8的按频率抽取FFT运算流图,频率抽取法FFT的运算特点:(1)蝶形运算 对于任何一个2的整数幂N=2M,总是可以通过M次分解最后完全成为2点的DFT运算。这样的M次分解,就构成从x(n)到X(k)的M级运算过程。将频率抽取法的流图反转,并将输入变输出,输出变输入,得到的便是时间抽取法流图(反映了时域,频域的对称法)。频率抽取法也共有M级运算(N=2M),其运算量与时间抽取法相同。(2)原位计算 类似于时间抽取法,当数据输入到存储器中以后,每一级运算的结果仍然储存在同一组存储器中,直到最后输出,中间无需其它存储器,所以频域抽取法也可进行原位计算。,(3)序数重排 它的输入正好是自然顺序。但它的输出却是码位倒置的顺序。因此运算完毕后,要通过变址运算将码位倒置的顺序转换为自然顺序,然后输出,变址方法同时间抽取法。(4)蝶形类型随迭代次数成倍减少(与时间抽取法相反)第一级迭代中有N/2种蝶形运算系数,参加蝶形运算的两个数据相隔N/2,随后每次迭代,蝶形类形比前一级减少一倍,间距也减少一倍,最后一级迭代,蝶形类形只有一种W0N,数据间隔为1。由这几点规律可以看出,频率抽取法与时间抽到法是两种等价的FFT运算。,