DSP应用课程设计.docx
《DSP应用课程设计.docx》由会员分享,可在线阅读,更多相关《DSP应用课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
![DSP应用课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/25/2d319446-bc7b-45a0-9e24-4eb8072ec4af/2d319446-bc7b-45a0-9e24-4eb8072ec4af1.gif)
DSP应用课程设计
DSP应用课程设计(论文)
设计(论文)题目DSP技术与应用
学院名称信息科学与技术学院
专业名称通信工程
学生姓名杜立华
学生学号201313070112
任课教师陈金鹰
设计(论文)成绩
教务处制
2015年12月9日
第一节信号源设计
Z变换与反Z变换运算的实现方法
信号发生器本身是没有输入信号的,其输出是按一定的周期,根据输出波形的函数式计算输出信号的数值,因而能连续的,周期性的产生输出信号。
其基本思路是:
首先,对欲产生的输出波形的函数表达式作Z变换,然后再作反Z变换,求出对应的差分方程的递推公式。
第二步,编写计算递推公式的初始化程序。
第三步,编写中断后的递推程序,利用中断程序周期性的计算新的输出值,从而获得欲求的基于DSP的信号源。
(1)编写计算递推公式的初始化程序
.title"cos(2PI*20000)wave"
.mmregs
.global_c_int00,_tint,vector
INIT_A.set79BAh
INIT_B.set0c000h
INIT_C.set0c323h
.bssy1,1
.bssy2,1
.bssAA,1
.bssBB,1
.bssCC,1
.text
_c_int00:
LD#0,DP
SSBXINTM
LD#vector,A
AND#0FF80h,A
ANDM#007Fh,PMST
ORPMST,A
STLMA,PMST
STM#10h,TCR
STM#2499,PRD
STM#20h,TCR
LDMIMR,A
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
NOP
NOP
nmiB__ret
NOP
NOP
sint17B__ret
NOP
NOP
sint18B__ret
NOP
NOP
sint19B__ret
NOP
NOP
sint20B__ret
.word0,0
sint21B__ret
.word0,0
sint22.word01000h
.word0,0,0
sint23.word0ff80h
.word0,0,0
sint24.word01000h
.word0,0,0
sint25.word0ff80h
.word0,0,0
sint26.word01000h
.word0,0,0
sint27.word0ff80h
.word0,0,0
sint28.word01000h
.word0,0,0
sint29.word0ff80h
.word0,0,0
sint30.word01000h
.word0,0,0
int0B__ret
NOP
NOP
int1B__ret
NOP
NOP
int2B__ret
NOP
NOP
tintB_tint
NOP
NOP
brint0B__ret
NOP
NOP
bxint0B__ret
NOP
NOP
trintB__ret
NOP
NOP
dmac1B__ret
NOP
NOP
int3B__ret
NOP
NOP
hpintB__ret
NOP
NOP
q26.word0ff80h
.word0,0,0
q27.word01000h
.word0,0,0
dmac4B__ret
NOP
NOP
dmac5B__ret
NOP
NOP
q30.word0ff80h
.word0,0,0
q31.word01000h
.word0,0,0
;--------------------------------------------------------------------------
;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;自定义4个单元空间的数据段hn
.data;
table:
.word4,3,2,1;定义系统传输函数值h0=4,h1=3,h2=2,h3=1
.text
_c_int00:
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所指的最老单元
.end
(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
{
.text:
>EPROMPAGE0
.data:
>EPROMPAGE0
.bss:
>SPRAMPAGE1
xn:
align(8){}>DPRAMPAGE1
hn:
align(8){}>DPRAMPAGE1
}
运行软仿真时,在LDindata,B行设置断点和探针,将输入数据x(n)从convolution。
Dat文件输入到indata单元中。
输出波形如下
第三节信号检测系统设计
当雷达发送一串脉冲后,就开始接收被检测目标反射回来的信号,由于接收信号通常很弱,常被淹没在噪声当中。
为了从噪声中提取回波信号,可利用接收的回波信号与发射信号是同一电波的特点进行相关运算,只有自相关系数大的信号才可被认作为是发射信号的回波,而其它干扰信号的互相关系数会很小,将其忽略。
(1)编写C语言程序
#include
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[1]>Rxy1[0])
Rxy1[7]=Rxy1[3];
else
Rxy1[7]=0;
}
(2)编写汇编语言程序
.title"correlation.asm"
.mmregs
.def_c_int00
.ref_Rxy1
.ref_compxy
.bssindata,1
.bss_Rxy1,8
xn.usect"xn",4
yn.usect"yn",4
.data
table:
.word4,3,2,1
.text
_c_int00:
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
(3)编写命令文件程序
pu.obj
-opu.out
-mpu.map
MEMORY
{
PAGE0:
EPROM:
org=0080h,len=0080h
PAGE1:
SPRAM:
org=0060h,len=0020h
DARAM:
org=0080h,len=0020h
}
SECTIONS
{
.text:
>EPROMPAGE0
.data:
>EPROMPAGE0
.bss:
>SPRAMPAGE1
xn:
align(8){}>DARAMPAGE1
yn:
align(8){}>DARAMPAGE1
}
现计算{x1}与{x2}=1011={{x1},{x2},{x1},{x1}}={1110010101010111100101110010}相关时,相邻码元间的干扰情况。
(1)编写汇编语言程序
.title"m_code_check.asm"
.mmregs
.def_c_int00
.def_Rxy1
.ref_xy_search_peak
.ref_Rxyout
.bssindata,1
.bss_Rxy1,13
xn.usect"xn",7
yn.usect"yn",7
.data
table:
.word1,1,1,0,0,0,1,0
.text
_c_int00:
STM#xn,AR1
RPT#6
MVPDtable,*AR1+
STL#xn,AR3
STM#yn,AR4
STM#4,BK
STM#1,AR0
LD#indata,DP
rn3:
RPTZA,#6
MAC*AR3+0%,*AR4+0%,A
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+5)
DELAY@(_Rxy1+4)
DELAY@(_Rxy1+3)
DELAY@(_Rxy1+2)
DELAY@(_Rxy1+1)
DELAY@_Rxy1
BDrn3
LDindata,B;设置断点和探针
STLB,*AR4+0%
.end
(2)编写C程序,完成峰值数据的选取。
#include
externintRxy1[13];
externintRxyout;
voidxy_search_peak();
voidmain{
intI;
xy_search_peak();
for(i=0;i<13;i++){}
}
voidxy_search_peak()
{
If(Rxy1[7]==4)
Rxyout=Rxy1[7];
else
Rxyout=0;
}
(3)编写存储器分配的命令文件程序
pu.obj
-opu.out
-mpu.map
MEMORY
{
PAGE0:
EPROM:
org=0080h,len=0080h
PAGE1:
SPRAM:
org=0060h,len=0020h
DARAM:
org=0080h,len=0020h
}
SECTIONS
{
.text:
>EPROMPAGE0
.data:
>EPROMPAGE0
.bss:
>SPRAMPAGE1
xn:
align(8){}>DARAMPAGE1
yn:
align(8){}>DARAMPAGE1
}
运行上面的程序得到如下输出波形
第四节信号调制功能设计
二信号调制的设计方法
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)精度要求较高,可多取一些计算点。
(1)编写汇编语言程序
根据正弦波的对称性,要得到0~180的数据输出,只需要利用输入0~90的数据即可,90~180的数据可通过对折0~90的图形得到。
同样,180~360的数据可通过对折0~180的图形获得。
这样只需要输入0~90的10个数据即可。
其程序如下:
.title"half_pulse_modulate.asm"
.mmregs
.def_c_int00
.bssxn,1
.bssyn,1
sin.usect"sin",20
.data
table:
.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
.text
_c_int00:
LD#xn,DP
STMsin,AR1
SSBXSXM
RPT#10
MVPDtable,*AR1+
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-
STM#9,AR2
LTD*AR1-
send_b:
MVDK*AR1-,yn;设置断点和探针
BANZsend_b,*AR2-
Bbgn
.end
(2)编写命令文件程序
xinhao.obj
-opi.out
-mpi.map
MEMORY
{
PAGE0:
EPROM:
org=0080h,len=0180h
PAGE1:
SPRAM:
org=0060h,len=0020h
DARAM:
org=0080h,len=0100h
}
SECTIONS
{
.text:
>EPROMPAGE0
.data:
>EPROMPAGE0
xn:
>SPRAMPAGE1
yn:
>SPRAMPAGE1
sin:
>DARAMPAGE1
}
运行仿真,当循环输入信号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)编写汇编语言程序
.title"discriminator_oscillator.asm"
.mmregs
.global_c_int00,_tint,vector
.bssy1,1
.bssAA,1
.text
_c_int00:
LD#0,DP
SSBXINTM
LD#vector,A
AND#0FF80h,A
ANDM#007Fh,PMST
ORPMST,A
STLMA,PMST
STM#10h,TCR
STM#2499,PRD
STM#20h,TCR
LDMIMR,A
OR#08h,A
STLMA,IMR
LD#AA,DP
SSBXFRCT
ST#7FAEh,AA
LD#0xF000,A
LDAA,T
MAC#0xF000,