所以只要将上述的DIT-FFT与DIF-FFT算法中的旋转因子改为
4.2.5 频域抽取法FFT(DIF-FFT) 在基2FFT算法中,频域抽取法FFT也是一种常用的快速算法,简称DTF- FFT。 设序列x(n)长度为N=2M,首先将x(n)前后对半分开,得到两个子序列,其DFT可表示为如下形式: 式中 将X(k)分解成偶数组与奇数组,当k取偶数(k=2m, m=0, 1, …, N/2-1)时 (4.2.14) 当k取奇数(k=2m+1, m=0, 1, …, N/2-1)时, 令 (4.2.15) 将x1(n)和x2(n)分别代入(4.2.14)和(4.2.15)式,可得 (4.2.16)式表明,X(k)按奇偶k值分为两组,其偶数组是x1(n)的N/2点DFT,奇数组则是x2(n)的N/2点DFT。x1(n)、x2(n)和x(n)之间的关系也可用图4.2.10所示的蝶形运算流图符号表示。图4.2.11表示N=8时第一次分解的运算流图。 (4.2.16) 图4.2.10 DTF-FFT蝶形运算流图符号 序列的前半部分 序列的后半部分 图4.2.11 DIF-FFT第一次分解运算流图(N=8) 由于N=2M,N/2仍然是偶数,继续将N/2点DFT分成 偶数组和奇数组,这样每个N/2点DFT又可由两个N/4 点DFT形成,其输入序列分别是x1(n)和x2(n)按上下对 半分开形成的四个子序列。 图4.2.12示出了N=8时第二次分解运算流图。以这种方 式分解下去,经过M-1次分解,最后分解为2M-1个 两点DFT,两点DFT就是一个基本蝶形运算流图。 当N=8,经两次分解,便分解为四个两点DFT。N = 8 的完整DIF-FFT运算流图如图4.2.13所示。 图4.2.12 DIF-FFT第二次分解运算流图(N = 8) 图4.2.13 DIF-FFT运算流图(N =8) 这种算法是对X(k)进行奇偶抽取分解的结果,所以称之为 频域抽取法FFT。 观察图4.2.13可知,DIF-FFT算法与DIT-TTF算法类似, 共有M级运算,每级共有N/2个蝶形运算,所以两种算法 的运算次数亦相同。 不同的是DIF-FFT算法输入序列为自然顺序,而输出为倒 序排列。因此,M级运算完后,要对输出数据进行排序才 能得到自然顺序的X(k)。 另外,蝶形运算略有不同,DIT-FFT蝶形先乘后加(减), 而DIF-FFT蝶形先加(减)后相乘。 4.2.6 IDFT的高效算法 上述FFT算法流图也可以用于计算IDFT。比较DFT和IDFT的运算公式: 只要将DFT运算式中的系数 改为 ,最后乘以 1/N,就是IDFT运算公式。 所以,只要将上述的DIT-FFT与DIF-FFT算法中的旋 转因子 改为 ,最后的输出再乘以1/N就可以用 来计算IDFT。只是现在流图的输入是X(k),输出就 是x(n)。 因此,原来的DIT-FFT改为IFFT后,称为DIF-IFFT 更合适;DIF-FFT改为IFFT后, 应称为DIT-IFFT。 如果希望直接调用FFT子程序计算IFFT,则可用下面的方法: 由于 所以,可以先将X(k)取复共轭,然后直接调用FFT子程序,最后取复共轭并乘以1/N得到序列x(n)。这种方法虽然用了两次取共轭运算,但可以与FFT共用同一子程序,因而用起来很方便。 图4.2.4 8点DIT-FFT运算流图 L=1 L=2 L=3 4.3 进一步减少运算量的措施 4.3.1 多类蝶形单元运算 由DIT-FFT运算流图已得出结论,N=2M点FFT共需要MN/2次复数乘法。 由(4.2.12)式,当L=1时,只有一种旋转因子 所以,第一级不需要乘法运算。当L=2 时,共有两个旋转因子: 和 ,因此,第二级也不需要乘法运算。在DFT中,又称其值为±1和±j的旋转因子为无关紧要的旋转因子如 , , 等。 综上所述,先除去第一、二两级后,所需复数乘法次数应是 进一步考虑各级中的无关紧要旋转因子。当L=3时,有两个无关紧要的旋转因子 和 ,因为同一旋转因子对应着2M-L=N/2L个碟形运算,所以第三级共有2·N/23=N/4 个碟形不需要复数乘法运算。依此类推,当L≥3时,第L级的2个无关紧要的旋转因子减少复数乘法的次数为2·N/2L=N/2L-1。这样,从L