450 likes | 630 Views
第 4 章 快速傅里叶变换 (FFT). 4.1 引言 4.2 基 2FFT 算法 4.3 进一步减少运算量的措施. 4.1 引言. DFT 是信号分析与处理中的一种重要变换。因直接计算 DFT 的计算量与变换区间长度 N 的平方成正比,当 N 较大时,计算量太大,所以在快速傅里叶变换 ( 简称 FFT) 出现以前,直接用 DFT 算法进行谱分析和信号的实时处理是不切实际的。直到 1965 年发现了 DFT 的一种快速算法以后,情况才发生了根本的变化。. 4.2 基 2 FFT 算法.
E N D
第4章 快速傅里叶变换(FFT) • 4.1 引言 • 4.2 基2FFT算法 • 4.3 进一步减少运算量的措施
4.1 引言 • DFT是信号分析与处理中的一种重要变换。因直接计算DFT的计算量与变换区间长度N的平方成正比,当N较大时,计算量太大,所以在快速傅里叶变换(简称FFT)出现以前,直接用DFT算法进行谱分析和信号的实时处理是不切实际的。直到1965年发现了DFT的一种快速算法以后,情况才发生了根本的变化。
4.2 基2 FFT算法 • 4.2.1 直接计算DFT的特点及减少运算量的基本途径 • 复数序列的一般情况,对某一个k值,直接按上式计算X(k)值需要N次复数乘法、(N-1)次复数加法。
N点DFT的复乘次数等于N2。显然,把N点DFT分解为几个较短的DFT,可使乘法次数大大减少。另外,旋转因子 具有明显的周期性和对称性。其周期性表现为 其对称性表现为 或者
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点的子序列
则x(n)的DFT为 由于 所以
其中X1(k)和X2(k)分别为x1(r)和x2(r)的N/2点DFT,即 由于X1(k)和X2(k)均以N/2为周期,且 ,所以X(k)又可表示为
与第一次分解相同,将x1(r)按奇偶分解成两个N/4长的子序列x3(l)和x4(l),即与第一次分解相同,将x1(r)按奇偶分解成两个N/4长的子序列x3(l)和x4(l),即 那么,X1(k)又可表示为
式中 同理,由X3(k)和X4(k)的周期性和WmN/2的对称性 Wk+N/4N/2=-WkN/2最后得到:
(4.2.11) • 用同样的方法可计算出 其中
4.2.3 DIT―FFT算法与直接计算DFT运算量的比较 • 每一级运算都需要N/2次复数乘和N次复数加(每个蝶形需要两次复数加法)。所以,M级运算总共需要的复数乘次数为 复数加次数为 例如,N=210=1024时
图4.2.5 FFT算法与直接计算DFT所需乘法次数的比较曲线
4.2.4 DIT―FFT的运算规律及编程思想 • 1.原位计算 • 由图4.2.4可以看出,DIT―FFT的运算过程很有规律。N=2M点的FFT共进行M级运算,每级由N/2个蝶形运算组成。
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级的旋转因子为
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
4. 编程思想及程序框图 图4.2.6 DIT―FFT运算和程序框图
5. 序列的倒序 • DIT―FFT算法的输入序列的排序看起来似乎很乱,仔细分析就会发现这种倒序是很有规律的。由于N=2M,顺序数可用M位二进制数(nM-1nM-2…n1n0)表示。 图4.2.7 形成倒序的树状图(N=23)
正向进位与反向进位 • 1 0 0 1 0 0 • + 1 0 0 + 1 0 0 • ———— ———— • 1 0 0 0 0 1 0
位倒序寻址 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
位倒序寻址 • AR0 = 100 • AR1 = 000 • 按AR1寻址后,将AR0加给AR1,反向进位 • ADD *BR0+,8,A ;执行加法后,将AR0的值加给当前辅助寄存器,但反向进位
4.2.5 频域抽取法FFT(DIF―FFT) • 在基2快速算法中,频域抽取法FFT也是一种常用的快速算法,简称DIF―FFT。 • 设序列x(n)长度为N=2M,首先将x(n)前后对半分开,得到两个子序列,其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)分别代入(4.2.14)和(4.2.15)式,可得
4.2.6 IDFT的高效算法 • 上述FFT算法流图也可以用于离散傅里叶逆变换(Inverse Discrete Fourier Transform,简称IDFT)。比较DFT和IDFT的运算公式:
如果希望直接调用FFT子程序计算IFFT,则可用下面的方法:如果希望直接调用FFT子程序计算IFFT,则可用下面的方法: • 由于 对上式两边同时取共轭,得
4.3 进一步减少运算量的措施 • 4.3.1 多类蝶形单元运算 • 由DIT―FFT运算流图已得出结论,N=2M点FFT共需要MN/2次复数乘法。 • 由(4.2.12)式,当L=1时,只有一种旋转因子W0N=1,所以,第一级不需要乘法运算。
综上所述,先除去第一、二两级后,所需复数乘法次数应是综上所述,先除去第一、二两级后,所需复数乘法次数应是 • 从L=3至L=M共减少复数乘法次数为 因此, DIT―FFT的复乘次数降至
从实数运算考虑,计算N=2M点DIT―FFT所需实数乘法次数为从实数运算考虑,计算N=2M点DIT―FFT所需实数乘法次数为
4.3.2 旋转因子的生成 • 在FFT运算中,旋转因子WmN=cos(2πm/N)-jsin(2πm/N),求正弦和余弦函数值的计算量是很大的。