DSP大作业-终结版.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP原理与应用 一、FFT算法原理 1、 DFT(离散傅里叶变换 2、 IDFT(离散傅里叶变换逆变换 3、 FFT(快速傅里叶变换 设有限长序列x( n的长度为 ,L为整数。由于N为偶数,先将x( n按奇偶分成两组。于是 利用系数的可约性:得: 期中X1(k和X2(k分别是序列x1(m和x2(m的N/2的DFT,得到的只是X(k前一半项数的结果。由DFT的性质可知,X1(k和X2(k都是周期为N/2的周期函数,再利用因子得: 利用蝶形运算: 可得结果。 二、DSP实现的方法 1、DSP芯片采用TMS320C5402 TMS320C5402是TI公司为了实现低功耗、高性能而专门设计的定点DSP芯片,它具有如下特点:运算速度快,指令周期可以达到10ns以内;优化的CPU结构,内部有一个40位的算术逻辑单元,2个40位的累加器,2个40位的加法器,1个17乘17的乘法器和40位的桶形移位器。有4条内部总线和2个地址产生器。先进的DSP芯片可以高效快速的实现任何数字信号处理算法的运算,他不仅具有标准的串行口和分时复用的串行口,还有自动缓冲的串行口和与外部处理器链接的接口。 2、CCS编程工具 CCS集成了开发环境,使得DSP代码开发过程从编程、编译、代码调试 性能优化都集成到了一个环境中,简化了开发过程。CCS集成了以下几个软件工具:(1DSP代码产生工具(c编译器、汇编优化器、汇编器和连接器,CCS不仅支持高级语言c语言、汇编语言,还支持c语言和汇编语言的混合编程,大大降低了开发难度;(2软件模拟器,模拟整个硬件的开发过程,使得开发更加安全。(3实时基础软件,DSP/BIOS和主机目标主机之间实时数据交换的软件RTDX. 3、FFT算法的c++语言实现 (1 FFT的类代码: class FFT { private: ?void changeOrder(double* xr,double* xi,int n; public: ?FFT(void; ?voidFFT_1D(double*ctxr,double*ctxi,double*cfxr,double* cfxi,int len; ?void rFFT_1D(double* ctxr,double* cfxr,double* cfxi,int len; ?void IFFT_1D(double*cfxr,double* cfxi,double*ctxr,double*ctxi,int len; ?void rIFFT_1D(double* cfxr,double* cfxi,double* ctxr,int len; ?~FFT(void; }; (2 倒序实现 xr实部,xi虚部,n为2的幂 代码如下: void FFT::changeOrder(double *xr,double *xi,int n { ? double temp; ? int k; ? int lh=n/2; ? int j=lh; ? int n1=n-2; ? for(int i=1;i=n1;i++ ? { ?? if(i ?? { ??? temp=xr[i]; ?? ?xr[i]=xr[j]; ??? xr[j]=temp; ??? temp=xi[i]; ?? ?xi[i]=xi[j]; ??? xi[j]=temp; ?? } ?? k=lh; ?? while(j=k ?? { ?? ?j=j-k; ??? k=(int(k/2+0.5; ?? } ?? j=j+k; ? } } (3 FFT算法 ctxr和ctxi的长度为len, cfxr和cfxi的长度为2的幂 void FFT::FFT_1D(double*ctxr,double*ctxi,double *cfxr,double *cfxi,int len {? ? int m=ceil(log((doublelen/log(2.0; ? int l,b,j,p,k; ? double rkb,ikb; ? int n=1 ? double* rcos=new double[n/2]; ? double* isin=new double[n/2]; ?for(l=0;l ? { ?? rcos[l]=cos(l*pi*2/n; ? ?isin[l]=sin(l*pi*2/n; ? }??????????????????????????? ?memcpy(cfxr,ctxr,sizeof(double*len; ?memcpy(cfxi,ctxi,sizeof(double

文档评论(0)

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

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

1亿VIP精品文档

相关文档