- 1、本文档共84页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP应用系统设计举例.ppt
2003.2.16 DSP原理及应用 ◆傅里叶变换是将信号从时域变换到频域的一种变换形式。 ◆离散傅里叶变换(DFT)是连续傅里叶变换在离散系统中的表现形式。 ◆快速傅里叶变换(FFT)是快速计算DFT的一种高效方法,可以明显地降低运算量,大大地提高DFT的运算速度,从而使DFT得到了广泛的应用。 ◆ DSP芯片的出现使FFT的实现变得更加方便。由于多数的DSP芯片都能在单指令周期内完成乘法—累加运算,而且还提供了专门的FFT指令使得FFT算法在DSP芯片上实现的速度更快。 位倒序寻址 原序 原地址 位倒序后地址 位倒序 正向进位与反向进位 1 0 0 1 0 0 + 1 0 0 + 1 0 0 ———— ———— 1 0 0 0 0 1 0 位倒序寻址(教材P61) AR0 = N/2=100 AR2 = 000 按AR2寻址后,将AR0加给AR2,反向进位 实数FFT的DSP算法 1)2N点实数 -N点复数 2)N点复数FFT运算; 3)FFT结果(2N点复数)-N点实数(结果) FFT的DSP C程序设计 #define PI 3.1415926536 void dft(float Xin[],float Xout[]) { int n,k,j; float angle; float Xr[N],Xi[N]; float Wn[2]; for(k=0;kN;k++) { Xr[k]=0; Xi[k]=0; for(j=0,n=0;nN;n++) { angle=(2.0*PI*k*n)/N; W[0]=cos(angle); W[1]=sin(angle); 常用DSPLIB库函数 TMS320C54X系列函数库(DSPLIB)是对C语言编程可调用优化的DSP函数库,它含有50个通用目的的信号处理程序,全部由汇编语言编写,并可由C语言调用,方便C语言与汇编语言混合编程。 这些程序用在计算强度大、执行速度重要的实时运算中。通过使用这些程序,可以取得较用C语言编写的相关程序快的多的运行速度,另外通过使用现成的程序可以使开发速度大大加快。DSPLIB可进行的运算有:FFT运算、滤波与卷积运算、自适应滤波运算、相关运算、数学函数运算、三角函数运算、矩阵运算等。 DSPLIB库函数实现 FFT算法 实数FFT算法的函数表达式: void rfft#(DATA *x, short scale) 该函数定义于(C:\ti\c5400\dsplib\54x_src)rfft#.asm,其中#=16,32,64,128,256,512,1024 常用形式: void rfft(DATA*x, #, short scale) #include math.h #include tms320.h /*调用库*/ #include dsplib.h #define NX 256 /*FFT运算的长度*/ short scale=1; /*归一化*/ short noscale=0; /*非归一化*/ short x[512]; /*数据大小*/ void main(void) { cbrev(x,x,NX); /*输入数据倒序*/ cfft(x,NX,scale);/*256点复数FFT*/ } 实例:教材P257(N=7,印刷错误较多) 循环寻址指令: 循环缓冲区的优点: ① 缓冲区数据不需要移动; ② 可以使用SARAM存储器。 实现循环缓冲区N个单元循环寻址,可用BK寄存器按模间接寻址来实现,使指针始终指向缓冲区。 常用指令: … *ARx+% ;增量、按模修正ARx addr=ARx,ARx=circ(ARx+1) … *ARx-% ;减量、按模修正ARx addr=ARx,ARx=circ(ARx-1) … *ARx+0% ;增AR0、按模修正ARx addr=ARx,ARx=circ(ARx+AR0) … *ARx-0% ;减AR0、按模修正ARx addr=ARx,ARx=circ(ARx-AR0) … *+ARx(1K)% ;加(1K)、按模修正ARx
文档评论(0)