当前位置:文档之家› DSP课程设计报告

DSP课程设计报告

共享知识分享快乐盛年不重来,一日难再晨。

及时宜自勉,岁月不待人。

数据采集处理和控制系统设计一课程设计要求1.基本DSP硬件系统设计要求①基本DSP硬件系统以TMS320C54x系列为核心处理器,包括最小系统、存储器扩展、显示器、键盘、AD、DA等电路模块;②硬件设计画出主要芯片及电路模块之间的连接即可,重点考查电路模块方案设计与系统地址分配;③设计方案以电路示意图为主,辅以必要的文字说明。

2.基本软件设计要求①看懂所给例程,画出例程输出波形示意图;②修改例程程序,使之输出其它波形,如方波、三角波、锯齿波等均可;③设计方案以程序实现为主,辅以必要的文字说明。

3.课程设计报告要求①硬件系统设计:设计思路、设计系统功能、主要芯片选型及使用方法、设计方案说明、电路示意图②软件系统设计:示例程序功能解读及输出波形示意图、设计软件功能、设计思路、实现源码(带程序注释)③报告总结二系统分析利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号的叠加。

在DSP 中采集信号,并且对信号进行频谱分析,滤波等。

通过键盘或者串口命令选择算法的功能,将计算的信号频率或者滤波后信号的频率在LCD 上显示。

主要功能如下:(1)对外部输入的模拟信号采集到DSP 内存,会用CCS 软件显示采集的数据波形。

(2)对采集的数据进行如下算法分析:①频谱分析:使用fft 算法计算信号的频率。

②对信号进行IIR 滤波或FIR 滤波,并且计算滤波前后信号的频率。

③外部键盘或者从计算机来的串口命令选择算法功能,并且将结果在LCD 上显示。

绘制出DSP系统的功能框图、使用AD(Altium Designer)绘制出系统的原理图和PCB 版图。

在 DSP 中采集信号,用CCS 软件显示采集的数据波形,以及对采集的数据进行算法分析。

三硬件设计3.1 硬件总体结构CLKSTMS32054X11CONTROL1MX16BIT FLASH2016D[15..0]A[19..0]XDS510 JTAGRESETPower (73HD3XX)16WE OECE复位电路3.2 DSP 模块设计3.3 电源模块设计将5V电源电压转换为3.3V和1.6V电源3.4 时钟模块设计此处由外部晶振提供时钟信号3.5 存储器模块设计DSP上只有一个读写控制信号引脚,而FLASH有两个引脚,将读、写分开,故在OE上接一个非门电路,实现高时读,低时写。

FLASH上的地址线和数据线与DSP上的地址线、数据线相连3.6 JATG模块设计3.7 TMS320VC5416 最小系统 PCB 版图板上包括了支持TMS320VC5416独立运行的时钟电路、复位电路、Flash模块、JTAG仿真接口电路以及电源模块等。

为节省空间和材料,部分器件放在了反面。

