- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 民用建筑通用规范GB55031-2022(完整清晰版).pdf
- SY_T 4113.1-2018 管道防腐层性能试验方法 第1部分:耐划伤测试.docx VIP
- 江苏省无锡市江阴市长泾片2024-2025学年七年级上学期期中考试语文试题(含答案).pdf VIP
- 燃气安全日常巡检与维护方法.pptx
- 市直机关单位整治群众身边不正之风问题集中整治工作阶段性工作总结.docx VIP
- 地下连续墙施工方案(附:工程临时用电施工方案).doc
- 汽轮发电机组转子找中心计算公式.xls VIP
- 惠州市高2024届高三第二次调研考试政治试卷(含答案).docx
- SY∕T 4113.8-2020 管道防腐层性能试验方法 第8部分:耐磨性能测试.pdf
- HRN日本报知机百仕达五斯消防主机操作说明书.pdf
文档评论(0)