数字信号处理第4章上.ppt

  1. 1、本文档共107页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 快速傅立叶变换 一、 DFT算法存在的问题及改进   1965年,J.W.Cooley 和J.W.Tukey发表了第一种FFT算法,称Cooley - Tukey算法。 FFT的基本思想:利用WNnk的特性,逐步将N点序列分解为较短的序列,计算短序列的DFT(即减小N),然后再组合成原序列的DFT,使运算量显著减少。 设N=2L,基2-FFT。由定义           k=0,1,…,N-1 把它按n的奇偶分成两个子序列: 上式表明了一个N点的DFT被分解为两个N/2点的DFT。 X(k)后一半点计算: 由前面介绍的FFT运算流程可见,每一级都由N/2个蝶形运算构成。每一个蝶形运算需要1次复乘和2次复加,因此每一级运算需要N/2次复乘和N次复加,这样L=log2N级运算共需: 特殊的信号处理指令: 如DMOV :在存储器中移动数据实现延迟。 RPTK 255:重复执行下条指令256次;MACD:等于LT (送数到T寄存器), DMOV (实现延迟) ,MPY (与T寄存器相乘,乘积存储入P寄存器)及 APAC(P寄存器内容加到累加器)。 快速的指令周期:TMS320系列处理器的指令周期已经从第一代的200ns降低至现在的20ns 以下。快速的指令周期使得DSP芯片能够实时实现许多DSP应用。 FFT算法的软件实现: 基-2按时间抽取(DIT)(输入自然顺序,输出倒位序) FFT程序包括变址和L阶(N=2L)递推计算两部分。 1、变址 倒位序规律:按倒位序排列的二进制数,下面一个数是上面一个数在最高位加1并向低位进位而得到的。 方法: A(I):存放原自然顺序输入数据的内存单元; A(J):为存放倒位序数据的内存单元; 当I=J时,不需要变址; 当I≠J时,需要变址;当I<J时,进行变址在先,当I>J时,就不需要变址了。 K=N/2=1000… Rader变址算法流程: 输入N NV2 =N/2 NM1=N-1 I=0,J=0 I≥J T=A(J) A(J)=A(I) A(I)=T K= NV2 KJ J=J+K I=I+1 I ≥ NM1 J=J-K,K=K/2 N Y(=) Y END N (=) Y N 2、L级递推运算 蝶形结规律: (输入倒位序,输出自然顺序) (1)、每级有N/2个蝶形结,第1级的N/2个蝶形结都是同一种运算,其系数都为: 第2级的N/2个蝶形结有2种运算,系数为 , ;第L级的N/2个蝶形结共有2L-1= N/2种运算,有N/2个不同的系数: , ,… ;第M级的N/2个蝶形结共有2M-1种运算,有2M-1个不同的系数: , ,… ;(M=1,…L) (2)、由最后一级向前每推进一步,则系数取后级系数中偶数序号那一半。 (3)、蝶形结每两个节点的间距为LE1=2M-1 。 算法流程:整个L级递推过程由三个嵌套循环构成,最外层的一个循环控制L级(L=log2N )的顺序运算,其循环变量为M ,其步进值为1,M=1,2,… , L=log2N ; 内层的两个循环控制同一级(M相同)各蝶形结的运算,最内一层循环控制同一种(r相同) 蝶形结的运算,其循环变量为I ,其步进值为各蝶形结间距值LE=2M,I =J, J+2M ,…N-1;蝶形结每两个节点的间距为LE1=2M-1. 而中间一层循环控制不同种(r不同)蝶形结的运算,其循环变量为J ,其步进值为1,J=0, ,…LE1-1 =2M-1 -1 。 I和IP是一个蝶形结的两个节点。 U:存放 ,起始值为 W,J:存放复数单元,系数采用以下递推公式: L级递推运算算法流程:程序对应课本P189 M=1 LE=2M LE1=LE/2= 2M-1 U=1 W=exp(-j*pai/LE1) J=0 I=J IP=I+LE1 T=A(IP)*U A(IP) =A(I)-T A(I) =A(I)+T I=I+LE I>N-1 U=U*W J=J+1 J>LE1-1 M=M+1 M>L END N N N 2 3 2 1 3 1 Y Y Y #include “complex.h“ int fft(complex *a,int l) { const double pai=3.141592653589793; complex u,w,t; unsigned n=1,nv2,nm1,k,le,lei,ip; unsigned I,j,m; double tmp; n=l; //n=2l nv2=n1; nm1=n-1; i=0; j=0; 程序: for(i

文档评论(0)

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

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

1亿VIP精品文档

相关文档