第7章应用程序设计-山东大学.ppt

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

④单击工具按钮 对工程进行构建,并进入调试环境; ⑤打开表达式显示窗口,添加变量x、r、y、s; ⑥在 “q15tofl(y, s, NY);”语句行号处双击鼠标左键, 设置断点; ⑦单击工具按钮 运行程序至断点处,可看到图7-14所示运行结果。 7.6.6 DSPLIB函数的调用 7.5 快速傅里叶变换FFT FFT算法原理 库利一图基算法 FFT算法的实现 * 7.5.1 FFT算法原理 快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的一种快速算法。通过FFT算法,DFT的计算量大大减少,运算时间缩短1~2个数量级。 DFT的变换公式为 * 其中 为旋转因子。 FFT之所以减少运算量, 主要利用旋转因子的3点特性: 对称性 周期性 可约性 利用这些特性可以使DFT运算中有些项进行合并,将长序列的DFT分解为短序列的DFT。 DFT从算法上分为按时间抽选(DIT)和按频率抽选(DIF)。 基2的DIT又被称为库利一图基算法。基2的DIF又称为桑德—图基算法。 * 7.5.2 库利一图基算法 信号流图 比特反转 蝶形运算 * 1. 信号流图 * 2.比特反转 图7-11的输入信号的顺序是按照比特反转排列的,输出序列是按照自然顺序的。比特反转就是将序列下标用二进制表示,然后将二进制数按照相反的方向排列,即得到这个序列的实际位置。 按照自然排序的时域信号数据是x(0)、x(1)、x(2)、x(3)、x(4)、x(5)、x(6)、x(7),其序号写成二进制数分别为000b、001b、010b、011b、100b、101b、110b、111b,将这些二进制数前后倒转,即得到进行FFT前数据所对应的实际二进制数地址:000b、100b、010b、110b、001b、101b、011b、111b,对应的十进制数是:0、4、2、6、1、5、3、7。序号为3的存储单元,按照自然排序应该存放x(3),但由于FFT计算规则的要求,现在应该存放x(6)。 * 3.蝶形运算 基2DIT FFT算法,共由M级构成,每级计算由N/2个蝶形运算构成。 基本运算单元为以下所谓蝶形运算: 蝶形运算中上下两个节点p、q的间距为: * 7.5.3 FFT算法的实现 为了叙述简单,本书给出采用C语言编写的FFT程序,相应的汇编程序请读者自行完成。 (1)主程序:fft_test.c #include math.h #include fcomplex.h /*包含浮点复数结构体定义头文件fcomplex.h*/ extern void bit_rev(complex *,unsigned int);/*位反转函数声明*/ extern void fft(complex *,unsigned int,complex *,unsigned int); /* fft函数声明 */ 例7-13,基2DIT FFT算法的C语言实现。 * extern void generator(int *,unsigned int) #define N 128 /* FFT的数据个数 */ #define M 7 /* M=log2(N) */ #define PI 3.1415926 complex X[N]; /* 说明输入信号数组,为复数 */ complex W[M]; /* 说明旋转因子数组e^(-j2PI/N),为复数 */ complex temp; /* 说明临时复数变量 */ float xin[N]; float spectrum[N]; /* 说明功率谱信号数组,为实数 */ float re1[N],im1[N]; /* 说明临时变量数组,为实数 */ * void main() { unsigned int i,j,L,LE,LE1; /*----------------------------------------------------- */ /* 产生旋转因子表 */ for (L=1; L=M; L++) { LE=1L; /* 子FFT中的点数LE=2^L */ LE1=LE1; /* 子FFT中的蝶形运算数目*/ W[L-1].re = cos(PI/LE1); W[L

文档评论(0)

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

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

1亿VIP精品文档

相关文档