- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数字信号处理第4章讲解
第4章 快速傅里叶变换(FFT) ;4.1 引 言
DFT是数字信号分析与处理中的一种重要变换
直接计算N点DFT:与变换区间长度N的平方成正比
N较大时,计算量太大——难以进行实时处理
快速傅里叶变换FFT(Fast Fourier Transform)
高效计算DFT的算法
使DFT运算效率提高1~2个数量级;4.2 基2FFT算法
4.2.1 直接计算DFT的特点及减少运算量基本途径
一、直接计算DFT
有限长序列x(n)的N点DFT为
x(n)为复数序列的一般情况:
计算X(k)的1个值:
需要 次复数乘法和 次复数加法;
计算X(k)的所有N个值:
共需N2次复数乘法和N(N-1)次复数加法运算
(N1时, N(N-1)= N2 )。;;2:利用 的周期性和对称性来减少DFT的运算次数;则x(n)的N点DFT为;而;由于X1(k)和X2(k)均以N/2为周期,且 ;图4.2.2 8点DFT一次时域抽取分解运算流图;?? 要完成一个蝶形运算,需要 和
运算
经过一次分解后,计算1个N点DFT共需要计算:
两个N/2点DFT;
计算N点DFT时:
总共需要的复数乘法次数为 ;因为N=2M,N/2仍然是偶数,可对N/2点DFT再作进一步分解。
同上,将x1(r)按奇偶分解成两个N/4点的子序列x3(l)和x4(l):;同理,X3(k)和X4(k)以N/4为周期, ,可得:;其中:;图4.2.3 8点DFT二次时域抽取分解运算流图;图4.2.4 8点DIT-FFT运算流图;4.2.3 DIT-FFT算法与直接计算DFT运算量的比较
由DIT-FFT算法的分解过程及图4.2.4可见,N=2M 时,其运算流图应有M级蝶形,每一级都由N/2个蝶形运算构成。因此,每一级运算都需要N/2次复数乘和N次复数加(每个蝶形需要两次复数加法)。所以,M级运算总共需要的复数乘次数为;而直接计算DFT的复数乘为N2次,复数加为N(N-1)次。当N1时,N2(N/2) lbN,所以,DIT-FFT算法比直接计算DFT的运算次数大大减少。例如,N=210=1024时,
这样,就使运算效率提高200多倍。图4.2.5为FFT算法和直接计算DFT所需复数乘法次数CM与变换点数N的关系曲线。由此图更加直观地看出FFT算法的优越性,显然,N越大时,优越性就越明显。;图4.2.5 DIT-FFT算法与直接计算DFT所需复数乘法次数的比较曲线;4.2.4 DIT-FFT的运算规律及编程思想
1. 原位计算
DIT-FFT的运算规律:
(1) N=2M,共进行M级运算,每级由N/2个蝶形运算组成;
(2) 同一级中,每个蝶形的两个输入数据只对该蝶形有用,
每个蝶形的输入、输出数据在一条水平线上
——输入、输出可用同一存储单元
即:第一级:N个存储单元存储N个序列值x(n)
M级蝶形运算后,该N个存储单元中依次存放X(k)的N个值
原位计算:利用同一存储单元存储蝶形计算输入、输出数据
——可节省大量内存,从而使设备成本降低。; 2. 旋转因子的变化规律
旋转因子:N点DIT-FFT运算流图中,每个蝶形都要乘以因子 ,称其为旋转因子,p为旋转因子的指数。
各级旋转因子和循环方式都有所不同,需找出旋转因子
与运算级数的关系。
用L表示从左到右的运算级数(L=1,2,…,M)。;第L级共有2L-1个不同的旋转因子。N=23=8时的各级旋转因子:;; 3. 蝶形运算规律
设序列x(n)经时域抽选(倒序)后,按图4.2.4所示的次序(倒序)存入数组A中。如果蝶形运算的两个输入数据相距B个点,应用原位计算,则蝶形运算可表示成如下形式:
式中
下标L:第L级运算
AL(J):第L级运算后A(J)的值(第L级蝶形输出)
AL-1(J):第L级运算前A(J)的值(第L级蝶形输入); 4. 编程思想及程序框图
归纳运算规律:
第L级中,每个蝶形的两个输入数据相距B=2L-1个点;
每级有B个不同的旋转因子;
同一旋转因子对应着间隔为2L点的2M-L个蝶形。
总结上述运算规律,可采用下述运算方法:
(1) 从输入端(第1级)开始,逐级进行,共进行M级运算;
(2) 进行第L级运算
文档评论(0)