详解第四章 快速傅里叶变换.ppt

  1. 1、本文档共65页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章快速傅里叶变换

本章内容 介绍傅里叶变换的一些快速算法 快速算法的思想 根据原始变换定义的运算规律,及其中某些算子的特殊性,找出减少乘法和加法运算次数的有效途径,实现原始变换的各种高效算法。 了解直接计算N点DFT的运算量 了解减少运算量的基本途径 理解按时间抽取的基-2FFT算法的算法原理、运算流图、所需计算量和算法特点 了解按时间抽取的基-2FFT算法的编程思想 理解按频率抽取的基-2FFT算法的算法原理、运算流图、所需计算量和算法特点 离散傅里叶变换不仅具有明确的物理意义,更便于用计算机处理。但是,直至上个世纪六十年代,由于数字计算机的处理速度较低以及离散傅里叶变换的计算量较大,离散傅里叶变换长期得不到真正的应用,快速离散傅里叶变换算法的提出,才得以显现出离散傅里叶变换的强大功能,并被广泛地应用于各种数字信号处理系统中。近年来,计算机的处理速率有了惊人的发展,同时在数字信号处理领域出现了许多新的方法,但在许多应用中始终无法替代离散傅里叶变换及其快速算法。 4.2 基2FFT算法 有限长序列通过离散傅里叶变换 (DFT)将其频域离散化成有限长序列。但其计算量太大(与N的平方成正比),很难实时地处理问题,因此引出了快速傅里叶变换(FFT)。 FFT并不是一种新的变换形式,它只是DFT的一种快速算法,并且根据对序列分解与选取方法的不同而产生了FFT的多种算法。 FFT在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。 FFT算法对于N点DFT,仅需(N/2)log2N 次复数乘法运算和Nlog2N 次复数加法。 利用 的特性 快速傅里叶变换( FFT ) 就是在此特性基础上发 展起来的: (1)利用DFT系数的对称性和周期性,合并DFT运算中的某些项; (2)将长序列分解为短序列,从而减少其运算量。 ?? 因合并与分解方法的不同产生了多种DFT的快速算法。 1.按抽取方法分: 时间抽取法(DIT Decimation-In-Time); 频率抽取法(DIF Decimation-In-Frequency) 2.按“基数”分: 基-2FFT算法;基-4FFT算法;混合基FFT算法;分裂基FFT算法 3.其它方法: 线性调频Z变换(Chrip-z法) 1、时域抽取算法原理 设输入序列长度为N=2M(M为正整数),将该序列按时间顺序的奇偶分解为越来越短的子序列,称为基2按时间抽取的FFT算法。 其中基数2----N=2M,M为整数。若不满足这个条件,可以人为地加上若干零值(加零补长)使其达到 N=2M。 设序列点数 N = 2M,M为整数。若不满足,则补零 例 8点FFT的算法 首先可以分解为两个N/2=4点的DFT。具体方法如下: 1)输入倒位序,输出自然序 对N = 2L点FFT,共需L级蝶形运算,每级有N/2个蝶形运算组成,蝶形运算两节点的距离:2L-1 (L表示级数) 每个蝶形运算有一次复乘和再次复加。如 由上述分析可知,N=8需三级蝶形运算 N=23 =8, 由此可知,N=2L 共需L级蝶形运算,而且每级都由N/2个 蝶形运算 组成,每个蝶形运算有一次复乘,两次复加。 因此,N点的FFT的运算量为 复乘: mF=(N/2)L=(N/2)log2 N 复加: aF =N L=N log2 N 1、算法原理 设序列点数N=2L,L为整数。将X(k)按k的奇偶分组前,先将输入x(n)按n的顺序分成前后两半: 1)基本蝶形不同 时域:先复乘后加减 频域:先减后复乘 2)运算量相同 3)都可原位运算 4)两者基本蝶形互为转置 比较两式可知,只要DFT的每个系数 换成 ,最后再乘以常数1/N就可以得到IDFT的快速算法--IFFT。 4.3 线性卷积的FFT算法 利用FFT计算线性卷积 MATLAB程序 N=1024 x=[2 3 1 4 5 ones(1,N)]; h=[2 1 7 4 5 7 2 3 ones(1,N)]; Lenx=length(x); %求序列x的长度 Lenh=length(h); %求序列h的长度 N=Lenx+Lenh-1; t=cputime(%或tic) Xk=fft(x,N); %计算x序列的DFT Hk=fft(h,N); %计算h序列的DFT Yk=Xk.*Hk; y=ifft(Yk) %求IDFT t1=cputime-t(或toc) st

文档评论(0)

rovend + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档