视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
DSP课程设计 正弦信号的产生
2025-09-29 17:10:43 责编:小OO
文档
DSP原理及应用

课程设计

课  题:正弦信号发生器的设计 

班  级:通信0802             

姓  名:                      

学  号:2008001322           

    课题   正弦信号发生器    

一、设计目的

学会用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。

计算一个角度x的正弦值,可利用泰勒级数的展开式,采用子程序的调用方式来实现。在调用前先在数据存储器d_xs单元中存放x的弧度值,计算结果存放在d_sinx单元中

四、设计步骤

1、CCS软件的操作:

(1)建立工程:点击菜单project-new,在弹出的窗口中输入工程名,后缀是.pjt;

(2)建立文件:点击菜单file-new-source file,建立汇编语言文件和链接命令文件;

(3)将文件加入工程:点击菜单project-add files to project,选择要加入的文件添加到工程;

(4)工程的汇编链接:点击菜单project-rebuild all,若汇编链接成功会生成.out文件;

(5)装载可执行程序:点击菜单file-lode program,装载.out文件;

(6)执行程序:点击菜单debug-run;

(7)观察结果。

2、注意事项:

(1)标号区分大小写,标号从第一列开始;

(2)星号(*)从第一列开始;

(3)指令助记符不能从第一列开始;

(4) MEMORY和SECTIONS要大写;

(5)在链接命令文件中解释说明用符号/*       */;

(6)PAGE与0或与1之间要有空格。

五、设计源程序 

1、正弦波形的汇编程序

          .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+,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

2、正弦波形的链接程序

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

   }

3、复位向量文件

.title    "vectors.asm"

      .ref      _c_int00

      .sect     ".vectors"

       B         _c_int00

      .end

实验结果:

六、设计结果分析

利用sin_start和cos_start子程序,计算0~45°(间隔为0.5°)的正弦和余弦值;再利用sin(2x)=2sin(x)cos(x)公式,计算0°~90°的正弦值(间隔为1°);通过复制,获得0°~359°的正弦值;将0°~359°的正弦值重复从PA口输出,便可得到正弦波。

在实际应用中,正弦波是通过D/A输出口输出的。选择每个正弦周期中的样点数、改变每个样点之间的延迟,就能够产生不同频率的波形,也可以利用软件改变波形的幅度以及起始相位。 

七、设计总结

本次课设中遇到了很多的问题:

其一是ccs集成操作环境比较生疏,又是全英文版的,有点难以下手,一边用ccs一边用google翻译,忙得不可开交,却也不亦乐乎。

二就是初次接触编程,出了错误也不知道在哪里改动,最终还是结合网上的资料及同学之间的相互讨论把结果做了出来。通过这次设计,我们学会了使用ccs集成开发环境做一些简单的设计,例如正弦信号的发生等。在过程中进一步提高了自己的创新能力,和对课程的对DSP芯片的进一步认知,对以后的工作生活或许会有很大的帮助。

     下载本文

显示全文
专题