DSP应用课程设计Word格式.docx
《DSP应用课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《DSP应用课程设计Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
OR#08h,A
STLMA,IMR
LD#AA,DP
SSBXFRCT
ST#INIT_A,AA
ST#INIT_B,BB
ST#INIT_C,CC
LDAA,A
ADDCC,A
STLA,y2
LDAA,T
MPYy2,A
ADDBB,A
STHA,y1
STM#0h,TCR
RSBXINTM
again:
NOP
Bagain
_tint:
LDBB,T
MPYy2,A
LTDy1
MACAA,A
STHA,1,y1
NOP
int1_end:
NOP
RETE
.end
(2)编写中断向量程序
.mmregs
.ref_ret
.ref_c_int00
.ref_tint
.globalvector
.sect"
.int_table"
;
--------------------------------------------------------------------
interruptevectortable!
vector:
rsB_c_int00
nmiB__ret
sint17B__ret
sint18B__ret
sint19B__ret
sint20B__ret
.word0,0
sint21B__ret
sint22.word01000h
.word0,0,0
sint23.word0ff80h
sint24.word01000h
sint25.word0ff80h
sint26.word01000h
sint27.word0ff80h
sint28.word01000h
sint29.word0ff80h
sint30.word01000h
int0B__ret
int1B__ret
int2B__ret
tintB_tint
brint0B__ret
bxint0B__ret
trintB__ret
dmac1B__ret
int3B__ret
hpintB__ret
q26.word0ff80h
q27.word01000h
dmac4B__ret
dmac5B__ret
q30.word0ff80h
q31.word01000h
--------------------------------------------------------------------------
endofinterruptevectortable!
-------------------------------------------------------------------------
__retrete
(3)编写命令文件程序
MEMORY
{
PAGE0:
EXT_P:
ORIGIN=2000h,LENGTH=0200h
PAGE1:
INT_D:
ORIGIN=0060h,LENGTH=0080h
}
SECTIONS{
.text:
>
EXT_PEXT_PPAGE0
.int_table:
(EXT_PALIGN(128)PAGE(0))
.bss:
INT_DPAGE1
}
运行仿真,数据存储器空间使用情况和仿真输出波形如下,这正是设计所需要的余弦信号发生器的输出波形。
第二节线性时不变系统设计
一线性时不变系统的运算法则
当把图所示的信号系统h(t)看作普通传输函数时,只要该传输函数为一个线性时不变系统,就可用DSP硬件来实现h(t)。
设计时需要先将连续时间系统转变为离散时间系统,即将时间变量t用序列n来替换。
此时输出y(n)与输入信号x(n)和传输函数h(n)之间为卷积关系。
在频域,输出信号Y(z)为输入信号X(z)与系统的传输函数H(z)之积。
(1)编写汇编语言程序
.title"
convoluton.asm"
;
计算“y(n)=h(n)*x(n)”
.mmregs;
定义存储器映像寄存器
.def_c_int00;
定义主程序起始位置_c_int00
.bssindata,1;
为输入数据indata保留空间
.bssy,1;
为输入数据y保留空间
xn.usect"
xn"
4;
自定义4个单元空间的数据段xn
hn.usect"
hn"
自定义4个单元空间的数据段hn
.data;
table:
.word4,3,2,1;
定义系统传输函数值h0=4,h1=3,h2=2,h3=1
.text
STM#hn,AR1;
AR1指向hn
RPT#3;
从程序存储器table开始的地址传送
MVPDtable,*AR1+;
4个系数至数据空间hn开始的数据段
STM#xn+3,AR3;
AR3指向x(n-3)
STM#hn+3,AR4;
AR4指向h(n-3)
STM#4,BK;
设置循环缓冲区的长度BK=4
STM#-1,AR0;
设置下次运算的地址修正量AR0=-1
LD#indata,DP;
设置数据存储器页指针的起始页位置
hn3:
RPTZA,#3;
A清0,重复执行下条指令4次
MAC*AR3+0%,*AR4+0%,A;
对一个输入进行4次乘法累加和的卷积运算
STLA,@y;
保存结果的低字节到y(n)
BDhn3;
执行下条指令后循环
LDindata,B;
输入新的数据indata到B
STLB,*AR3+0%;
将B中的数据存到*AR3所指的最老单元
(2)编写命令文件程序
pt.obj
-opi.out
-mpi.map
MEMORY
PAGE0:
EPROM:
org=0080h,len=0080h
PAGE1:
SPRAM:
org=0060h,len=0010h
DPRAM:
org=0080h,len=0020h
SECTIONS
EPROMPAGE0
.data:
SPRAMPAGE1
xn:
align(8){}>
DPRAMPAGE1
hn:
运行软仿真时,在LDindata,B行设置断点和探针,将输入数据x(n)从convolution。
Dat文件输入到indata单元中。
输出波形如下
第三节信号检测系统设计
当雷达发送一串脉冲后,就开始接收被检测目标反射回来的信号,由于接收信号通常很弱,常被淹没在噪声当中。
为了从噪声中提取回波信号,可利用接收的回波信号与发射信号是同一电波的特点进行相关运算,只有自相关系数大的信号才可被认作为是发射信号的回波,而其它干扰信号的互相关系数会很小,将其忽略。
(1)编写C语言程序
#include<
stdio.h>
externintRxy1[8];
voidcompxy();
voidmain()
inti;
compxy();
for(i=1;
i<
=3;
i++){};
voidcompxy()
if(Rxy1[0]==Rxy1[6]&
&
Rxy1[1]
==Rxy1[5]&
Rxy1[2]==Rxy1[4])
if(Rxy1[3]>
Rxy1[2]&
Rxy1[2]>
&
Rxy1[1]>
Rxy1[0])
Rxy1[7]=Rxy1[3];
else
Rxy1[7]=0;
(2)编写汇编语言程序
correlation.asm"
.def_c_int00
.ref_Rxy1
.ref_compxy
.bssindata,1
.bss_Rxy1,8
xn.usect"
4
yn.usect"
yn"
.data
.word4,3,2,1
STM#xn,AR1
RPT#3
MVPDtable,*AR1+
STM#xn,AR3
STM#yn,AR4
STM#4,BK
STM#1,AR0
LD#indata,DP
rn3:
RPTZA,#3
MAC*AR3+0%,*AR4+0%,A
STLA,_Rxy1
CALL_compxy
DELAY@(_Rxy1+5)
DELAY@(_Rxy1+4)
DELAY@(_Rxy1+3)
DELAY@(_Rxy1+2)
DELAY@(_Rxy1+1)
DELAY@_Rxy1
BDrn3
LDindata,B;
设置断点和探针
STLB,*AR4+0%
.end
pu.obj
-opu.out
-mpu.map
EPROM:
SPRAM:
org=0060h,len=0020h
DARAM:
>
align(8){}>
DARAMPAGE1
yn:
现计算{x1}与{x2}=1011={{x1},{x2},{x1},{x1}}={1110010101010111100101110010}相关时,相邻码元间的干扰情况。
m_code_check.asm"
.def_c_int00
.def_Rxy1
.ref_xy_search_peak
.ref_Rxyout
.bssindata,1
.bss_Rxy1,13
7
.word1,1,1,0,0,0,1,0
STM#xn,AR1
RPT#6
STL#xn,AR3
LD#indata,DP
RPTZA,#6
STLA,_Rxy1
CALL__xy_search_peak
DELAY@(_Rxy1+11)
DELAY@(_Rxy1+10)
DELAY@(_Rxy1+9)
DELAY@(_Rxy1+8)
DELAY@(_Rxy1+7)
DELAY@(_Rxy1+6)
DELAY@(_Rxy1+1)
(2)编写C程序,完成峰值数据的选取。
externintRxy1[13];
externintRxyout;
voidxy_search_peak();
voidmain{
intI;
xy_search_peak();
for(i=0;
13;
i++){}
voidxy_search_peak()
If(Rxy1[7]==4)
Rxyout=Rxy1[7];
else
Rxyout=0;
(3)编写存储器分配的命令文件程序
运行上面的程序得到如下输出波形
第四节信号调制功能设计
二信号调制的设计方法
1、正弦信号的获取
这里采用查表法所获得的sin(k)数据来代替x(n)的高低电平,以此实现数字信号向模拟信号的转换。
设计利用MATLAB工具可方便地获取正弦信号数据。
设计一个产生半波正弦信号的MATLAB程序如下
t=0:
10:
180
y=sin(t*pi/180)
plot(t,y);
所得数据如下:
t=0102030405060708090
100110120130140150160170180
y=00.17360.34200.50000.64280.76600.86600.93970.98481.00000.98480.93970.86600.76600.64280.50000.34200.17360.0000
所得半波正弦信号如图6-12所示。
如果对sin(k)精度要求较高,可多取一些计算点。
根据正弦波的对称性,要得到0~180的数据输出,只需要利用输入0~90的数据即可,90~180的数据可通过对折0~90的图形得到。
同样,180~360的数据可通过对折0~180的图形获得。
这样只需要输入0~90的10个数据即可。
其程序如下:
half_pulse_modulate.asm"
.bssxn,1
.bssyn,1
sin.usect"
sin"
20
.word0
.word1736*32768/10000
.word3420*32768/10000
.word5000*32768/10000
.word6428*32768/10000
.word7660*32768/10000
.word8660*32768/10000
.word9397*32768/10000
.word9848*32768/10000
.word7FFFh
LD#xn,DP
STMsin,AR1
SSBXSXM
RPT#10
STM#sin,AR1
STM#sin+10,AR3
STM#9,AR2
cmplt:
LD*AR1+,A
CMPLA
STLA,*AR3+
BANZcmplt,*AR2-
bgn:
STM#9,AR2
LDxn,A
SUB#1,A
BCsend_0,ANEQ
send_1:
STM#sin,AR1
Bsend_a
send_0:
STM#sin+10,AR1
send_a:
MVDK*AR1+,yn
BANZsend_a,*AR2-
LTD*AR1-
send_b:
MVDK*AR1-,yn;
BANZsend_b,*AR2-
Bbgn
xinhao.obj
org=0080h,len=0180h
DARAM:
org=0080h,len=0100h
sin:
运行仿真,当循环输入信号x(n)={0,0,1,1,0,1}时运作程序,仿真输出波形y(n)=x(n)sin(k)和数据存储器使用情况如下。
根据这里所采用的y(n)=x(n)sin(k
)调制方式,对应的调解方法可利用第三节所述方法,以正,负半波sin(k)为模板,对输入序列y(n)做相关运算,与正半波信号自相关输出“1”,与负半波信号自相关输出“0”,具体设计不再重复。
第5节模拟电路功能设计
数字系统的DSP程序设计方法
由图6-14的电路结构所得到的数字系统结构有两种描述方式。
一种是按式(6-24)所表达的有理分式,用DSP硬件进行IIR滤波器设计所得到的是系统的传输函数。
另一种是按式(6-25)所表达的线性多项式,对该表达式求反Z变换得到差分方程,并利用移位公式Z[x(n-m)]←→
,可得y(k)=a1y[k-1]+b0x[k]+b1x[k-1](6-28)
当对y(k)施加冲激信号时,便得到递推公式
y(0)=b0
y
(1)=a1b0+b1
y(n)=a1y[n-1]=b0
(a1+1)(6-29)
这正是第一节所介绍的利用DSP设计信号发生器的方法,所不同的是,第一节所求的输出信号的波形是某已知函数,而这里所求的输出信号波形是根据某一具体电路求得,具有更广泛的意义。
即只要所求模拟电路信号发生器的输出波形能用式(6-29)的线性多项式表达,就可用数字方式采用DSP来实现功能。
1.用鉴频器电路作为信号发生器
用鉴频器电路作为信号发生器时,网络只加一个冲激信号,便可从输出端获得相关的响应信号。
。
由于本例不同于本章第一节的余弦信号的传输函数,其传输函数H(z)为一阶函数,不构成振荡条件,故输出只能是一个暂态响应。
(4)编写汇编语言程序
discriminator_oscillator.asm"
.global_c_int00,_tint,vector
.bssy1,1
LD#0,DP
SSBXINTM
LD#vector,A
AND#0FF80h,A
ANDM#007Fh,PMST
STM#10h,TCR
STM#2499,PRD
STM#20h,TCR
LDMIMR,A
OR#08h,A
LD#AA,DP
ST#7FAEh,AA
LD#0xF000,A
LDAA,T
MAC#0xF000,