DSP课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DSP课程设计
DSP原理及应用课程设计一、设计题目——正弦波信号发生器
二、设计目的
1、掌握用汇编语言编写输出正弦波信号的程序
2、掌握正弦波信号的 DSP 实现原理和 C54X 编程技巧
3、进一步加深对CCS 的认识
4、能通过 CCS 的图形显示工具观察正弦信号波形三、实验设备
PC 兼容机一台,操作系统为 WindowsXP,安装Code Composer Studio 3.1软件。
四、设计原理
在通信、仪器和工业控制等领域的信号处理系统中常常会用到信号发生器来产生正弦波! 产生正弦波的方法一是查表法,二是泰勒级数展开法!查表法主要用于对精度要求不很高的场合,而泰勒级数展开法是一种比查表法更为有效的方法,它能精确地计算出一个角度的正弦和余弦值,且只需要较少的存储空间。本实验将利用泰勒级数展开法利用计算一个角度的正弦值和余弦值程序可实现正弦波。
(1)产生正弦波的算法:在高等数学中,正弦函数和余弦函数可以展开成泰勒级数,其表达式为:
3579xxxxsin(x),x,,,,,... 3!5!7!9!
2468xxxx cos(x),1,,,,,...2!4!6!8!
若要计算一个角度的正弦和余弦值,可取泰勒级数的前五项进行近似计算。
3579xxxxx,x,,,,,sin()...3!5!7!9!
2222xxxx(1(1(1(1)))),x,,,,,,,,23456789
2468xxxx cos(x),1,,,,,... 2!4!6!8!
2222xxxx,,,,, 1(1(1(1))) ,,,2345678
由这两个式子可推导出递推公式,即
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)xsin(n,2)xcos(n,2)x
(2)正弦波的实现
1、计算一个角度的正弦值
利用泰勒级数的展开式,可计算一个角度x的正弦值,并采用子程序的调用方式。在调用前先在数据存储器d_xs单元中存放x的弧度值,计算结果存放在
d_sinx单元中。
实现计算一个角度的正弦值的程序片段如下: sinx:
.def d_xs,d_sinx
.data
table_s .word 01C7H ;C1=1/(8*9)
.word 030BH ;C2=1/(6*7)
.word 0666H ;C3=1/(4*5)
.word 1556H ;C4=1/(2*3)
d_coef_s .usect "coef_s",4
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
d_l_s .usect "sin_vars",1
.text
SSBX FRCT
STM #d_coef_s,AR5 ;move coeffs table_s
RPT #3
MVPD #table_s,*AR5+
STM #d_coef_s,AR3
STM #d_xs,AR2
STM #d_l_s,AR4
ST #7FFFH,d_l_s
SQUR *AR2+,A ;A=x^2
ST A,*AR2 ;(AR2)=x^2
||LD *AR4,B ;B=1
MASR *AR2+,*AR3+,B,A ;A=1-x^2/72,T=x^2
MPYA A ;A=T*A=x^2(1-x^2/72)
STH A,*AR2 ;(d_temp)=x^2(1-x^2/72)
MASR
*AR2-,*AR3+,B,A ;A=1-x^2/42(1-x^2/72);T=x^2(1-x^2/72) MPYA *AR2+ ;B=x^2(1-x^2/42(1-x^2/72))
ST
B,*AR2 ;(d_temp)=x^2(1-x^2/42(1-x^2/72))
||LD *AR4,B ;B=1
MASR
*AR2-,*AR3+,B,A ;A=1-x^2/20(1-x^2/42(1-x^2/72)) MPYA
*AR2+ ;B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))
ST B,*AR2 ;(d_temp)=B
||LD *AR4,B ;B=1
MASR
*AR2-,*AR3,B,A ;A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))) MPYA d_xs ;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))) STH B,d_sinx ;sin(theta)
RET
2、计算一个角度的余弦值
利用余弦函数展开的泰勒级数的前五项计算一个角度的余
弦值,可采用子程序的调用方式来实现。调用前先将x弧度值放在数据存储器d_xc单元中,计算结果存放在d_cosx单元中。
实现计算一个角度的余弦值的程序片段如下:
cosx:
.def d_xc,d_cosx
d_coef_c .usect "coef_c",4
.data
table_c .word 0249H ;C1=1/(7*8)
.word 0444H ;C2=1/(5*6)
.word 0AABH ;C3=1/(3*4)
.word 4000H ;C4=1/2
d_xc .usect "cos_vars",1
d_squr_xc .usect "cos_vars",1
d_temp_c .usect "cos_vars",1