680 likes | 1.2k Views
§ 4 DFT 的快速算法 ——FFT. 时域抽取基 -2FFT 算法( DIT-FFT ) 频域抽取基 -2FFT 算法( DIF-FFT ) 逆 DFT 的快速算法( IFFT ) N 为合数的 FFT 算法 (混合基). ① 将长度 N 变短 。例如若将长度变为 N/2 ,则运算量变成: ② 利用 的性质 周期性: 共轭对称性: 可约性:. DFT 的快速算法( FFT )综述. DFT 的运算量. 减少 DFT 运算量的方法. FFT 的算法分类.
E N D
§4 DFT的快速算法——FFT 时域抽取基-2FFT算法(DIT-FFT) 频域抽取基-2FFT算法(DIF-FFT) 逆 DFT 的快速算法(IFFT) N为合数的 FFT 算法 (混合基)
①将长度N变短。例如若将长度变为N/2,则运算量变成:①将长度N变短。例如若将长度变为N/2,则运算量变成: ②利用 的性质 周期性: 共轭对称性: 可约性: DFT的快速算法(FFT)综述 • DFT的运算量 • 减少DFT运算量的方法 第三章第2讲
FFT的算法分类 FFT算法首先由Cooly-Tuky提出了基-2FFT算法,它对DFT的发展起到了极大推进作用。随后又出现了混合基算法。 本节仅对基-2FFT算法作介绍,内容包括:FFT的基本思想、时域与频域抽取的基-2FFT算法及其程序实现。 • 基-2 FFT算法(DIT-FFT) 指要求长度N满足 (M为整数),若不满足可将序列补零延长,使其满足长度要求。 • 时域抽取与频域抽取 DFT的快速算法(FFT)综述 第三章第2讲
时域抽取算法是按 的奇偶把时间序列 分解为两个长为N/2点的序列,即: 时域抽取基-2FFT算法(DIT-FFT) • 算法的推导 第三章第2讲
上式中 分别为 的N/2点DFT,即: 这是 前N/2点DFT 时域抽取基-2FFT算法(DIT-FFT) 第三章第2讲
对于 后N/2点的DFT 时域抽取基-2FFT算法(DIT-FFT) 显然,可采用蝶式运算图来表示上述前N/2和后N/2两式 ,如下图所示: 第三章第2讲
时域抽取基-2FFT算法(DIT-FFT) 例如N=8时的DFT,可以分解为两个N/2=4点DFT, 如下图: 第三章第2讲
同理: , ∴N/2仍可能是偶数,可以进一步把每个N/2点的序列再按其奇偶部分分解为两个N/4的子序列。 时域抽取基-2FFT算法(DIT-FFT) 第三章第2讲
其中 对 也可进行同样的分解: 时域抽取基-2FFT算法(DIT-FFT) 第三章第2讲
时域抽取基-2FFT算法(DIT-FFT) 这样又一次的分解得到4个N/4点DFT,见下图。 依次类推:经过M-1次分解后,可将N点DFT分解成N/2个两点DFT。 第三章第2讲
典 型 例 题 例: 试画出N=8时的完整的基-2 DIT-FFT运算流图。 第三章第2讲
由有关算法的讨论知:当 时,总共应有M级分解,每级有N/2个“蝶式运算”。每个“蝶式运算”需一次复数乘、两次复数加运算,这样M级总共需要的运算量为: 若N足够大,通过直接计算DFT与采用FFT计算其运算量之比为: 时域抽取基-2FFT算法(DIT-FFT) • 运算量 如:若N=1024,直接计算DFT与采用FFT运算量之比约为205,“快速”得以充分体现。 第三章第2讲
时域抽取基-2FFT算法(DIT-FFT) • FFT算法的特点 观察完整的FFT流图能发现有两个特点:倒码和原位运算 ① 倒码 倒码即码位倒置:是指将原二进制数的码位倒过来 按从低位到高位排列。 如:N=8时,序号 “4”用三位二进制表示正常码为“100”,而其倒码为 “001”,变成了序号 “1” 。 顺序与倒码顺序对照表 第三章第2讲
由完整的FFT流图可见:从左到右计算下一级蝶式运算时,仅需要用到本级的数据而不需要前一级的数据。例如在实施第二级蝶式运算时,仅需要第一级蝶式运算的结果,而不需要用到原来的输入数据 。据此就可在数据输入到存储器以后,每一级运算的结果存储在同一组存储单元中。直到最后输出,中间无需其他存储器。 时域抽取基-2FFT算法(DIT-FFT) ② 原位运算 • DIT-FFT算法其他形式的流图 利用同一存储单元存放蝶式运算输入和输出数据的方法称为原位运算。原位运算可节省存储单元,降低FFT硬件实现的设备成本,从而使得FFT算法简单、快速、高效。 由信号流图理论知道:只要保证各节点所连接的支路及其传输系数不变,无论各节点相对位置如何排列,所得到的流图等效,DFT的结果相同。 第三章第2讲
例如将N=8时基-2DIT-FFT信号流图中与 、 水平相连的所有节点分别同与 、 水平相连的所有节点对调,保持其余节点位置不变,得到新形式的信号流图。 时域抽取基-2FFT算法(DIT-FFT) N=8 时输入是正序、输出是倒码的DIT-FFT运算流图 第三章第2讲
频域抽取算法是把时间序列 前后对半分解为两个长为N/2点的序列,则: 频域抽取基-2FFT算法(DIF-FFT) • 算法的推导 第三章第2讲
当 k 取奇数时( k = 2 r+1,r = 0 , 1 , ... , N / 2- 1) ∴ 的N点DFT 按 k 的奇偶分组可分为两个N/2的DFT 当 k 取偶数时( k = 2 r,r = 0 , 1 , ... , N / 2- 1) 频域抽取基-2FFT算法(DIF-FFT) 第三章第2讲
这一结论表明:求 的N点DFT 再次分解成求两个N/2点DFT 频域抽取基-2FFT算法(DIF-FFT) • DIF-FFT的蝶式运算流图 第三章第2讲
频域抽取基-2FFT算法(DIF-FFT) • DIF-FFT的一次分解运算流图 先蝶式运算,后 DFT。例如:N=8时 第三章第2讲
通常 N/2 仍然为 2 的整数幂,继续将 N/2 点DFT分成偶数组和奇数组,这样每个 N/2 点DFT又可分解成两个 N/4 点DFT,其输入序列分别是 和 按上下对半分开后通过蝶式运算构成的 4 个子序列,如下图所示: 频域抽取基-2FFT算法(DIF-FFT) • DIF-FFT的二次分解运算流图 第三章第2讲
频域抽取基-2FFT算法(DIF-FFT) 按照以上方法继续分解下去,经过 M - 1次分解,最后分解为 N/2个两点DFT,这 N/2 个2点DFT的输出就是 N 点DFT的结果X(k),如下图所示: 第三章第2讲
以上给出了 N=8 时完整的 DIF - FFT的运算流图。由于这种方法是 按 在频域进行奇偶分解,因此称之为频域抽取基-2 FFT运算。 比较DIF-FFT与DIT-FFT 相同点:运算次数与存储量相同 不同点:①DIF-FFT输入序列为自然序列而输出为码位倒置序列 ②蝶式运算过程不同 DIT-FFT是序列先乘旋转因子后相加减 DIF-FFT是序列先相加减后乘旋转因子 频域抽取基-2FFT算法(DIF-FFT) • 有关说明 第三章第2讲
IFFT基本思想 比较两式可知:只要将FFT中的旋转因子 改为 , 再乘以1/N即可得到 IDFT 的快速算法 IFFT。 ,∴还可将常数 1/N 分配到每级运算中,也就是每级蝶形运算均乘以 ½ 。这样就实现了 FFT 与IFFT 运算的统一。 逆DFT的快速算法(IFFT) • IFFT算法的推导 第三章第2讲
逆DFT的快速算法(IFFT) • FFT(IFFT)算法的实现 1、纯软件实现 2、硬件实现 3、DSP(软硬件结合) 第三章第2讲
基-2FFT的各种算法要求 。 若该条件不满足,虽可通过在序列尾部补0的方法使 增加到最邻近的一个 值,从而采用DIT-FFT或DIF-FFT算法。该方法并不影响DFT的结果,只是增加了采样频率点的位置和点数,但该方法至少存在以下两个缺陷: ① 补0太多,长度增加,运算量加大,效率降低 ② 若欲求得指定频率点上的 DFT ,无法做到 故必须探索新方法 N为合数的FFT算法(混合基) 第三章第2讲
若序列 的长度 是合数 ,即: 将 每隔 点抽取一点,则可形成 个长度为 点的序列如下: N为合数的FFT算法(混合基) • 算法的推导 第三章第2讲
按以上的方法将 分为3组,每组长度为6 例如: N为合数的FFT算法(混合基) 第三章第2讲
将 代入序列 的N点DFT有: N为合数的FFT算法(混合基) 第三章第2讲
如此进行下去直到最后变为 点DFT 试作出 时混合基一次分解为3个6点DFT的流程图 N为合数的FFT算法(混合基) • 例: 显然此算法中采用了不同长度来进行抽取,故有时又将该算法称为混合基FFT算法。 第三章第2讲
N为合数的FFT算法(混合基) 第三章第2讲
N为合数的FFT算法(混合基) 经一次分解后的3个6点DFT,每个又可分解为3个2点的DFT ,如图: 第三章第2讲
第一次抽取后的运算量: 第二次抽取后的运算量: 总运算量: N为合数的FFT算法(混合基) • 算法的运算量 总乘法运算次数 第三章第2讲
§5 DFT 与 FFT 的应用 利用 FFT 进行频谱分析 用FFT计算线性卷积 线性调频 Z 变换(Chirp-Z变换)及快速算法
设 为长为 N 的有限长序列,则: 利用 FFT 进行频谱分析的实现过程框图为: 利用 FFT 进行频谱分析 • 利用FFT进行频谱分析的基本方法 第三章第2讲
利用 FFT 进行频谱分析 • 几个常用基本概念 1、数字频率分辨率: 2、模拟频率分辨率: 3、用于FFT的采样点数: 4、频率刻度值: 5、模拟信号长度: 6、分辨率: 第三章第2讲
例:用FFT来分析信号的频谱,若已知信号的最高频率为 ,要求频率分辨率为 ,试确定: 1、采样间隔 T ; 2、采用基-2FFT的最小样点数 N ,以及与此相对应的最小记录长度; 3、按您确定的参数所获得的实际分辨率。 1、据采样定理,采样间隔 2、基-2FFT的最小样点数N 当采用基-2FFT算法时,要求 典 型 例 题 解: 第三章第2讲
与此相对应的最小记录长度为: 3、按确定的参数所获得的实际分辨率 典 型 例 题 第三章第2讲
若序列 的长度为无限长,为了利用 FFT 进行频谱分析,首先必须将其截断为有限长序列 利用 FFT 进行频谱分析 • 用FFT进行频谱分析存在的两个问题 1、频谱泄漏 在实际应用中,通常将所观测与处理的信号限制在一定的时间间隔内,即在时域对信号进行 “ 截断操作 ” ,或 称作加时间窗(用时间窗函数乘以信号)。由卷积定理可知:时域相乘、频域卷积,这就造成 “ 拖尾现象 ” ,称之为频谱泄漏。 卷积定理 显然,两种频谱是有差别的,该现象就是频谱泄漏 解决办法:① 采用其它形式的窗函数(第六章详论) ② 对于周期序列,取其过零点截取 第三章第2讲
利用 FFT 进行频谱分析时,只知道离散频率点 的整数倍处的频谱。在两个谱线之间的情况就不知道,这如同通过一个栅栏观察景象一样,故称作栅栏效应。 解决办法:在序列后面补零点加大FFT点数 ,可使谱线间隔变小来提高分辨力,以减少栅栏效应。 注意:若需要加窗,则应先加窗再补零。 利用 FFT 进行频谱分析 2、栅栏效应 第三章第2讲
设 是 和 的线性卷积: 总运算量为: 用FFT计算线性卷积 • 线性卷积 可见,直接运算时运算量很大,必须寻找新思路。 思路:利用 FFT ,通过循环卷积来计算线性卷积 第三章第2讲
设 是x(n)和h(n)长为L的循环卷积: 其中 L>Max[N,M], 用FFT计算线性卷积 • 利用循环卷积计算线性卷积的条件 第三章第2讲
用FFT计算线性卷积 第三章第2讲
利用循环卷积计算线性卷积如下图 上式表明: 是将 以L为周期进行延拓后再取主值区间所得的序列。∴利用循环卷积计算线性卷积的条件为: 用FFT计算线性卷积 第三章第2讲
①、将已知序列 (长为N)和 (长为M)补零延长,使它们的长度 。若采用基 -2 FFT算法,还应使 大于或等于 的 2 的最小整数次幂。 ②、做 和 的长为 点的 FFT 得到 和 ,并求它们的积 。 ③、求 的IFFT并取前 点获得线性卷积的结果为 用FFT计算线性卷积 • 利用FFT进行线性卷积的步骤 第三章第2讲
实际中常常出现两个待卷积序列长度相差很大的情形,例如输入序列 的长度 远远大于滤波器的脉冲响应 的长度 时,若仍然取 FFT 的长度 ,则必须对 补很多0,同时也做不到 “ 实时处理 ” 。此时常采用以下两种分段处理方法。 用FFT计算线性卷积 • 长序列FFT卷积的计算方法 第三章第2讲
设 长度为 , 为无限长。取 “ 段长 ”尽可能与 接近。则: 是两个长度接近且分别为 和 的序列的线性卷积,可很有效地求其L点的FFT. 用FFT计算线性卷积 1、重叠相加法 第三章第2讲
分别求得各段卷积后再将结果相加,即可求得 和 的完整的线性卷积。 该方法中由于运用了“分段卷积的重叠”和“各段卷积结果的相加”,故称为重叠相加法。 ① 将 补零延长到 ,并计算其 点FFT,得 到 ② 分别将各 补零延长到 ,并计算其 点FFT,得到 ③ 计算 ,并求其L点的反变换,即: ④ 将 的重叠部分相加,最后得到结果 用FFT计算线性卷积 用重叠相加法计算两个长度悬殊序列线性卷积的步骤如下: 第三章第2讲
用FFT计算线性卷积 • 重叠相加法卷积示意图 第三章第2讲
设序列 的长度为 ,则对长序列 的分段方法如下:先在序列 前补 个0,然后对补0后的序列进行分段,每段的长度为 ,即: 对每一段 ,通过循环卷积 ,获得俩者的线性卷积 。而输入的每段序列重叠N-1点,故每段的循环卷积的输出应去掉前面N-1点只保留后面M点,即: 用FFT计算线性卷积 2、重叠保留法 第三章第2讲
重叠保留法 分段方法 示意图 用FFT计算线性卷积 第三章第2讲