870 likes | 1.1k Views
第 4 章 快速傅里叶变换. 4.1 DFT 的运算量分析. 4.1.1 直接计算 DFT 的运算量. 运算量. 从上面的分析看到,在 DFT 计算中,不论是乘法和加法,运算量均与 N 2 成正比。因此, N 较大时,运算量十分可观。例,计算 N=10 点的 DFT ,需要 100 次复数相乘,而 N=1024 点时,需要 1048576 (一百多万)次复数乘法,如果要求实时处理,则要求有很高的计算速度才能完成上述计算量。 反变换 IDFT 与 DFT 的运算结构相同,只是多乘一个常数 1/N ,所以二者的计算量相同。. 4.1.2 改善 DFT 运算效率的基本途径.
E N D
4.1 DFT的运算量分析 4.1.1 直接计算DFT的运算量
从上面的分析看到,在DFT计算中,不论是乘法和加法,运算量均与N2成正比。因此,N较大时,运算量十分可观。例,计算N=10点的DFT,需要100次复数相乘,而N=1024点时,需要1048576(一百多万)次复数乘法,如果要求实时处理,则要求有很高的计算速度才能完成上述计算量。从上面的分析看到,在DFT计算中,不论是乘法和加法,运算量均与N2成正比。因此,N较大时,运算量十分可观。例,计算N=10点的DFT,需要100次复数相乘,而N=1024点时,需要1048576(一百多万)次复数乘法,如果要求实时处理,则要求有很高的计算速度才能完成上述计算量。 反变换IDFT与DFT的运算结构相同,只是多乘一个常数1/N,所以二者的计算量相同。
4.2 时间抽取的基-2FFT算法 4.2.1.算法的的基本原理 按n的奇偶把时间序列x(n)分解为两个长为N/2点的序列,即 因此
由于 所以 即其中 分别为 的N/2点DFT 这是 前N/2点DFT
对于 后N/2的DFT : 由于 (周期性) 因此 可用蝶式运算图来表示上述前N/2和后N/2两 式 ,如下图所示
例如:N=8时的DFT,可以分解为两个N/2=4点DFT 如图4.2.2所示: 图4.2.2 8点DFT分解成两个4点的DFT
分解后的运算量: 运算量减少了近一半
由于 , 因而N/2仍是偶数,可以进一步把每个N/2点的序列再按其奇偶部分分解为两个N/4的子序列 从而 可表示为
因而有 其中 对 也可进行同样的分解: k=0,1,...,N/4-1
其中 这样又一次的分解得到4个N/4点DFT
如下图所示: 那么依次类推,经过M-1次分解后,将N点DFT分解成N/2个两点DFT
4.2.2 运算量 当时,总共有M级分解,每级有N/2个蝶式运算。每个蝶式运算需一次复乘两次复加,这样M级总共需要的运算量为 复乘次数 复加次数
4.2.3.FFT算法的特点 1)原位计算(同址运算)
每一级的蝶形运算的输入和输出在运算前后可以存储在同一地址的存储单元中,这种存储策略称为同址计算。显然,同址计算可以节省存储单元,从而降低算法对计算机存储容量的要求,降低了硬件实现的成本。每一级的蝶形运算的输入和输出在运算前后可以存储在同一地址的存储单元中,这种存储策略称为同址计算。显然,同址计算可以节省存储单元,从而降低算法对计算机存储容量的要求,降低了硬件实现的成本。
2)输入序列的序号及整序规律 DIT―FFT算法的输入序列的排序看起来似乎很乱,但仔细分析就会发现这种倒序是很有规律的。由于N=2M,所以顺序数可用M位二进制数 (nM-1nM-2…n1n0)表示。
在实际计算中,输入的混序是通过输入正序序列按码位倒置实现的。存储单元、正序和反序之间的关系如下表在实际计算中,输入的混序是通过输入正序序列按码位倒置实现的。存储单元、正序和反序之间的关系如下表
3)各类蝶形运算两节点的“距离”及 的变化规律 对N = 2M点FFT,输入倒位序,输出自然序,第m级运算每个蝶形的两节点距离为 2m–1第m级运算:
(1)直接计算法 蝶形运算两节点的第一个节点为i值,表示成M位二进制数,左移M –m位,把右边空出的位置补零,结果为r的二进制数。
4.2.4、DIT算法的其他形式流图 • 输入自然序输出倒位序 • 输入输出均自然序 • 相同几何形状 • 输入自然序输出倒位序
4.2.5 DIT基-2FFT的软件编程思想 • 由DIT基-2FFT算法原理及特点,不难看出,FFT计算程序主要包括变址和M级递推计算两大部分。
1.变址(倒序)运算 • 在实际运算中,一般总是按自然顺序将输入序列存入存储单元,故为实现DIT基-2FFT首先必须将输入序列x(n)按二进制倒序数重排。倒序重排一般采用反向进位加法来实现,图4.2.12是反向进位加法实现变址运算的计算流程。
2.M级递推计算 • 根据DIT基-2 FFT的特点,可以得出图4.2.13的M轮递推计算的流程图。整个M轮递推过程由三个嵌套循环构成。外层循环控制M轮的顺序运算,内层的两个循环控制同一轮的各个蝶形运算,其中最内一层循环控制同类(指有相同的旋转因子)蝶形的运算,而中间一层循环则针对不同类的蝶形运算。I和IP代表的是一个蝶形运算的两个节点。
4.3 频域抽取基-2 FFT算法 4.3.1 算法的基本原理 设序列x(n)长度为N=2M,首先将x(n)前后对半分开,得到两个子序列,其DFT可表示为如下形式:
由于 N点DFT按k的奇偶分组可分为两个N/2的DFT k取偶数时(k=2r,r=0,1,...,N/2-1)
将x1(n)和x2(n)分别代入和式,可得 则X(2r)和X(2r+1)分别是x1(n)和x2(n)的 N / 2点DFT,记为X1(k)和X2(k)
由于N/2仍然为2的整数幂,继续将N/2点DFT分成偶数组和奇数组,这样每个N/2点DFT又可分解成两个N/4点DFT,其输入序列分别是按上下对半分图开后通过蝶式运算构成的4个子序列 ,如下图
按照以上方法继续分解下去,经过M-1次分解, 最后分解为N/2个两点DFT,这N/2个2点DFT的输出就是N点DFT的结果X(k) ,如下图
上图给出了N=8时完整的DIF-FFT的运算流图。由于这种方法是 按X(K)在频域进行奇偶分解,因此称之为频域抽取FFT运算. 比较DIF-FFT与DIT-FFT: 相同点:运算次数与存储量相同 不同点:1.DIF-FFT输入序列为自 然序列而输出为码位倒置序列 2.蝶式运算过程不同: DIT-FFT是序列先乘旋转因子后相加减 DIF-FFT是序列先相加减后乘旋转因子
蝶形运算两节点的第一个节点为值k,表示成M位二进制数,左移m-1位,把右边空出的位置补零,结果为r的二进制数。蝶形运算两节点的第一个节点为值k,表示成M位二进制数,左移m-1位,把右边空出的位置补零,结果为r的二进制数。
4.4 快速傅里叶反变换 以上所讨论的FFT的运算方法同样可用于IDFT的运算,简称为IFFT。即快速付里叶反变换。从IDFT的定义出发,可以导出下列二种利用FFT来计算FFT的方法。