1、第4章 快速傅立叶变换(FFT),4.1 概述 4.2 时间抽取基 2 算法 4.3 频率抽取基 2 算法 4.4 减少运算量的措施 4.5 分裂基算法 4.6 线性调频 Z 变换 4.7 其它算法,4.1 概述,解决耗时的乘法问题是将数字信号处理理论用于实际的关键问题。特别是30年前,计算机的速度相当慢。因此,很多学者对解决DFT的快速计算问题产生了极大的兴趣。,Cooley J W, Tukey J W. An algorithm for the machine computation of complex Fourier series.Mathematics of Computation
2、, 1965, pp297301,DSP的正式开端!,FFT 的思路:,四点 DFT,几个乘法?,4.2 时间抽取基 2 算法,FFT的核心思想是:,问题是如何分最有效?可以对时间变量分 (DIT),也可对频率变量分(DIF),令:,都是 N/2 点的 DFT,它们各自又可分成 N/4 点的DFT,如此继续分下去,直至两点DFT。两点DFT不需要乘法运算:,每一级有 N/2 个如下的“蝶形”单元:,即: 每一个蝶形单元仅需一个复数乘法,两个复数加法。两点构成一个蝶形单元,并且这两点不再参与别的蝶形单元的运算。同址运算。,所需运算量:,注意:因子的位置;输入序列的顺序码位倒置。,0 000 00
3、0 0 100 001 1 010 010 2110 011 3001 100 4101 101 5011 110 6 7 111 111 7,4.3 频率抽取基 2 算法,令:,将 分解: Decimation In Time, DIT 时间抽取 将 分解: Decimation In Freq. ,DIF 频率抽取,继续分解,直到两点DFT,注意 DIT 和 DIF 的对偶性质。,输入正序,输出倒序。注意 因子的位置,4.4 进一步减少运算量的措施,旋转因子(twiddle factor),FFT中乘法运算主要来自和复指数相乘:,(1 组),(2 组),(4 组),(N/2 组),复数乘法
4、数,(N/4 组),不需要乘法,无关紧要的旋转因子(trivial ),M 级,前两级都是 ,去除之:,后 M-2 级,含有,个,再去除之:,(复乘),两个复数相乘,需要四次实乘、两次实加。实现和 的相乘,需两次实乘,两次实加。N点FFT中,有多少个,虚部和实部相等,trivial ,将所有无关紧要的旋转因子去除,或单独考虑,有:,?,个,实乘,实加,各种算比较的基础,以上称为多蝶形单元运算; 单独处理实数据的输入; 采用新的 FFT 算法。,措施:,多蝶形单元运算所需计算量的比较,基2 算法: 1965年, DSP 发展的里程碑;基4 算法 : 对基2 算法的改进;分裂基算法: 1984年,
5、 接近最优的 FFT!,4.5 分裂基 (Split-radix) 算法,Winograd 算法:1976年提出,是具有鲜明特色的FFT! 用到较多的数论知识,可用于N不等于2的整次幂。,基4 DIF 的基本单元:,以 4 为基,分解时级数可减少1半,因此可减少乘法次数。,不需要乘法!,乘法数减少一半,?,所需计算量:,基2,基4,分裂基,要求:掌握导出方法,基2 DIF: 旋转因子都出现在奇序号项输出,在求出偶序号项时不需要乘法。每一级都是如此。,基2 和基4 算法的比较:,基 4,?,令,则,分析上述结果可知,在基4 算法中,N/4个偶序号输出也要乘W因子。而基2 算法的偶序号项都不要乘W
6、因子。,令,则,基 2 / 4 算法,各种算法所需计算量的比较,4.6 输入和输出点数不相同的FFT,DFT: 输入N点,输出N点, 输入、输出点数 相同。输出的N点均匀分布于单位圆上,频域 分辨率为,在实际应用中: 1. 当输入点数极少时,若希望频率分点较多, 则需要补零,结果是增加了计算量; 2. 对于窄带信号,我们只希望通带内分点密,带外可以较疏,或根本不用计算。,一、输入端Pruning ( DIF ),不需要的不计算!,二、输出端Pruning(窄带情况),不需要的不计算!,二、CZT,其中:,Z在其 ROC 内取值,现为Z指定一离散的路径:,Z变换:,CZT在Z平面上的变换 路径是
7、一条螺旋线,决定CZT的起点;,决定变换路径如何倾斜,决定变换的步长。,信号的点数 N 和变换路径的点数 M 可以不相等。,CZT变成了DFT,时,起点在单位圆外, 反之,在圆内;,时,内旋,反之外旋;,时, CZT变换路径 为单位园上一段弧,,CZT的特点,CZT可计算单位圆上任一段曲线上的Z 变换,可任意给定起止频率;作变换时输入的点数N和输出点数M可以不相等;可达到频域“细化”的目的。,CZT的计算:,由定义:,由于:,所以:,则:,式中:,CZT 的实际计算方法:,1. 是 点系列,由 所决定:,2. 是双边无穷长序列,由定义所决定:,3. 是 点序列,由需要所决定。,如何卷积?,?,点序列,与本章有关的MATLAB文件,与本章内容有关的MATLAB文件主要是fft, ifft和 czt.m。顾名思义,fft实现快速傅立叶变换,ifft实现快速傅立叶反变换,czt.m 用来实现线性调频Z变换。 fft的调用格式是: X=fft(x), 或 X=fft(x,N)。czt.m 调用格式是: Xczt(x, M, W, A) 。x是待变换的时域信号,其长度设为N,M是变换的长度,W确定变换的步长,A确定变换的起点。若M=N, A=1, 则CZT变成DFT。,