99网
您的当前位置:首页dsp5000指导书

dsp5000指导书

来源:99网
DSP原理与应用实验

第3章 正弦波信号产生 3.1单频正弦波信号实验

3.1.1 实验目的

    

进一步熟悉使用CCS集成环境,对程序进行编译、链接运行和仿真; 学习使用定点数表示小数的方法及其在55x DSP中的运算; 学习使用汇编语言编写计算一个正弦值和一个余弦值的子程序; 掌握子程序调用和55x DSP块重复操作; 学习正弦波发生器的实现。

3.1.2 实验设备

 PC兼容机一台;操作系统为Windows2000 (或WindowsNT、Windows98、WindowsXP);  计算机安装CCS 5000或CCS 3.1。

3.1.3 实验要求

使用CCS集成仿真环境,完成建立工程、源文件、命令文件,保存和添加文件到工程,进行编译、链接、运行和调试等操作。使用观察窗口观察寄存器和存储器空间的内容以及输出正弦波波形等。

3.1.4 实验原理

1.sin(x)值和cos(x)值的算法

设x为角度的弧度值,sin(x)值和cos(x)值可以由泰勒级数展开式得到,我们取其前五项近似,如需更高精确度,可取所需项数,其表达式如下:

sin(x)=x-x3/3!+x5/5!-x7/7!+x9/9!

=x(1-(x2/6)(1-(x2/20)(1-(x2/42)(1-x2/72))))

(3.1)

cos(x)=1-x2/2!+x4/4!-x6/6!+x8/8!

=1-x2/2(1-x2/12(1-x2/30(1-x2/56)))

(3.2)

DSP C55x是定点DSP,正弦值和余弦值在-1和1之间,在这里我们采用Q15格式来表示所有的小数。采用Q15格式时,使用泰勒级数展开式来计算,要求 x不能大于1弧度,而这样只能计算一部分值;如果要计算0到π/2正弦值,则要利用三角公式来计算。在本计算中,x取0到π/4,使用泰勒级数展开式来计算,再用三角公式sin(2x)=2sin(x)cos(x)计算0到π/2正弦值。

- 26 -

正弦波信号产生

在以上两个公式中,sin(x) 展开式中的系数为s1=1/72,s2=1/42,s3=1/20,s4=1/6,cos(x) 展开式中的系数为c1=1/56, c2=1/30,c3=1/12,c4=1/2,它们表示成定点数Q15格式的十六进制数为:

S1=32 768/72=01c7H S2=32 768/42 =030bH S3=32 768/20=0666H S4=32 768/6 =1556H C1=32 768/56=0294H C2=32 768/30 =0444H C3=32 768/12=0aabH C4=32 768/2=4000H

这里用小写字母表示小数,用大写字母表示相应小数Q15格式的定点数。下面这些算式表示如何在十六位定点DSP C55x上实现正弦值计算的方法,目的是让读者了解定点DSP如何实现小数运算。

设 kx1 =1-x2/72

kx2 =1-(x2/42)(1-x2/72))

kx3 =1-(x2/20)(1-(x2/42)(1-x2/72)))

kx4 =1-(x2/6)(1-(x2/20)(1-(x2/42)(1-x2/72))) X =32 768*x KX1 =32 768*kx1 KX2 =32 768*kx2 KX3 =32 768*kx3 KX4 =32 768*kx4 Y =32 768*sin(x)

X、KX1、KX2、KX3、KX4、Y即为相应小数的Q15格式。 X2=(32 768*x)2=32 768*(32 768*x2)

2

D_X=32 768*x= (2*X2)/65 536

D_X即为X2Q15格式,2*X2将Q30调整为Q31,要移出多余的符号位,只需把frct位设成1即可,除以65536将Q31调整为Q15,只需取累加器高十六位即可,余下相同。 KX1=32 768*kx1=32 768-x2*S1

=(32 768*65 536-32 768*x2*2*S1)/65 536 =(32 768*65 536-D_X*S1*2)/65 536 KX2=32 768*kx2=32 768-(x2/42)*32 768*(1-x2/72) =32 768-(x2/42)*KX1

=(32 768*65 536-32 768*x2*2*KX1/42)/65 536 =(32 768*65 536- D_X *KX1*2/42)/65 536

