ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:174.34KB ,
资源ID:18475906      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18475906.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DSP课程设计正余弦信号的产生Word文档下载推荐.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DSP课程设计正余弦信号的产生Word文档下载推荐.docx

1、利用泰勒级数的展开式,可计算一个角度x的正弦值,并采用子程序的调用方式。在调用前先在数据存储器d_xs单元中存放x的弧度值,计算结果存放在d_sinx单元中。实现计算一个角度的正弦值的程序片段如下:sinx: .def d_xs,d_sinx .datatable_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,4d_xs .usect sin_vars,1d_squr_xs .usect d_temp_

2、s .usect d_sinx .usect d_l_s .usect .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=x2 ST A,*AR2 ;(AR2)=x2 |LD *AR4,B ;B=1 MASR *AR2+,*AR3+,B,A ;A=1-x2/72,T=x2 MPYA A ;A=T*A=x2(1-x2/72) S

3、TH A,*AR2 ;(d_temp)=x2(1-x2/72) MASR *AR2-,*AR3+,B,A ;A=1-x2/42(1-x2/72);T=x2(1-x2/72) MPYA *AR2+ ;B=x2(1-x2/42(1-x2/72) ST B,*AR2 ;(d_temp)=x2(1-x2/42(1-x2/72) |LD *AR4,B ; MASR *AR2-,*AR3+,B,A A=1-x2/20(1-x2/42(1-x2/72) MPYA *AR2+ B=x2(1-x2/20(1-x2/42(1-x2/72) ST B,*AR2 ;(d_temp)=B MASR *AR2-,*AR3

4、,B,A A=1-x2/6(1-x2/20(1-x2/42(1-x2/72) MPYA d_xs ;B=x(1-x2/6(1-x2/20(1-x2/42(1-x2/72) STH B,d_sinx ;sin(theta) RET计算一个角度的余弦值利用余弦函数展开的泰勒级数的前五项计算一个角度的余弦值,可采用子程序的调用方式来实现。调用前先将x弧度值放在数据存储器d_xc单元中,计算结果存放在d_cosx单元中。实现计算一个角度的余弦值的程序片段如下:cosx: .def d_xc,d_cosxd_coef_c .usect coef_c .datatable_c .word 0249H ;C

5、1=1/(7*8) .word 0444H ;C2=1/(5*6) .word 0AABH ;C3=1/(3*4) .word 4000H ;C4=1/2d_xc .usect cos_varsd_squr_xc .usect d_temp_c .usect d_cosx .usect c_l_c .usect STM #d_coef_c,AR5 ;move coeffs table_c RPT #3 MVPD #table_c,*AR5+ STM #d_coef_c,AR3 STM #d_xc,AR2 STM #c_l_c,AR4 ST #7FFFH,c_l_c SQUR *AR2+,A ;

6、 ST A,*AR2 ; |LD *AR4,B ; MASR *AR2+,*AR3+,B,A ;A=1-x2/56,T=x2 MPYA A ;A=T*A=x2(1-x2/56) STH A,*AR2 ;(d_temp)=x2(1-x2/56) MASR *AR2-,*AR3+,B,A ;A=1-x2/30(1-x2/56)T=x2(1-x2/56)B=x2(1-x2/30(1-x2/56) ST B,*AR2 (d_temp)=x2(1-x2/30(1-x2/56) MASR *AR2-,*AR3+,B,A A=1-x2/12(1-x2/30(1-x2/56) SFTA A,-1,A ;-1/

7、2 NEG AB=-x2/2(1-x2/12(1-x2/30(1-x2/56) MAR *AR2+ RETD ADD *AR4,16,B ; STH B,*AR2 ;cos(theta)正弦波的实现利用计算一个角度的正弦值和余弦值程序可实现正弦波。其实现步骤如下:第一步:利用sin_start和cos_start子程序,计算(间隔为)的正弦和余弦值;第二步:利用sin(2x)=2sin(x)cos(x)公式,计算的正弦值(间隔为);第三步:通过复制,获得的正弦值;第四步:将的正弦值重复从PA口输出,便可得到正弦波。产生正弦波的程序片段如下:.mmregs .def start .def d_x

8、s,d_sinx,d_xc,d_cosx,sinx,cosxsin_x: .usect sin_x,360STACK:STACK,10Hk_theta .set 286 ;theta=pi/360(0.5deg)start: STM #STACK+10H,SP STM k_theta,AR0 STM 0,AR1 STM #sin_x,AR6 STM #90,BRC RPTB loop1-1 LDM AR1,A LD #d_xs,DP STL A,d_xs STL A,d_xc CALL sinx ;d_sinx=sin(x) CALL cosx ;d_cosx=cos(x) LD #d_sin

9、x,DP LD d_sinx,16,A ;A=sin(x) MPYA d_cosx ;B=sin(x)*cos(x) STH B,1,*AR6+ ;AR6-2*sin(x) MAR *AR1+0loop1: STM #sin_x+89, AR7 ;sin91(deg.)-sin179(deg.) STM #88,BRC RPTB loop2-1 LD *AR7-,A STL A,*AR6+loop2: STM #179,BRC ;sin180(deg.)-sin359(deg.) STM #sin_x,AR7 RPTB loop3-1 LD *AR7+,Aloop3: STM #sin_x,A

10、R6 ;generate sin wave STM #1,AR0 STM #360,BK B loop3产生正弦波链接命令文件的程序片段如下: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 .dat

11、a : STACK : SPRAM PAGE 1 sin_vars : DARAM1 PAGE 1 coef_s : cos_vars : DARAM2 PAGE 1 coef_c : sin_x : align(512) DARAM3 PAGE 1 .vectors : VECS PAGE 0在实际应用中,正弦波是通过D/A口输出的。选择每个正弦周期中的样点数、改变每个样点之间的延迟,就能够产生不同频率的波形,也可以利用软件改变波形的幅度以及起始相位。第二章 总体方案设计2.1. 总体实现方案我们知道一个角度为x的正弦和余弦函数,都可以展开为泰勒级数,且其前五项可以看为:本程序的编程思想是这

12、样的,正弦波的波形可以看为由无数点组成,这些点与轴的每一个角度值相对应,那么我们可以利用DSP处理器处理大量重复计算的优势来计算,轴每一点对应的y轴的值(在x轴取360个点来进行逼近),由于程序的编制采用小数形式,其弧度大于1的正弦值得不到,这就对正弦波的产生造成了障碍。可由于正弦波的特殊的对称形式给程序的编制找到了出口。的弧度为0.7854 Graph - Time/Frequency菜单打开一个图形显示窗口。将 “Start Address”项改为地址sin_x,将“Acquisition Buffer Size”项设置为360,将“Display Data Size”项设置为360,将“

13、DSP Data Type”改为“16-bit signed integer” 。即将Graph Property Dialog对话框改为见下图:这样,将在图形显示窗口中显示从sin_x(首地址)开始的360个点的 16 位有符号整数的图形。第三章 源程序主要参数1. sin(theta)=x(1-x2/2*3(1-x2/4*5(1-x2/6*7(1-x2/8*9)2. cos(theta)=1-x2/2*3(1-x2/4*5(1-x2/6*7(1-x2/8*9)3. sin(2*theta)=2*sin(theta)*cos(theta)源程序1. 产生正弦波程序清单sin.asm: .ti

14、tle sin.asm ;为汇编文件取名为“sin.asm” .mmregs ;定义存储器映像寄存器 .def _c_int00 .ref sinx,d_xs,d_sinx,cosx,d_xc,d_cosx;定义标号,360 ;为保留360个存储空间,10 ;为堆栈保留10个存储空间k_theta .set 286 ;PA0 .set 0_c_int00 .text ;定义文本程序代码段 STM #STACK+10,SP ;设置堆栈指针 STM k_theta,AR0 ;AR0-K_theta(increment) STM 0,AR1 ;(AR1)=X(rad) STM #sin_x,AR6

15、;AR6- - sin(x) STM #90,BRC ;form sin0(deg.)sin90(deg);重复执行块语句(下条语句开始至loop1-1 )91次 RPTB loop1-1 LD #d_xs,DP ;DPd_xs STL A,d_xs ;(A)低16位d_xs STL A,d_xc ;(A)低16位d_xc CALL sinx ;调用sinx程序 CALL cosx ;调用conx程序 LD #d_sinx,DP ;DP d_sinx LD d_sinx,16,A ; MPYA d_cosx ;B= sin(x)*cos(x) STH B,1,*AR6+ ;2*sin(x)*c

16、os(x) MAR *AR1+0 ;修改辅助寄存器AR1 STM #sin_x+89,AR7 ;sin91(deg.)- -sin179(deg.) STM #88,BRC ;重复执行下条指令至loop2-1 RPTB loop2-1 ;处90次 LD *AR7-,A ;(AR7) A,然后AR7减去1 STL A,*AR6+ ;(A) 低16位AR6 STM #179,BRC ;sin180(deg.)- -sin359(deg.)(BRC)=179,重复执行180次 STM #sin_x,AR7 ;AR7指向sin_x首地址 RPTB loop3-1 ; LD *AR7+,A ;(AR7)

17、 A,然后AR7加1 NEG A ;累加器变负A低16位AR6generate sin wave AR6指向sin_x STM #1,AR0 ;AR 01 STM #360,BK ;BK360loop4: PORTW *AR6+0%,PA0 ;PA0=*AR6+0%,向PA0输出数据 B loop4 ; .def d_xs,d_sinx ;定义标号d_xs,d_sinx .data ;定义数据代码段table_s .word 01c7h ;c1=1/(8*9) .word 030bh ;c1=1/(6*7) .word 0666h ;c1=1/(4*5) .word 1556h ;c1=1/(

18、2*3),4 ;保留4个存储空间,1 ;为d_xs中sin_vars保留1个存储空间为d_squr_xs中sin_vars保留1个存储空间为d_temp_s中sin_vars保留1个存储空间为d_sinx中sin_vars保留1个存储空间c_l_s .usect 定义代码开始段 SSBX FRCT ;设置FRCT=1以解决冗余符号位 STM #d_coef_s,AR5 ;AR5指向d_coef_s首地址 RPT #3 ;重复下条指令4次 MVPD #table_s,*AR5+ ;table_s中的数复制到AR5指向的单元 STM #d_coef_s,AR3 ;AR3指向d_coef_s首地址

19、STM #d_xs,AR2 ;AR2指向d_xs首地址 STM #c_l_s,AR4 ;AR4指向c_l_s首地址 ST #7FFFh,c_l_s ;7FFFh c_l_s SQUR *AR2+,A ;AR2指向累加器A中的数值求其平方 ST A,*AR2 ;(A)左移16位AR2 |LD *AR4,B ;(AR4)左移16位B MASR *AR2+,*AR3+,B,A ;从累加器A中减去(AR2)*(AR3) MPYA A ;操作数与累加器A中高位相乘 STH A,*AR2 ;(A)高16位AR2 MASR *AR2-,*AR3+,B,A ; MPYA *AR2+ ;AR2指向的数与累加器A的高16位相乘 ST B,*AR2 ;(B)左移16位AR2与累加器A中高16位相乘(AR4)左移16位B MASR *AR2-,*AR3+,B,A ; MPYA d_xs ;d_xs指向的操作数与累加器A中高16位相乘 STH B,d_sinx ;(B)高16位d_sinx RET ;返回 .def d_xc,d_cosx ;定义标号d_xc,d_cosx为coef_c保留4个存储空间table_c .word 024

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1