资源描述
太原理工大学
DSP原理及应用
课程设计报告
专业班级:通信0802
2010年12月30日
一、设计目的
学会用ccs集成开发软件,在开发环境下完成工程项目创建,程序编辑,编译,链接,调试和数据分析。
二、设计内容
编写程序,利用ccs软件产生正弦波
三、设计原理
正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领域的信号处理系统中。
通常有两种方法可以产生正弦波,分别为查表法和泰勒级数展开法。
查表法是通过查表的方式来实现正弦波,主要用于对精度要求不很高的场合。
泰勒级数展开法是根据泰勒展开式进行计算来实现正弦信号,它能精确地计算出一个角度的正弦和余弦值,且只需要较小的存储空间。
本次主要用泰勒级数展开法来实现正弦波信号。
产生正弦波的算法
正弦函数和余弦函数可以展开成泰勒级数,其表达式:
取泰勒级数的前5项,得近似计算式:
递推公式:
sin(nx) = 2cos(x)sin[(n-1)x]-sin[(n-2)x]
cos(nx) = 2cos(x)sin[(n-1)x]-cos[(n-2)x]
由递推公式可以看出,在计算正弦和余弦值时,需要已知cos(x)、sin(n-1)x、sin(n-2)x和cos(n-2)x。
四、总体方案设计
(1)建立工程:点击菜单project-new,在弹出的窗口中输入工程名,后缀是.pjt;
(2)建立文件:点击菜单file-new-source file,建立汇编语言文件和链接命令文件;
(3)将文件加入工程:点击菜单project-add files to project,选择要加入的文件添加到工程;
(4)工程的汇编链接:点击菜单project-rebuild all,若汇编链接成功会生成.out文件;
(5)装载可执行程序:点击菜单file-load program,装载.out文件;
(6)执行程序:点击菜单debug-run;
(7)观察结果。
注意事项:
(1)标号区分大小写,标号从第一列开始;
(2)星号(*)从第一列开始;
(3)指令助记符不能从第一列开始;
(4) MEMORY和SECTIONS要大写;
(5)在链接命令文件中解释说明用符号/* */;
(6)PAGE与0或与1之间要有空格。
五、主要参数
(1)sin(theta)=x(1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9))))
(2)cos(theta)=1-x^2/2*3(1-x^2/4*5(1-x^2/6*7(1-x^2/8*9)))
(3)sin(2*theta)=2*sin(theta)*cos(theta)
六、设计源程序代码
正弦波形的汇编程序
.title "sinx.asm"
.mmregs
.def _c_int00
.ref d_xs,d_sinx,d_xc,d_cosx
sin_x: .usect "sin_x",360
STACK: .usect "STACK",10
k_theta .set 286
PA0 .set 0
_c_int00: .text
STM #STACK+10,SP
STM #0,AR1
STM k_theta,AR0
STM #sin_x,AR7
STM #90,BRC
RPTB loop1-1
LDM AR1,A
LD #d_xs,DP
STL A,@d_xs
STL A,@d_xc
CALL sin_start
CALL cos_start
LD #d_sinx,DP
LD @d_sinx,16,A
MPYA @d_cosx
STH B,1,*AR7+
MAR *AR1+0
loop1: STM #sin_x+89,AR6
STM #88,BRC
RPTB loop2-1
LD *AR6-,A
STL A,*AR7+
loop2: STM #179,BRC
STM #sin_x,AR6
RPTB loop3-1
LD *AR6+,A
NEG A
STL A,*AR7+
loop3: NOP
end: B end
sin_start:
.def sin_start
d_coef_s .usect "coef_s",4
.data
table_s: .word 01C7H
.word 030BH
.word 0666H
.word 1556H
d_xs .usect "sin_vars",1
d_squr_xs .usect "sin_vars",1
d_temp_s .usect "sin_vars",1
d_sinx .usect "sin_vars",1
c_1_s .usect "sin_vars",1
.text
SSBX FRCT
STM #d_coef_s,AR4
RPT #3
MVPD #table_s,*AR4+
STM #d_coef_s,AR2
STM #d_xs,AR3
STM #c_1_s,AR5
ST #7FFFH,c_1_s
SQUR *AR3+,A
ST A,*AR3
||LD *AR5,B
MASR *AR3+,*AR2+,B,A
MPYA A
STH A,*AR3
MASR *AR3-,*AR2+,B,A
MPYA *AR3+
ST B,*AR3
||LD *AR5,B
MASR *AR3-,*AR2+,B,A
MPYA *AR3+
ST B,*AR3+
||LD *AR5,B
MASR *AR3-,*AR2+,B,A
MPYA d_xs
STH B,d_sinx
RET
cos_start:
.def cos_start
d_coef_c .usect "coef_c",4
.data
table_c: .word 0249H
.word 0444H
.word 0AABH
.word 4000H
d_xc .usect "cos_vars",1
d_squr_xc .usect "cos_vars",1
d_temp_c .usect "cos_vars",1
d_cosx .usect "cos_vars",1
c_1_c .usect "cos_vars",1
.text
SSBX FRCT
STM #d_coef_c,AR4
RPT #3
MVPD #table_c,*AR4+
STM #d_coef_c,AR2
STM #d_xc,AR3
STM #c_1_c,AR5
ST #7FFFH,c_1_c
SQUR *AR3+,A
ST A,*AR3
||LD *AR5,B
MASR *AR3+,*AR2+,B,A
MPYA A
STH A,*AR3
MASR *AR3-,*AR2+,B,A
MPYA *AR3+
ST B,*AR3
||LD *AR5,B
MASR *AR3-,*AR2+,B,A
SFTA A,-1,A
NEG A
MPYA *AR3+
MAR *AR3+
RETD
ADD *AR5,16,B
STH B,*AR3
RET
.end
正弦波形的链接程序
MEMORY
{
PAGE 0:
EPROM: org=0E000H,len=1000H
VECS: org=0FF80H,len=0080H
PAGE 1:
SPRAM: org=0060H,len=0020H
DARAM1: org=0080H,len=0010H
DARAM2: org=0090H,len=0010H
DARAM3: org=0200H,len=0200H
}
SECTIONS
{ .text :> EPROM PAGE 0
.data :> EPROM PAGE 0
STACK :> SPRAM PAGE 1
sin_vars :> DARAM1 PAGE 1
coef_s :> DARAM1 PAGE 1
cos_vars :> DARAM1 PAGE 1
coef_c :> DARAM2 PAGE 1
sin_x : align(512){}> DARAM3 PAGE 1
.vetors :> VECS PAGE 0
}
复位向量文件vectors.asm
.title "vectors.asm"
.ref _c_int00
.sect ".vectors"
B _c_int00
.end
七、实验结果及分析
.仿真波形图
在ccs集成环境中实现正弦波能够起到防止干扰的作用,同时也大大地减小了波形的线性失真。同时我们也能从中看出ccs能够精确地对各个角度进行计算得出相应的正弦值,幅度和频率易于调节,波形也较为稳定,抗干扰能力较强。
最重要的是这种设计方案简单可行,新颖实用,具有很高的实践和推广价值。
八、设计总结
在本次课程设计过程中我遇到一些课堂中从未有过的问题,通过网络查找和同学交流,大大促进了实训进程。并在过程中进一步提高自身的创作、创新水平,扎实基础,扩展所学。
课设过程中经常遇到问题,而在场的老师为各位同学提供了解答方案;辅助同学攻克了实训中的难点。同时也会请老师指点不足之处,以加以改进,完善作品。并且此次课程设计,基于课程理论知识和网上资料,使我对数字信号处理课程有了更深一步的了解和掌握,对利用CCS软件编程的数字信号处理方法有了进一步的了解。在理论课的基础上进行实验实习,是对本门课程的深入学习和掌握,在以后的工作学习中,数字信号的处理都是采用计算机仿真的方很大的帮助。这样一个课程设计对我们的发展有着极大的帮助!
最后,这个设计之所以能按时完成离不开老师的指导和同学的帮助,在这我对他们表示衷心的感谢。
展开阅读全文