=(32 768*65 536-((D_X*KX1*2)/65 536)*32 768*2/42)/65 536 =(32 768*65 536-((D_X*KX1*2)/65 536)*S2*2)/65 536 KX3=32 768*kx3

=32 768-(x2/20)*32 768*(1-(x2/42)(1-x2/72)))

- 27 -

DSP原理与应用实验

=32 768-(x2/20)* KX2

=(32 768*65 536-32 768*x2*2*KX2/20)/65 536 =(32 768*65 536- D_X * KX2*2/20)/65 536

=(32 768*65 536-( D_X * KX2*2/65 536)*S3*2)/65 536 KX4=32 768*kx4

=32 768-(x2/6)*32 768*(1-(x2/20)(1-(x2/42)(1-x2/72))) =32 768-x2/6*KX3

=(32 768*65 536-(D_X*KX3*2/65 536)*S4*2)/65 536

Y=sin(x)*32 768=x*KX4=(2*32 768*x*KX4)/65 536=X*KX4*2/65 536

计算sin(x)的程序流程图如图3-1所示。

输入X

计算D_X

计算Y 计算KX1 计算KX2 计算KX3 计算KX4

返回

图 3-1 计算sin(x)程序流程图 cos(x)的算法与流程图和sin(x)相似,请读者参照sin(x) 的算法与流程图研究,这里不再赘述。

2. 产生正弦波的方法

利用倍角三角公式sin(2x)=2sin(x)cos(x)计算0到π/2正弦值,再利用sin(x)= sin(π-x)和sin(x)= -sin(π+x)得到0到2π正弦值。在本实验中计算720个点从0到2π正弦值,如

- 28 -

正弦波信号产生

果读者需要更多点数,只需对程序进行简单修改即可。

一个正弦信号可表示为:

y=A·sin(2πf·t)

对其离散化:

y=A·sin(2πf·N·ΔT), N=0,1,2,3……

(3.4)

(3.3)

ΔT为D/A转换时间间隔,D/A转换率fs=1/ΔT,信号周期T=ΔT·L=1/f,L为正整数,f=1/(ΔT·L),则

y=A·sin(2π(1/ΔT·L)·N·ΔT)= A·sin(2πN/L) (3.5)

信号是以L为周期的周期函数,只要知道所生成信号频率和D/A转换率就可以求出L。例如:若生成信号频率为100Hz信号,幅值为0.5,D/A转换率为100000次每秒,则L=1/(f·ΔT)=100,即一个信号周期输出100个点;若生成信号频率为500Hz信号,幅值为1,D/A转换率为100000次每秒,则L=1/(f·ΔT)=20,即一个信号周期输出20个点。本实验只使用软件仿真,如需要硬件输出,则要加上定时器和D/A转换器。

3.1.5 实验步骤

参照第1章1.2.5节和1.2.6节中的实验步骤,进行建立工程文件、源文件和命令文件,输入3.1.6程序清单参考中给出的内容,再添加文件到工程、编译工程和装载输出文件等操作,这些步骤完成之后,再观察输出的正弦波形。以下是观察程序运行到不同的位置时输出波形的操作步骤。

1) 分别在程序中的loop1、loop2和loop3三处设置断点,如图3-2所示。

图 3-2 在程序中的loop1、loop2、loop3三处设置断点

2) 从主菜单中选择选择View→Graph→Time/Frequency命令,如图3-3所示,

将会打开图形属性对话框。

- 29 -

DSP原理与应用实验

图 3-3 用于打开图形属性对话框的命令

3)

出现的图形属性对话框如图3-4所示。

图 3-4 图形属性对话框

4) 点击图标或按F5键,程序运行到loop1处将会停下来,如图 3-5所示,这

时你会看到一个黄色箭头刚好指到程序的loop1处。

图 3-5 程序运行到loop1处

5) 在程序运行之前观察波形,如图3-6(a)所示,没有波形输出;点击图标或

按F5键,程序运行到loop1处停下来,再观察输出波形,如图 3-5(b)所示,得到1/4周期的正弦波形;运行到loop2处,得到如图3-6(c)所示半个周期