四软件设计4.1正弦波信号发生器所给例程输出波形为正弦波,波形如下图所示:4.2三角波(方波)信号发生器******************************************************************** ****************三角波信号发生程序(括号内为方波)****************** ********************************************************************.mmregs.def startk1 .usect "k",1outdata1 .set 0800h(0800h)outdata2 .set 09ffh(0fffh)outdata3 .set 0affh(0fffh)outdata4 .set 0bffh(0fffh)outdata5 .set 0cffh(0fffh)outdata6 .set 0dffh(0fffh)outdata7 .set 0effh(0fffh)outdata8 .set 0fffh(0fffh)outdata9 .set 1000h(0fffh)outdata10 .set 0fffh(0fffh)outdata11 .set 0effh(0fffh)outdata12 .set 0dffh(0fffh)outdata13 .set 0cffh(0fffh)outdata14 .set 0bffh(0fffh)outdata15 .set 0affh(0fffh)outdata16 .set 09ffh(0fffh)outdata17 .set 08ffh(0800h)outdata18 .set 07ffh(0000h)outdata19 .set 06ffh(0000h)outdata20 .set 05ffh(0000h)outdata21 .set 04ffh(0000h)outdata22 .set 03ffh(0000h)outdata23 .set 02ffh(0000h)outdata24 .set 01ffh(0000h)outdata25 .set 00ffh(0000h)outdata26 .set 01ffh(0000h)outdata27 .set 02ffh(0000h)outdata28 .set 03ffh(0000h)outdata29 .set 04ffh(0000h)outdata30 .set 05ffh(0000h)outdata31 .set 06ffh(0000h)outdata32 .set 07ffh(0000h)//定义输出数据.textstart:stm 2000h,sp//置堆栈指针stm #k1,ar2//将操作数#k1装入ar2 st #outdata1,*ar2//将数据送到*ar2nopnopbegin:st #outdata1,*ar2portw *ar2,0bfffh//将*ar2内容从D/A转换器输出rpt #7fffh//等待一段时间nopst #outdata2,*ar2portw *ar2,0bfffhrpt #7fffhnopst #outdata3,*ar2portw *ar2,0bfffhrpt #7fffhst #outdata4,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata5,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata6,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata7,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata8,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata9,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata10,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata11,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata12,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata13,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata14,*ar2portw *ar2,0bfffh rpt #7fffhst #outdata15,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata16,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata17,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata18,*ar2 portw *ar2,0bfffh rpt #7fffhnopst #outdata19,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata20,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata21,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata22,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata23,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata24,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata25,*ar2portw *ar2,0bfffh rpt #7fffhst #outdata26,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata27,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata28,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata29,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata30,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata31,*ar2portw *ar2,0bfffh rpt #7fffhnopst #outdata32,*ar2portw *ar2,0bfffh rpt #7fffhnopb begin//循环输出32个数据.end//代码段结束4.3 本系统软件总体流程4.4 核心模块及实现代码FFT算法程序:void kfft(double pr[Length],double pi[Length],int n,int k,double fr[Length],double fi[Length],int l,int il){int it,m,is,i,j,nv,l0;double p,q,s,vr,vi,poddr,poddi;for (it=0; it<=n-1; it++){ m=it; is=0;for (i=0; i<=k-1; i++){ j=m/2; is=2*is+(m-2*j); m=j;}fr[it]=pr[is]; fi[it]=pi[is];}pr[0]=1.0; pi[0]=0.0;p=6.283185306/(1.0*n);pr[1]=cos(p); pi[1]=-sin(p);if (l!=0) pi[1]=-pi[1];for (i=2; i<=n-1; i++){ p=pr[i-1]*pr[1]; q=pi[i-1]*pi[1];s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]);pr[i]=p-q; pi[i]=s-p-q;}for (it=0; it<=n-2; it=it+2){ vr=fr[it]; vi=fi[it];fr[it]=vr+fr[it+1]; fi[it]=vi+fi[it+1];fr[it+1]=vr-fr[it+1]; fi[it+1]=vi-fi[it+1];}m=n/2; nv=2;for (l0=k-2; l0>=0; l0--){ m=m/2; nv=2*nv;for (it=0; it<=(m-1)*nv; it=it+nv)for (j=0; j<=(nv/2)-1; j++){ p=pr[m*j]*fr[it+j+nv/2];q=pi[m*j]*fi[it+j+nv/2];s=pr[m*j]+pi[m*j];s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]);poddr=p-q; poddi=s-p-q;fr[it+j+nv/2]=fr[it+j]-poddr;fi[it+j+nv/2]=fi[it+j]-poddi;fr[it+j]=fr[it+j]+poddr;fi[it+j]=fi[it+j]+poddi;}}if (l!=0)for (i=0; i<=n-1; i++){ fr[i]=fr[i]/(1.0*n);fi[i]=fi[i]/(1.0*n);}if (il!=0)for (i=0; i<=n-1; i++){ pr[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]);if (fabs(fr[i])<0.000001*fabs(fi[i])){ if ((fi[i]*fr[i])>0) pi[i]=90.0;else pi[i]=-90.0;}elsepi[i]=atan(fi[i]/fr[i])*360.0/6.283185306;}}卷积程序:void Convolveok( //卷积函数double *x, // 原始输入数据double *h, // 冲击响应double *y, // 卷积输出结果UINT16 Leng, // 序列长度UINT16 h_Len){UINT16 m,p,j;double r,rm;double xmean = 0.0;double xmid[100];for(m=0;m<h_Len;m++){xmid[m] = 0.0;}for (m=0; m<Leng; m++){xmean = x[m] + xmean;}xmean = 1.0*xmean/Length;for (m=0; m<Leng; m++){x[m] = x[m] - xmean;}for (m=0; m<Leng; m++){for (p=0; p<h_Len; p++){xmid[h_Len-p-1] = xmid[h_Len-p-2];}xmid[0] = x[m];r = 0.0;rm= 0.0;for (j=0; j<h_Len; j++){r = xmid[j] * h[j];rm = rm + r;}y[m] = rm;}}求最大值和次大值函数:void max(){ int k1,k2; //k1 最大值,k2 次最大值int r;for(r=0;r<16;r++){if(pr[k1]<pr[r]){k1=r;}}for(r=20;r<64;r++){if(pr[k2]<pr[r]){k2=r;}}f0=250000.0/256*k1;f1=250000.0/256*k2;fc=(f0+f1)/2;}归一化函数:void avg(){ int j;sum= 0.0;for(j=0;j<256;j++){sum+=(data_buff[j]/256.0); }for(j=0;j<256;j++){pr[j]=data_buff[j]-sum;pi[j]=0.0;}}FIR滤波器设计函数:void firdes(double npass)//求h(n) {int t;for (t=0; t<FLen; t++){h[t]=sin((t-(FLen-1)/2.0)*npass*3.1415926)/(3.1415926*(t-(FLen-1) /2.0));}if (t == ((FLen-1)/2)) h[t]=npass;}外部中断2服务函数:void interrupt ExtInt2(void){int i1,j;*(unsigned int*)IFR=0xFFFF; //清除所有中断标志data_buff[i1] = port8002 & 0x00ff;i1++;if(i1 == 256){avg();kfft(pr,pi,256,8,fr,fi,0,1);max();npass=fc/250000.0;firdes(npass);Convolveok(data_buff,h,y,256,51);for(j=0;j<256;j++){yr[j]=y[j];yi[j]=0.0;}kfft(yr,yi,256,8,Yr,Yi,0,1);flag=1;i1 = 0;}4.5 程序运行效果①采集的数据及其FFT计算结果②51阶滤波器H(n)波形③滤波前后信号频谱图:由滤波前后高低频分量的相对大小证明低通滤波器对高频分量的衰减作用比较强,但没有完全滤出去④采集数据波形与滤波后波形比较由图可见滤波后信号中的高频分量得到了较大的衰减,滤波后波形变得平滑。

相关主题