资源描述:
《dsp原理及应用课程设计-正弦波信号发生器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、DSP原理及应用课程设计设计题目:正弦波信号发生器学校:太原理工大学学院:信息工程学院专业班级:通信0903班姓名:学号:2009001374同组人:13设计题目正弦波信号发生器设计目的学会使用CCS(CodeComposerStudio)集成开发环境软件,在此集成开发环境下完成工程项目创建,程序编写,编译,链接,调试以及数据的分析。同时完成一个正弦波信号发生器的程序的编写,并在集成开发环境下进行模拟运行,观察结果。设计内容编写一个产生正弦波信号的程序,在CCS软件下进行模拟运行,观察输出结果。设计原理正弦波信号发生器已被广泛地应用于
2、通信、仪器仪表和工业控制等领域的信号处理系统中。通常有两种方法可以产生正弦波,分别为查表法和泰勒级数展开法。查表法是通过查表的方式来实现正弦波,主要用于对精度要求不很高的场合。泰勒级数展开法是根据泰勒展开式进行计算来实现正弦信号,它能精确地计算出一个角度的正弦和余弦值,且只需要较小的存储空间。本次课程设计只要使用泰勒级数展开法来实现正弦波信号。1.产生正弦波的算法在高等数学中,正弦函数和余弦函数可以展开成泰勒级数,其表达式为若要计算一个角度x的正弦和余弦值,可取泰勒级数的前5项进行近似计算。由上述两个式子可以推导出递推公式,即sin(
3、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.正弦波的实现⑴计算一个角度的正弦值13利用泰勒级数的展开式,可计算一个角度x的正弦值,并采用子程序的调用方式。在调用前先在数据存储器d_xs单元中存放x的弧度值,计算结果存放在d_sinx单元中。实现计算一个角度的正弦值的程序片段如下:sin
4、x:.defd_xs,d_sinx.datatable_s.word01C7H;C1=1/(8*9).word030BH;C2=1/(6*7).word0666H;C3=1/(4*5).word1556H;C4=1/(2*3)d_coef_s.usect"coef_s",4d_xs.usect"sin_vars",1d_squr_xs.usect"sin_vars",1d_temp_s.usect"sin_vars",1d_sinx.usect"sin_vars",1d_l_s.usect"sin_vars",1.textSSBXFR
5、CTSTM#d_coef_s,AR5;movecoeffstable_sRPT#3MVPD#table_s,*AR5+STM#d_coef_s,AR3STM#d_xs,AR2STM#d_l_s,AR4ST#7FFFH,d_l_sSQUR*AR2+,A;A=x^2STA,*AR2;(AR2)=x^2
6、
7、LD*AR4,B;B=1MASR*AR2+,*AR3+,B,A;A=1-x^2/72,T=x^2MPYAA;A=T*A=x^2(1-x^2/72)STHA,*AR2;(d_temp)=x^2(1-x^2/72)MASR*AR2-,*AR3
8、+,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))STB,*AR2;(d_temp)=x^2(1-x^2/42(1-x^2/72))
9、
10、LD*AR4,B;B=1MASR*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)))STB,*AR2;(d_temp)=B
11、
12、LD*AR4,B;B=1MASR*AR2-,
13、*AR3,B,A13;A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))MPYAd_xs;B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))STHB,d_sinx;sin(theta)RET⑵计算一个角度的余弦值利用余弦函数展开的泰勒级数的前五项计算一个角度的余弦值,可采用子程序的调用方式来实现。调用前先将x弧度值放在数据存储器d_xc单元中,计算结果存放在d_cosx单元中。实现计算一个角度的余弦值的程序片段如下:cosx:.defd_xc,d_cosxd_coef_c.
14、usect"coef_c",4.datatable_c.word0249H;C1=1/(7*8).word0444H;C2=1/(5*6).word0AABH;C3=1/(3*4).word4000H;C4=1/2d_x