- 30 -

正弦波信号产生

的正弦波形,这是程序中利用sin(x)= sin(π-x)得到的0到π正弦值结果;运行到loop3处,得到了一个周期完整的正弦波形,如图 3-6(d)所示,这是程序中利用sin(x)= -sin(π+x)得到的0到2π正弦值结果。

图 3-6 (a)

图 3-6 (b)

图 3-6 (c)

图 3-6 (d) 图 3-6 观察程序运行到不同位置时输出正弦波形的变化

6) 打开图形属性对话框,在对话框中修改相应的参数,点击OK确认,如图3-7

所示。

图3-7 在图形属性对话框中修改相应的参数

7) 再将程序运行到loop4处,得到如图3-8所示的多周期正弦波图形。由于图形

纵坐标上的幅度值为0.5,横坐标上的时间单位为s,因此这是频率值为100Hz的正弦信号。

- 31 -

DSP原理与应用实验

图3-8 幅度值为0.5 、频率值为100Hz的正弦信号

8) 把程序内信号频率语句“F .set 100”中的100改为500,幅值系数语句“Ax_v .set

50*32768/100”中的50改为100,重新编译工程和装载输出文件,然后打开图形属性对话框,再在对话框中修改相应的参数,如图3-9所示。

图3-9 再在图形属性对话框中修改相应的参数

9) 取消所有断点,运行程序到loop4处,得到如图3-10所示的波形图。从图形上

可以看出,这是一个幅度值为1且频率为500Hz的正弦信号。

图3-10幅度值为1频率值为500Hz的正弦信号

- 32 -

正弦波信号产生

3.1.6程序清单参考

1. 产生正弦波的sinwave.asm文件

.title \"sin_wave.asm\" .mmregs .def _c_int00 .bss L,1 .bss K,1 .bss Ax,1 Fs .set 10000;A/D转换率 F .set 100 ;信号频率 L_v .set Fs/F ;每个周期输出点数 K_v .set 720 ;预先计算点数 Ax_v .set 50*32768/100 ;幅值系数 sin_x .usect \"sin_x\K_v sin_wave .usect \"sin_wave\d_xs .usect \"sin_vars\d_squr_xs .usect \"sin_vars\d_temp_s .usect \"sin_vars\d_sinx .usect \"sin_vars\d_l_s .usect \"sin_vars\d_xc .usect \"cos_vars\d_squr_xc .usect \"cos_vars\d_temp_c .usect \"cos_vars\d_cosx .usect \"cos_vars\d_l_c .usect \"cos_vars\STACK .usect \".stack\ 200h SYSSTACK .usect \".sysstack\200h k_theta .set (314159265/K_v)*32767/100000000 ;theta=(pi/720)*32768 (0.25 deg) .data table_s: .word 01c7h,030bh,0666h,1556h table_c: .word 0249h,0444h,0aabh,4000h **************************************************************************** * This function is the main program that call the sub-functions * * evaluated the sine and cosine of an angle ,which generated sine-wave. * ****************************************************************************/ .text

- 33 -

DSP原理与应用实验

_c_int00: amov #STACK+100h,xsp amov #STACK+200h,xssp mov #0,mmap(imr0) mov #0,mmap(imr1) bclr AR3LC mov #k_theta,ar0 mov #0,ar1 amov #sin_x,xar6 mov #K_v/4,mmap(brc0) rptb loop1-1 mov mmap(ar1),ac0 mov ac0<<#0,*(#d_xs) mov ac0<<#0,*(#d_xc) call sinx call cosx amov #d_sinx,xar3 amov #d_cosx,xar4 bset frct; mpym *ar3,*ar4,ac0 mov hi(ac0<<#1),*ar6+ amar *ar1+0 loop1: amov #sin_x+K_v/4-1,xar7 mov #K_v/4-2,mmap(brc0) rptb loop2-1 mov *ar7-,*ar6+ loop2: mov #K_v/2,mmap(brc0) amov #sin_x,xar7 rptb loop3-1 mov *ar7+,ac0 neg ac0 mov ac0<<#0,*ar6+ loop3: nop amov #sin_x, XAR3 amov #sin_x, XAR5 bclr sxmd bclr frct amov #0,ar1 ;N amov #L,xar2 ;L - 34 -

