数字信号处理实验FFT快速傅里叶变换C语言.docxVIP

数字信号处理实验FFT快速傅里叶变换C语言.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数字信号处理实验 第八章FFT) 一、实验内容 针对典型序列,用C语言编程实现基2-FFT,并与MATLAB自带的FFT函数的计算结果进行比较。 二、实验工具 1.VC++6.0 2.matlab2018 三、实验涉及知识 图1 按时间抽选的基2—FFT算法 根据蝶形运算图,如图1,可以看出,一个点基2-FFT运算由n级蝶形运算构成,每一个蝶形结构完成下属基本迭代运算: 式中m表示第m列迭代,k,j为数据所在行数。上式的蝶形运算如图2所示。 图2 四、实验设计思路 首先,根据基2-FFT的算法特点,可以整理出程序设计的大致思路。基2-FFT主要运用的就是蝶形运算来降低进行DFT运算时的运算量。因为是基2,所以进行DFT计算的点数N必须的。程序设计中主要解决3个问题,变址运算,复数运算,节点距离运算,及旋转因子的计算。下面对这三个模块进行说明。 变址运算 由蝶形图我们可以看出,FFT的输出X(k是按正常顺序排列在存储单元中,即按X(0,X(1,…,X(7的顺序排列,但是这时输入x(n却不是按自然顺序存储的,而是按x(0,x(4,…,x(7的顺序存入存储单元,所以我们要对输入的按正常顺序排列的数据进行变址存储,最后才能得到输出的有序的X(K。通过观察,可以发现,如果说输出数据是按原位序排列的话,那么输入数据是按倒位序排列的。即如果输入序列的序列号用二进制数,则到位序就为。我们需将输入的数据变为输出的倒位序存储,这里用雷德算法来实现。下面给出雷德算法。 假如使用A[I]存的是顺序位序,而B[J]存的是倒位序。 例如 ? N = 8 的时候,倒位序顺序 ? ? ? ? ?二进制表示 ? ? ?倒位序顺序 0 0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 000 ? ? ? ??000 4 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 100 ? ? ? ? 001 2 2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 010 ? ? ? ? 010 ? ? ? ? ?? 6 3 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 110 ? ? ? ? 011 1 4 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 001 ? ? ? ? 100 5 5 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 101 ? ? ? ? 101 3 6 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 011 ? ? ? ? 110 7 7 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 111 ? ? ? ? 111 由上面的表可以看出,按自然顺序排列的二进制数,其下面一个数总是比其上面一个数大1,即下面一个数是上面一个数在最低位加1并向高位进位而得到的。而倒位序二进制数的下面一个数是上面一个数在最高位加1并由高位向低位进位而得到。I、J都是从0开始,若已知某个倒位序J,要求下一个倒位序数,则应先判断J的最高位是否为0,这可与k=N/2相比较,因为N/2总是等于100..的。如果kJ,则J的最高位为0,只要把该位变为1J与k=N/2相加即可),就得到下一个倒位序数;如果K=J,则J的最高位为1,可将最高位变为0J与k=N/2相减即可)。然后还需判断次高位,这可与k=N\4相比较,若次高位为0,则需将它变为1加N\4即可)其他位不变,既得到下一个倒位序数;若次高位是1,则需将它也变为0。然后再判断下一位 。 复数运算 因为每一个蝶形结构完成的迭代运算为 算式中涉及到了复数的运算,而计算机是不能自己实现复数运算的,所以需要我们自己设计进行复数运算的程序。 迭代运算式中,= cos2πr/N)- jsin2πr/N)我们设 = R(j + jI(j, = R(K + jI(K , 而我们最后希望得到的DFT结果是复数的模,根据它的模来绘制频谱,所以这里我们定义 X(k= 相关程序我们编译为: c.real=a.real*b.real-a.imag*b.imag。 c.imag=a.real*b.imag+a.imag*b.real。 根据迭代运算的式子,我们可以将其分解为:R(K+jI(K=R(K+jI(K+[ R(j + jI(j]*[ cos2πr/N)-jsin2πr/N)]。继续分解得到下列两式: R(K= R(K+ R(j cos2πr/N)+ I(j sin (2πr/N I(K=I(K-R(j sin2πr/N)+I(jcos (2πr/N 同理 R(j= R(K- R(j cos2πr/

文档评论(0)

139****4073 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档