1 / 45

第 4 章 快速傅里叶变换 (FFT)

第 4 章 快速傅里叶变换 (FFT). 4.1 引言 4.2 基 2FFT 算法 4.3 进一步减少运算量的措施. 4.1 引言. DFT 是信号分析与处理中的一种重要变换。因直接计算 DFT 的计算量与变换区间长度 N 的平方成正比,当 N 较大时,计算量太大,所以在快速傅里叶变换 ( 简称 FFT) 出现以前,直接用 DFT 算法进行谱分析和信号的实时处理是不切实际的。直到 1965 年发现了 DFT 的一种快速算法以后,情况才发生了根本的变化。. 4.2 基 2 FFT 算法.

Download Presentation

第 4 章 快速傅里叶变换 (FFT)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章 快速傅里叶变换(FFT) • 4.1 引言 • 4.2 基2FFT算法 • 4.3 进一步减少运算量的措施

  2. 4.1 引言 • DFT是信号分析与处理中的一种重要变换。因直接计算DFT的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大,所以在快速傅里叶变换(简称FFT)出现以前,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。直到1965年发现了DFT的一种快速算法以后,情况才发生了根本的变化。

  3. 4.2 基2 FFT算法 • 4.2.1 直接计算DFT的特点及减少运算量的基本途径 • 复数序列的一般情况,对某一个k值,直接按上式计算X(k)值需要N次复数乘法、(N-1)次复数加法。

  4. N点DFT的复乘次数等于N2。显然,把N点DFT分解为几个较短的DFT,可使乘法次数大大减少。另外,旋转因子 具有明显的周期性和对称性。其周期性表现为 其对称性表现为 或者

  5. 4.2.2 时域抽取法基2FFT基本原理 • FFT算法基本上分为两大类:时域抽取法FFT(Decimation In Time FFT,简称DIT-FFT)和频域抽取法FFT(Decimation In Frequency FFT,简称DIF―FFT)。下面先介绍DIF―FFT算法。 • 设序列x(n)的长度为N,且满足 为自然数 按n的奇偶把x(n)分解为两个N/2点的子序列

  6. 则x(n)的DFT为 由于 所以

  7. 其中X1(k)和X2(k)分别为x1(r)和x2(r)的N/2点DFT,即 由于X1(k)和X2(k)均以N/2为周期,且 ,所以X(k)又可表示为

  8. 图4.2.1 蝶形运算符号

  9. 图4.2.2 N点DFT的一次时域抽取分解图(N=8)

  10. 与第一次分解相同,将x1(r)按奇偶分解成两个N/4长的子序列x3(l)和x4(l),即与第一次分解相同,将x1(r)按奇偶分解成两个N/4长的子序列x3(l)和x4(l),即 那么,X1(k)又可表示为

  11. 式中 同理,由X3(k)和X4(k)的周期性和WmN/2的对称性 Wk+N/4N/2=-WkN/2最后得到:

  12. (4.2.11) • 用同样的方法可计算出 其中

  13. 图4.2.3 N点DFT的第二次时域抽取分解图(N=8)

  14. 图4.2.4 N点DIT―FFT运算流图(N=8)

  15. 4.2.3 DIT―FFT算法与直接计算DFT运算量的比较 • 每一级运算都需要N/2次复数乘和N次复数加(每个蝶形需要两次复数加法)。所以,M级运算总共需要的复数乘次数为 复数加次数为 例如,N=210=1024时

  16. 图4.2.5 FFT算法与直接计算DFT所需乘法次数的比较曲线

  17. 4.2.4 DIT―FFT的运算规律及编程思想 • 1.原位计算 • 由图4.2.4可以看出,DIT―FFT的运算过程很有规律。N=2M点的FFT共进行M级运算,每级由N/2个蝶形运算组成。

  18. 2.旋转因子的变化规律 • N点DIT―FFT运算流图中,每个蝶形都要乘以因子WpN,称其为旋转因子,p称为旋转因子的指数。 • L=1时, WpN=WJ N/4=WJ2L, J=0 • L=2时, WpN =WJ N/2=WJ2L, J=0,1 • L=3时, WpN =WJN=WJ2L, J=0,1,2 • 对N=2M的一般情况,第L级的旋转因子为

  19. 3. 蝶形运算规律 • 设序列x(n)经时域抽选(倒序)后,存入数组X中。如果蝶形运算的两个输入数据相距B个点,应用原位计算,则蝶形运算可表示成如下形式: • X (J) XL-1(J)+XL-1(J+B)WpN • XL(J+B) XL-1(J)-XL-1(J+B)WpN • 式中 • p=J·2 M-L;J=0,1,…,2L-1-1;L=1,2,…,M

  20. 4. 编程思想及程序框图 图4.2.6 DIT―FFT运算和程序框图

  21. 5. 序列的倒序 • DIT―FFT算法的输入序列的排序看起来似乎很乱,仔细分析就会发现这种倒序是很有规律的。由于N=2M,顺序数可用M位二进制数(nM-1nM-2…n1n0)表示。 图4.2.7 形成倒序的树状图(N=23)

  22. 表4.2.1 顺序和倒序二进制数对照表

  23. 图4.2.8 倒序规律

  24. 正向进位与反向进位 • 1 0 0 1 0 0 • + 1 0 0 + 1 0 0 • ———— ———— • 1 0 0 0 0 1 0

  25. 位倒序寻址 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

  26. 位倒序寻址 • AR0 = 100 • AR1 = 000 • 按AR1寻址后,将AR0加给AR1,反向进位 • ADD *BR0+,8,A ;执行加法后,将AR0的值加给当前辅助寄存器,但反向进位

  27. 倒序程序框图

  28. 4.2.5 频域抽取法FFT(DIF―FFT) • 在基2快速算法中,频域抽取法FFT也是一种常用的快速算法,简称DIF―FFT。 • 设序列x(n)长度为N=2M,首先将x(n)前后对半分开,得到两个子序列,其DFT可表示为如下形式:

  29. 偶数 奇数 将X(k)分解成偶数组与奇数组,当k取偶数 (k=2r,r=0,1,…,N/2-1)时

  30. 当k取奇数(k=2r+1,r=0,1,…,N/2-1)时 将x1(n)和x2(n)分别代入(4.2.14)和(4.2.15)式,可得

  31. 图4.2.10 DIF―FFT蝶形运算流图符号

  32. 图4.2.11 DIF―FFT一次分解运算流图(N=8)

  33. 图4.2.12 DIF―FFT二次分解运算流图(N=8)

  34. 图4.2.13 DIF―FFT运算流图(N=8)

  35. 图4.2.14 DIT―FFT的一种变形运算流图

  36. 图4.2.15 DIT―FFT的一种变形运算流图

  37. 4.2.6 IDFT的高效算法 • 上述FFT算法流图也可以用于离散傅里叶逆变换(Inverse Discrete Fourier Transform,简称IDFT)。比较DFT和IDFT的运算公式:

  38. 图4.2.16 DIT―IFFT运算流图

  39. 图4.2.17 DIT―IFFT运算流图(防止溢出)

  40. 如果希望直接调用FFT子程序计算IFFT,则可用下面的方法:如果希望直接调用FFT子程序计算IFFT,则可用下面的方法: • 由于 对上式两边同时取共轭,得

  41. 4.3 进一步减少运算量的措施 • 4.3.1 多类蝶形单元运算 • 由DIT―FFT运算流图已得出结论,N=2M点FFT共需要MN/2次复数乘法。 • 由(4.2.12)式,当L=1时,只有一种旋转因子W0N=1,所以,第一级不需要乘法运算。

  42. 综上所述,先除去第一、二两级后,所需复数乘法次数应是综上所述,先除去第一、二两级后,所需复数乘法次数应是 • 从L=3至L=M共减少复数乘法次数为 因此, DIT―FFT的复乘次数降至

  43. 从实数运算考虑,计算N=2M点DIT―FFT所需实数乘法次数为从实数运算考虑,计算N=2M点DIT―FFT所需实数乘法次数为

  44. 4.3.2 旋转因子的生成 • 在FFT运算中,旋转因子WmN=cos(2πm/N)-jsin(2πm/N),求正弦和余弦函数值的计算量是很大的。

More Related