;sin91(deg)--sin179(deg) 正弦波信号产生

mov #L_v,*ar2+ mov #K_v,*ar2+ ;K=720 mov #Ax_v,*ar2+ ;Ax amov #sin_wave,xar4 mov #2000,mmap(brc0) rptb loop4-1 ;loop bclr frct mov ar1,hi(ac0) ;N sftl ac0,#-16,ac0 ;取N/L余数 amov #L,xar2 rpt #15 subc *ar2,ac0 amov #K,ar2 mpym *ar2,ac0,ac0;720*N amov #L,xar2 rpt #15 subc *ar2,ac0;720*N/L mov #0ffffh,ac1 and ac1,ac0; amar *ar2+;K rpt #15 subc *ar2,ac0 ;取余数 mov hi(ac0),ar5 add ar3,ar5 amov #Ax,xar2 bset frct mpym *ar2,*ar5,ac0 mov hi(ac0),*ar4+ amar *ar1+ loop4: nop b loop4 **************************************************************************** * This function is a sub-function that evaluated the sine of an angle * * suing the Taylor series expansion. * *****************************************************************************/ sinx: bset frct

- 35 -

DSP原理与应用实验

amov #table_s,xar3 amov #d_xs,xar2 amov #d_l_s,xar4 mov #7fffh,*ar4 sqrmr *ar2+,ac0 mov *ar4<<#16,ac1 ::mov hi(ac0),*ar2 masmr t3=*ar2+,*ar3+,ac1,ac0 mpy t3,ac0,ac0 mov hi(ac0),*ar2 masmr *ar2-,*ar3+,ac1,ac0 mpym *ar2+,ac0,ac0 mov hi(ac0),*ar2 masmr *ar2-,*ar3+,ac1,ac0 mpym *ar2+,ac0,ac0 mov hi(ac0),*ar2 masmr *ar2-,*ar3+,ac1,ac0 amov #d_xs,xar5 mpym *ar5,ac0,ac0 mov hi(ac0),*(#d_sinx) ret *****************************************************************************/ * This function is a sub-function that evaluated the cosine of an angle * * suing Sthe Taylor series expansion. * *****************************************************************************/ cosx: bset frct amov #d_xc,xar2 amov #d_l_c,xar4 mov #7fffh,*ar4 sqrmr *ar2+,ac0 mov *ar4<<#16,ac1 ::mov hi(ac0),*ar2 ; masmr t3=*ar2+,*ar3+,ac1,ac0 mpy t3,ac0,ac0; mov hi(ac0),*ar2; masmr *ar2-,*ar3+,ac1,ac0 mpym *ar2+,ac0,ac0 - 36 -

正弦波信号产生

mov hi(ac0),*ar2 masmr *ar2-,*ar3+,ac1,ac0 sfts ac0,#-1 neg ac0 mpym *ar2+,ac0,ac0 amar *ar2+ add *ar4,16,ac0 mov hi(ac0),*ar2 ret .end 2. 产生正弦波的sinwave.cmd文件

-stack 200h /* PRIMARY STACK SIZE */ -sysstack 0x200h /* SECONDARY STACK SIZE */ MEMORY { PAGE 0: RAM0 : o=0200h, l=1800h RAM1 : o=2000h, l=1000h RAM2 : o=3000h, l=1000h RAM3 : o=4000h, l=1000h RAM4 : o=5000h, l=2000h RAM5 : o=8000h, l=2000h } SECTIONS { .text : > RAM0 PAGE 0 .data: > RAM1 PAGE 0 .bss: > RAM2 PAGE 0 .stack: > RAM3 PAGE 0 .sysstack: > RAM3 PAGE 0 sin_vars: > RAM4 PAGE 0 sin_wave: > RAM5 PAGE 0 cos_vars: > RAM4 PAGE 0 sin_x: align (1024) {} > RAM4 PAGE 0 }

- 37 -

DSP原理与应用实验

3.2 两种频率的正弦波叠加信号实验

3.2.1实验目的

   

学习一般算法在数字信号处理器上的实现;

