基于DSP的C程序实验报告------快速傅立叶变换(FFT)算法.doc

基于DSP的C程序实验报告------快速傅立叶变换(FFT)算法.doc

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

目录 引言 实验原理 FFT基本结构 (1)信号流图 (2)软件程序流图 实验程序 调试过程与步骤 实验结果 结果分析 遇到的问题及解决办法 实验体会 实验题目:快速傅立叶变换(FFT)算法 引言 众所周知,FFT 是离散傅立叶变换(DFT)的一种快速算法。由于计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。每运算一个X(k)需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。所以整个DFT运算总共需要4N^2 次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。如此一来,计算时乘法次数和加法次数都是和N^2 成正比的,当N 很大时,运算量是可观的,因而需要改进对DFT 的算法提高运算速度。 我们观察DFT的系数特性,可发现其对称性和周期性,我们可以将DFT 运算中有些项合并。因此,FFT就孕育而生了。 实验原理 1.FFT 的原理和参数生成公式: 我们先设序列长度为N=2^L,L 为整数。将N=2^L 的序列x(n)(n=0,1,……,N-1),按N 的奇偶分成两组,也就是说我们将一个N 点的DFT 分解成两个N/2 点的DFT,他们又重新组合成一个如下式所表达的N 点DFT: 我们称这样的RFFT 优化算法是包装算法:首先2N 点实数的连续输入称为“进包”。其次N 点的FFT 被连续运行。最后作为结果产生的N 点的合成输出是“打开”成为最初的与DFT 相符合的2N 点输入。 三.FFT 的基本结构: 1.FFT信号流图如下: 整个过程共有log2N次,每次分组间隔为2^(L-1)----------------1=L=log2N (1)如上图第一次蝶形运算间隔为一,如第一个和第二个,第三个和第四个,以此类推; 第二次间隔为二,如第一个和第三个,第二个和第四个等 (2)基本运算单元以下面的蝶形运算为主: 计算公式如下: (3)在FFT运算中,旋转因子WmN=cos(2πm/N)-jsin(2πm/N),求正弦和余弦函数值的计算量是很大的。 (4)本程序采用的输入信号为:1024*sin(2*pi*3*t),采样频率为1024 2.程序流程图: 四.实验程序 #include?DSP281x_Device.h?????//?DSP281x?Headerfile?Include?File #include?DSP281x_Examples.h???//?DSP281x?Examples?Include?File #include?f2812a.h #includemath.h #define?PI?3.1415926 #define?SAMPLENUMBER?128 void?InitForFFT(); void?MakeWave(); /oid?FFT(float?dataR[SAMPLENUMBER],float?dataI[SAMPLENUMBER]); int?INPUT[SAMPLENUMBER],DATA[SAMPLENUMBER]; float?fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER]; float?sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER]; void?FFT(float?dataR[SAMPLENUMBER],float?dataI[SAMPLENUMBER]) { int?x0,x1,x2,x3,x4,x5,x6,xx; int?i,j,k,b,p,L; float?TR,TI,temp; /**********?following?code?invert?sequence?************/ for?(?i=0;iSAMPLENUMBER;i++?) { x0=x1=x2=x3=x4=x5=x6=0; x0=i0x01;?x1=(i/2)0x01;?x2=(i/4)0x01;?x3=(i/8)0x01;x4=(i/16)0x01;?x5=(i/32)0x01;?x6=(i/64)0x01; xx=x0*64+x1*32+x2*16+x3*8+x4*4+x5*2+x6; dataI[xx]=dataR[i]; } for?(?i=0;iSAMPLENUMBER;i++?) { dataR[i]=dataI[i];?dataI[i]=0;? } /**************?

文档评论(0)

整理王 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档