文档介绍:DSP原理及应用
课程设计
设计题目:正弦波信号发生器
学校:
学院:
专业班级:
姓名:
学号:
同组人:、
设计题目
正弦波信号发生器
设计目的
S(poser Studio)集成开发环境软件,在此集成开发环境下完成工程项目创建,程序编写,编译,链接,调试以及数据的分析。同时完成一个正弦波信号发生器的程序的编写,并在集成开发环境下进行模拟运行,观察结果。
设计内容
编写一个产生正弦波信号的程序,在CCS软件下进行模拟运行,观察输出结果。
设计原理
正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领域的信号处理系统中。通常有两种方法可以产生正弦波,分别为查表法和泰勒级数展开法。查表法是通过查表的方式来实现正弦波,主要用于对精度要求不很高的场合。泰勒级数展开法是根据泰勒展开式进行计算来实现正弦信号,它能精确地计算出一个角度的正弦和余弦值,且只需要较小的存储空间。本次课程设计只要使用泰勒级数展开法来实现正弦波信号。
1. 产生正弦波的算法
在高等数学中,正弦函数和余弦函数可以展开成泰勒级数,其表达式为
若要计算一个角度x的正弦和余弦值,可取泰勒级数的前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]。
2. 正弦波的实现
⑴计算一个角度的正弦值
利用泰勒级数的展开式,可计算一个角度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
⑵计算一个角度的余弦值
利用余弦函数展开的泰勒级数的前五项计算一个角度的余弦值,可采用子程序的