进一步加深对C55x DSP的CCS集成仿真环境认识; 了解C55x DSP的查表编程方法; 学习通过计算产生混频波形;

3.2.2实验设备

 PC兼容机一台;操作系统为Windows2000 (或WindowsNT、Windows98、WindowsXP);  计算机安装CCS 5000或CCS 3.1。

3.2.3实验要求

使用CCS集成仿真环境,完成建立工程、源文件、命令文件,保存和添加文件到工程,进行编译、链接、运行和调试等操作。使用观察窗口观察寄存器和存储器空间的内容以及输出波形的时域和频域图等。

3.2.4实验原理

任意周期信号都可以表示成多个不同频率正弦信号的叠加,如果已知一个信号由哪几个信号组成以及每个信号的频率、幅值、初始角,就可以进行信号的合成。本实验是用两个不同频率的正弦信号,分别设为F1(t)和F2(t),叠加合成一个新的信号F(t),则有:

F(t)= F1(t)+F2(t)

=A1*sin(2π*f1*t+1)+ A2*sin(2π*f2*t+2) (3.6)

在这里1、2为两个不同频率的正弦信号的初始相位,假设我们取为0;f1、f2分别是这两个信号的频率;A1、A2分别是这两个信号的振幅值。

因为1/f1 =ΔT*L1,1/f2 =ΔT*L2,ΔT表示D/A转换的时间间隔,L1、L2分别表示采样频率(fs)和信号频率(f1或f2)的比值,D/A转换速率为fs=1/ΔT,转换时间为t=N*ΔT,N=0,1,2,3,…

F(N*ΔT) = A1*sin(2π*N/L1)+ A2*sin(2π*N/L2) (3.7)

例如:要产生一个F(t)=0.6*sin(2π*100*t)+ 0.2*sin(2π*1000*t)的信号,D/A转换率fs =10000,则L1=fs/ f1=100,L2=fs/ f2=10。

3.2.5实验步骤

参照第1章1.2.5小节和1.2.6小节中的实验步骤,进行建立工程文件、源文件和命令文件,输入3.2.6小节程序清单参考中给出的内容,再完成添加文件到工程、编译工程和装载输出文件这些步骤。

- 38 -

正弦波信号产生

1.观察信号时域图

打开图形属性对话框,在对话框中修改相应的参数,如图3-12所示,点击OK确认。

图3-12 在图形属性对话框中设置时域参数

再将程序运行到loop4处,在时域图观察窗口中得到如图3-13所示的波形图。

图3-13 在观察窗口中看到的两个正弦信号叠加的时域波形图

2.观察信号频域图

打开图形属性对话框,在对话框中修改相应的参数,即把图3-12中最上面一项Display Type中的Single Time时域,改为FFT Magnitude频域,再把上面第二项Graph Title中的sin_add Time改为sin_add FFT,点击OK确认,得到如图3-14所示的图形属性对话框。在频域图观察窗口中将会得到如图3-15所示的波形图,从图上可以看到两个信号相对应的幅度值和频率值。

- 39 -

DSP原理与应用实验

图3-14 在图形属性对话框中设置频域参数

图3-15 内存数据频域图

请读者自己修改程序中F1、F2以及Ax_v1、Ax_v2的值。其中F1为信号1的频率,F2为信号2的频率,F1和F2这两个信号频率都应该小于5000;Ax_v1是信号1的幅值,Ax_v2是信号2的幅值,在CCS中表达式不能有小数,如0.5*32768是不合法的,应写成5*32768/10,为了防止溢出,Ax_v1和Ax_v2的值都应该小于0.5。修改完毕后,重新编译工程,装载输出文件,再将程序运行到loop4处,观察时域图和频域图的变化。

3.保存内存中的数据

从主菜单中选择File→Data→Save,将弹出Store Data存储数据对话框,如图3-16所示。在对话框中选择好相应的路径,输入文件名,再点击“保存”。保存好的数据以后可以通过从主菜单中选择File→Data→Load载入到内存中。

图3-16 保存数据对话框

- 40 -

正弦波信号产生

