DSP课程设计报告Word下载.docx
《DSP课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《DSP课程设计报告Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
3.3电源模块设计
将5V电源电压转换为3.3V和1.6V电源
3.4时钟模块设计
此处由外部晶振提供时钟信号
3.5存储器模块设计
DSP上只有一个读写控制信号引脚,而FLASH有两个引脚,将读、写分开,故在OE上接一个非门电路,实现高时读,低时写。
FLASH上的地址线和数据线与DSP上的地址线、数据线相连
3.6JATG模块设计
3.7TMS320VC5416最小系统PCB版图
板上包括了支持TMS320VC5416独立运行的时钟电路、复位电路、Flash模块、JTAG仿真接口电路以及电源模块等。
为节省空间和材料,部分器件放在了反面。
四软件设计
4.1正弦波信号发生器
所给例程输出波形为正弦波,波形如下图所示:
4.2三角波(方波)信号发生器
********************************************************************
****************三角波信号发生程序(括号内为方波)******************
********************************************************************
.mmregs
.defstart
k1.usect"
k"
1
outdata1.set0800h(0800h)
outdata2.set09ffh(0fffh)
outdata3.set0affh(0fffh)
outdata4.set0bffh(0fffh)
outdata5.set0cffh(0fffh)
outdata6.set0dffh(0fffh)
outdata7.set0effh(0fffh)
outdata8.set0fffh(0fffh)
outdata9.set1000h(0fffh)
outdata10.set0fffh(0fffh)
outdata11.set0effh(0fffh)
outdata12.set0dffh(0fffh)
outdata13.set0cffh(0fffh)
outdata14.set0bffh(0fffh)
outdata15.set0affh(0fffh)
outdata16.set09ffh(0fffh)
outdata17.set08ffh(0800h)
outdata18.set07ffh(0000h)
outdata19.set06ffh(0000h)
outdata20.set05ffh(0000h)
outdata21.set04ffh(0000h)
outdata22.set03ffh(0000h)
outdata23.set02ffh(0000h)
outdata24.set01ffh(0000h)
outdata25.set00ffh(0000h)
outdata26.set01ffh(0000h)
outdata27.set02ffh(0000h)
outdata28.set03ffh(0000h)
outdata29.set04ffh(0000h)
outdata30.set05ffh(0000h)
outdata31.set06ffh(0000h)
outdata32.set07ffh(0000h)
//定义输出数据
.text
start:
stm2000h,sp
//置堆栈指针
stm#k1,ar2
//将操作数#k1装入ar2
st#outdata1,*ar2
//将数据送到*ar2
nop
begin:
st#outdata1,*ar2
portw*ar2,0bfffh
//将*ar2内容从D/A转换器输出
rpt#7fffh
//等待一段时间
st#outdata2,*ar2
st#outdata3,*ar2
st#outdata4,*ar2
st#outdata5,*ar2
st#outdata6,*ar2
st#outdata7,*ar2
st#outdata8,*ar2
st#outdata9,*ar2
st#outdata10,*ar2
st#outdata11,*ar2
st#outdata12,*ar2
st#outdata13,*ar2
st#outdata14,*ar2
st#outdata15,*ar2
nop
st#outdata16,*ar2
st#outdata17,*ar2
st#outdata18,*ar2
st#outdata19,*ar2
st#outdata20,*ar2
st#outdata21,*ar2
st#outdata22,*ar2
st#outdata23,*ar2
st#outdata24,*ar2
st#outdata25,*ar2
st#outdata26,*ar2
st#outdata27,*ar2
st#outdata28,*ar2
st#outdata29,*ar2
st#outdata30,*ar2
st#outdata31,*ar2
st#outdata32,*ar2
bbegin
//循环输出32个数据
.end
//代码段结束
4.3本系统软件总体流程
4.4核心模块及实现代码
FFT算法程序:
voidkfft(doublepr[Length],doublepi[Length],intn,intk,doublefr[Length],doublefi[Length],intl,intil)
{
intit,m,is,i,j,nv,l0;
doublep,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;
pr[1]=cos(p);
pi[1]=-sin(p);
if(l!
=0)pi[1]=-pi[1];
for(i=2;
{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;
=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;
=(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;
=0)
{fr[i]=fr[i]/(1.0*n);
fi[i]=fi[i]/(1.0*n);
if(il!
{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;
elsepi[i]=-90.0;
else
}
卷积程序:
voidConvolveok(//卷积函数
double*x,//原始输入数据
double*h,//冲击响应
double*y,//卷积输出结果
UINT16Leng,//序列长度
UINT16h_Len)
{
UINT16m,p,j;
doubler,rm;
doublexmean=0.0;
doublexmid[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;
x[m]=x[m]-xmean;
for(p=0;
p<
p++)
{
xmid[h_Len-p-1]=xmid[h_Len-p-2];
}
xmid[0]=x[m];
r=0.0;
rm=0.0;
for(j=0;
{
r=xmid[j]*h[j];
rm=rm+r;
y[m]=rm;
}
求最大值和次大值函数:
voidmax()
{intk1,k2;
//k1最大值,k2次最大值
intr;
for(r=0;
r<
16;
r++)
{
if(pr[k1]<
pr[r])
{
k1=r;
for(r=20;
64;
if(pr[k2]<
k2=r;
f0=250000.0/256*k1;
f1=250000.0/256*k2;
fc=(f0+f1)/2;
归一化函数:
voidavg()
{intj;
sum=0.0;
for(j=0;
j<
256;
j++)
sum+=(data_buff[j]/256.0);
pr[j]=data_buff[j]-sum;
pi[j]=0.0;
FIR滤波器设计函数:
voidfirdes(doublenpass)//求h(n)
intt;
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服务函数:
voidinterruptExtInt2(void)
inti1,j;
*(unsignedint*)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);
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)波形
滤波前后信号频谱图:
由滤波前后高低频分量的相对大小证明低通滤波器对高频分量的衰减作用比较强,但没有完全滤出去
采集数据波形与滤波后波形比较
由图可见滤波后信号中的高频分量得到了较大的衰减,滤波后波形变得平滑。
五课程设计总结
DSP芯片有更适合于数字信号处理的软件和硬件资源,非常适合于通用数字信号处理的开发,为数字信号处理的应用打开了新局面。
学好DSP技术具有非常重要的意义。
通过此次课程设计,我学习到了一个实际的电子系统的完整的设计流程,基本掌握了PCB设计软件AltiumDesigner的使用方法,学会了绘制系统的功能框图、原理图以及PCB版图。
同时掌握了CCS软件的使用和基于TMS320VC5416的DSP程序的编写。
此次课程设计首先绘制系统功能框图,使用AD软件绘制原理图和PCB版图。
在绘制系统功能框图过程中,要设计一个功能完备,能够独立运行的精简DSP硬件系统。
然后再基于此系统功能框图绘制原理图和PCB版图。
在原理图的绘制过程中要充分考虑到所使用的器件及管脚的网络标号,总线的链接等。
因为要绘制PCB版图,故要合理选择各个器件的封装,合理安排各个器件和线的位置,尤其是滤波电容要安放在靠近各个管脚的位置,真正起到滤波的作用。
在使用CCS软件编写程序时要注意变量定义以及函数声明。
通过查阅资料和与老师同学交流后完善了各部分程序。
DSP程序相对难一些,在编写时需要从系统整体来考虑,不断调整算法且保持思路清晰,熟悉各个子程序的功能。
通过此次课程设计,使我对TMS320C54x系列DSP的硬件结构有了较为深刻的认识,也学习到了实际的电子系统的完整的设计流程,熟悉了AD软件和CCS软件的使用方法,对于数字信号处理有了更深刻的认识。
数字信号处理无处不在,这样的课程设计很有意义,对于我们今后的学习与工作都会产生深远影响,为我们独立完成其他DSP设计打下基础。
通过查阅资料以及老师同学的帮助,解决了课程设计中遇到的难题,也学习到了很多知识,将理论运用于实践。
感谢老师和同学的大力帮助,使我顺利完成了此次课程设计。