点击完保存后,将弹出Storing Memory into File对话框,如图3-17所示。在(a)图中,你可以在Address域输入具体的地址或地址的标号,我们输入标号sin_wave,系统将自动地完成把相应的标号换算成其所在地址的数据,点击OK确认。在(b)图中,在Length域输入长度,在Page域选择DATA,表示数据地址的长度是以16位为单位计算的,例如这里1024长度的内存即为1024*16bit,点击OK确认,完成数据保存。

(a) Storing Memory into File (b) Storing Memory into File

图3-17 “Storing Memory into File”的对话框

以后可以通过在主菜单中选择File→Data→Load装入数据。

3.2.6程序清单参考

1. 产生正弦波叠加的sin_add.asm文件

.title \"sin_add.asm\" .mmregs .def _c_int00 .bss L1,1 .bss Ax1,1 .bss L2,1 .bss Ax2,1 .bss K,1 Fs .set 10000 ;A/D转换率 F1 .set 100 ;信号1频率 F2 .set 1000 ;信2号频率 L_v1 .set Fs/F1 ;信号1每个周期输出点数 Ax_v1 .set 60*32768/100 ;信号1幅值系数 L_v2 .set Fs/F2 ;信号2每个周期输出点数 Ax_v2 .set 20*32768/100 ;信号2幅值系数 K_v .set 720 ;预先计算点数 sin_x .usect \"sin_x\K_v sin_wave .usect \"sin_wave\d_xs .usect \"sin_vars\

- 41 -

DSP原理与应用实验

d_squr_xs .usect \"sin_vars\d_temp_s .usect \"sin_vars\d_sinx .usect \"sin_vars\d_l_s .usect \"sin_vars\d_xc .usect \"cos_vars\d_squr_xc .usect \"cos_vars\d_temp_c .usect \"cos_vars\d_cosx .usect \"cos_vars\d_l_c .usect \"cos_vars\STACK .usect \".stack\ 200h SYSSTACK .usect \".sysstack\200h k_theta .set (314159265/K_v)*32768/100000000;theta=(pi/K_v)*32768 (0.25 deg) .data table_s: .word 01c7h,030bh,0666h,1556h table_c: .word 0249h,0444h,0aabh,4000h **************************************************************************** * This function is the main program that call the sub-functions * * evaluated the sine and cosine of an angle ,which generated sine-wave. * ****************************************************************************/ .text _c_int00: amov #STACK+100h,xsp amov #STACK+200h,xssp mov #0,mmap(imr0) mov #0,mmap(imr1) bclr AR3LC mov #k_theta,ar0 mov #0,ar1 amov #sin_x,xar6 mov #K_v/4,mmap(brc0) rptb loop1-1 mov mmap(ar1),ac0 mov ac0<<#0,*(#d_xs) mov ac0<<#0,*(#d_xc) call sinx call cosx amov #d_sinx,xar3 - 42 -

正弦波信号产生

amov #d_cosx,xar4 bset frct; mpym *ar3,*ar4,ac0 mov hi(ac0<<#1),*ar6+ amar *ar1+0 loop1: amov #sin_x+K_v/4-1,xar7 ;sin91(deg)--sin179(deg) mov #K_v/4-2,mmap(brc0) rptb loop2-1 mov *ar7-,*ar6+ loop2: mov #K_v/2,mmap(brc0) amov #sin_x,xar7 rptb loop3-1 mov *ar7+,ac0 neg ac0 mov ac0<<#0,*ar6+ loop3: nop amov #sin_x, XAR3 amov #sin_x, XAR5 bclr sxmd bclr frct amov #0,ar1 ;N amov #L1,xar2; L1 mov #L_v1,*ar2+ mov #Ax_v1,*ar2+;Ax1 mov #L_v2,*ar2+;L2 mov #Ax_v2,*ar2+;Ax2 mov #K_v,*ar2+;K=720 amov #sin_wave,xar4 mov #2048,mmap(brc0) rptb loop4-1 ;loop bclr frct ;; 计算 A1*sin(2πN/L1) mov ar1,hi(ac0);N sftl ac0,#-16,ac0;取N/L余数 amov #L1,xar2 rpt #15 subc *ar2,ac0 amov #K,ar2

- 43 -

DSP原理与应用实验

mpym *ar2,ac0,ac0;720*N amov #L1,xar2 rpt #15 subc *ar2,ac0;720*N/L; mov #0ffffh,ac1 and ac1,ac0; amar *ar2+;K rpt #15 subc *ar2,ac0;取余数 mov hi(ac0),ar5 add ar3,ar5 amov #Ax1,xar2 bset frct mpym *ar2,*ar5,ac2 ;; 计算 A2*sin(2πN/L2) bclr frct mov ar1,hi(ac0);N sftl ac0,#-16,ac0;取N/L余数 amov #L2,xar2 rpt #15 subc *ar2,ac0 amov #K,ar2 mpym *ar2,ac0,ac0;720*N amov #L2,xar2 rpt #15 subc *ar2,ac0;720*N/L; mov #0ffffh,ac1 and ac1,ac0; amar *ar2+;K rpt #15 subc *ar2,ac0;取余数 mov hi(ac0),ar5 add ar3,ar5 amov #Ax2,xar2 bset frct mpym *ar2,*ar5,ac0 ;; 计算 A1*sin(2πN/L1)+ A2*sin(2πN/L2) add ac2,ac0 mov hi(ac0<<#0),*ar4+ - 44 -

正弦波信号产生

amar *ar1+ loop4: nop b loop4 *****************************************************************************/ * This function is a sub-function that evaluated the sine of an angle * * suing the Taylor series expansion. * *****************************************************************************/ sinx: bset frct amov #table_s,xar3 amov #d_xs,xar2 amov #d_l_s,xar4 mov #7fffh,*ar4 sqrmr *ar2+,ac0 mov *ar4<<#16,ac1 ::mov hi(ac0),*ar2 masmr t3=*ar2+,*ar3+,ac1,ac0 mpy t3,ac0,ac0 mov hi(ac0),*ar2 masmr *ar2-,*ar3+,ac1,ac0 mpym *ar2+,ac0,ac0 mov hi(ac0),*ar2 masmr *ar2-,*ar3+,ac1,ac0 mpym *ar2+,ac0,ac0 mov hi(ac0),*ar2 masmr *ar2-,*ar3+,ac1,ac0 amov #d_xs,xar5 mpym *ar5,ac0,ac0 mov hi(ac0),*(#d_sinx) ret *****************************************************************************/ * This function is a sub-function that evaluated the cosine of an angle * * suing the Taylor series expansion. * *****************************************************************************/ cosx: bset frct amov #d_xc,xar2

- 45 -

DSP原理与应用实验

amov #d_l_c,xar4 mov #7fffh,*ar4 sqrmr *ar2+,ac0 mov *ar4<<#16,ac1 ::mov hi(ac0),*ar2 masmr t3=*ar2+,*ar3+,ac1,ac0 mpy t3,ac0,ac0; mov hi(ac0),*ar2; masmr *ar2-,*ar3+,ac1,ac0 mpym *ar2+,ac0,ac0 mov hi(ac0),*ar2 masmr *ar2-,*ar3+,ac1,ac0 sfts ac0,#-1 neg ac0 mpym *ar2+,ac0,ac0 amar *ar2+ add *ar4,16,ac0 mov hi(ac0),*ar2 ret .end 2. 产生正弦波叠加的sin_add.cmd命令文件

-stack 200h /* PRIMARY STACK SIZE -sysstack 0x200h /* SECONDARY STACK SIZE MEMORY { PAGE 0: RAM0 : o=200h,l=1800h RAM1 : o=2000h,l=1000h RAM2 : o=3000h,l=1000h RAM3 : o=4000h,l=1000h RAM4 : o=5000h,l=2000h RAM5 : o=8000h,l=2000h } SECTIONS { .text :> RAM0 PAGE 0 .data :> RAM1 PAGE 0 .bss :> RAM2 PAGE 0 .stack :> RAM3 PAGE 0 - 46 -

*/ */ 正弦波信号产生

.sysstack :> RAM3 PAGE 0 sin_vars :> RAM4 PAGE 0 sin_wave :> RAM5 PAGE 0 cos_vars: > RAM4 PAGE 0 sin_x: align (1024) { } > RAM4 PAGE 0 }

- 47 -

因篇幅问题不能全部显示,请点此查看更多更全内容