dsp实验4.docx
- 文档编号:9089668
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:14
- 大小:467.59KB
dsp实验4.docx
《dsp实验4.docx》由会员分享,可在线阅读,更多相关《dsp实验4.docx(14页珍藏版)》请在冰豆网上搜索。
dsp实验4
实验四IIR滤波器的DSP实现
思考题:
对照参考程序,编写实现四阶或更高阶数的低通、高通、带通、带阻IIR数字滤波器的DSP程序并仿真。
提示:
滤波器系数一般通过MATLAB仿真得到。
4阶低通:
.title"IIR.asm"
.mmregs
.defstart
x4.usect"x",1
x3.usect"x",1
x2.usect"x",1
x1.usect"x",1
x0.usect"x",1
COEF.usect"COEF",9
Indata.usect"buffer",1
outdata.usect"buffer",1
*PA0.set10
*PA1.set1
.data
table
.word0;x(n-1)
.word0;x(n-2)
.word0;x(n-3)
.word0;x(n-4)
.word0;分子系数B3=0
.word15*32768/10000;B3=0.0015
.word78*32768/10000;分子系数B2=0.0078
.word25*32768/10000;分子系数B1=0.0025
.word0;分子系数B0=0
.word3783*32768/10000;分母系数A4=0.3783
.word-6258*32768/10000;分母系数A3=-1.8776/3
.word88705*32768/100000;分母系数A2=3.5482/4
.word-826775*32768/1000000;分母系数A1=-3.0372/4
.text
start:
SSBXFRCT
STM#x4,AR1
RPT#3
MVPD#table,*AR1+
STM#indata,AR5
STM#outdata,AR2
STM#COEF,AR1
RPT#8
MVPD#table+2,*AR1+
STM#x2,AR3
STM#COEF+9,AR4;AR4-->A1
MVMMAR4,AR1;保存地址值在AR1中
STM#5,BK;设置循环缓冲区长度
STM#-1,AR0;设置变址寻址步长
IIR2:
;PORTRPA1,*AR3;从PA1口输入数据x(n)
MVDD*AR5,*AR3;在这里设置断点与探针
LD*AR3+0%,16,A;计算反馈通道,A=x(n)
MAC*AR3,*AR4,A;A=x(n)+A1*x1
MAC*AR3,*AR4,A;A=x(n)+2A1*x1
MAC*AR3,*AR4,A;A=x(n)+3A1*x1
MAC*AR3+0%,*AR4-,A;A=x(n)+3*A1*x1+A1*x1
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+A2*x2
MAC*AR3,*AR4,A;A=x(n)+4*A1*x1+2*A2*x2
MAC*AR3,*AR4,A;A=x(n)+4*A1*x1+3*A2*x2
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2+A3*x3
MAC*AR3,*AR4,A;A=x(n)+4*A1*x1+4*A2*x2+2*A3*x3
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2+3*A3*x3
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2+2*A3*x3+A4*x4
STHA,*AR3;保存x0
MPY*AR3+0%,*AR4-,A;计算前向通道,A=B0*x0
MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1
MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2
MAC*AR3,*AR4-,A;B=B0*x0+B1*x1+B2*x2+B3*x3=y(n)
STHA,*AR3;保存y(n)
MVMMAR1,AR4;AR4重新指向A1
BDIIR2;循环
;PORTW*AR3,PA0;向PA0口输出数据
MVDD*AR3,*AR2;在这里设置断点与探针
nop
.end
高通:
*用双操作数指令实现二阶高通IIR滤波器*
*反馈通道:
x0=w(n)=x(n)+A1*x1+A2*x2+A3*x3+A4*x4前向通道:
y(n)=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4*
.title"IIR2.asm"
.mmregs
.defstart
x4.usect"x",1
x3.usect"x",1
x2.usect"x",1
x1.usect"x",1
x0.usect"x",1
COEF.usect"COEF",9
indata.usect"buffer",1
outdata.usect"buffer",1
*PA0.set10
*PA1.set1
.data
table.word0
.word0
.word0
.word0
.word0
.word2754*32768/10000;分子系数B4=0.2754
.word-551*32768/1000;分子系数B3/2=-0.551
.word413*32768/1000;分子系数B2/4=0.413
.word-551*32768/1000;分子系数B1/2=-0.551
.word2754*32768/10000;分子系数B0=0.2754
.word-762*32768/10000;分母系数A4=-0.0762
.word7415*32768/10000;分母系数A3=0.4844
.word-319*32768/1000;分母系数A2/4=-0.319
.word3925*32768/10000;分母系数A1/4=0.3925
.text
start:
SSBXFRCT
STM#x4,AR1
RPT#4
MVPD#table,*AR1+
STM#indata,AR5
STM#outdata,AR2
STM#COEF,AR1
RPT#8
MVPD#table+5,*AR1+
STM#COEF+8,AR4;AR4-->A1
MVMMAR4,AR1;保存地址值在AR1中
STM#5,BK;设置循环缓冲区长度
STM#-1,AR0;设置变址寻址步长
STM#x4,AR3
IIR2:
;PORTRPA1,*AR3;从PA1口输入数据x(n)
MVDD*AR5,*AR3;在这里设置断点与探针
LD*AR3+0%,16,A;计算反馈通道,A=x(n)
RPT#2
MAC*AR3,*AR4,A;3*A1*x1?
?
?
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1
RPT#2
MAC*AR3,*AR4,A;4*A2*x2?
?
?
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+5*A2*x2
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+5*A2*x2+4*A3*x3
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+5*A2*x2+4*A3*x3+A4*x4
STHA,*AR3;保存x0
MPY*AR3+0%,*AR4-,A;计算前向通道,A=B0*x0
MAC*AR3,*AR4,A;3*B1*x1
MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1
RPT#2
MAC*AR3,*AR4,A;4*A2*x2?
?
?
MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1+5*B2*x2
MAC*AR3,*AR4,A;3*B3*x3
MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1+5*B2*x2+4*B3*x3
MAC*AR3,*AR4,A;B=A=B0*x0+4*B1*x1+5*B2*x2+4*B3*x3+B4*x4=y(n)
STHA,*AR3;保存y(n)
MVMMAR1,AR4;AR4重新指向A1
BDIIR2;循环
;PORTW*AR3,PA0;向PA0口输出数据
MVDD*AR3,*AR2;在这里设置断点与探针
nop
.end
带阻:
.title"IIR2.asm"
.mmregs
.defstart
x4.usect"x",1
x3.usect"x",1
x2.usect"x",1
x1.usect"x",1
x0.usect"x",1
COEF.usect"COEF",9
indata.usect"buffer",1
outdata.usect"buffer",1
*PA0.set10
*PA1.set1
.data
table.word0
.word0
.word0
.word0
.word0
.word8004*32768/10000;分子系数B4=0.8004
.word-6475*32768/10000;分子系数B3/4=-0.6475
.word924*32768/1000;分子系数B2/4=0.924
.word-6475*32768/10000;分子系数B1/4=-0.6475
.word8004*32768/10000;分子系数B0=0.8004
.word-6411*32768/10000;分母系数A4=-0.6411
.word575*32768/1000;分母系数A3/4=0.575
.word-914*32768/1000;分母系数A2/4=-0.914
.word7202*32768/10000;分母系数A1/4=0.7202
.text
start:
SSBXFRCT
STM#x4,AR1
RPT#4
MVPD#table,*AR1+
STM#indata,AR5
STM#outdata,AR2
STM#COEF,AR1
RPT#8
MVPD#table+5,*AR1+
STM#COEF+8,AR4;AR4-->A1
MVMMAR4,AR1;保存地址值在AR1中
STM#5,BK;设置循环缓冲区长度
STM#-1,AR0;设置变址寻址步长
STM#x4,AR3
IIR2:
;PORTRPA1,*AR3;从PA1口输入数据x(n)
MVDD*AR5,*AR3;在这里设置断点与探针
LD*AR3+0%,16,A;计算反馈通道,A=x(n)
RPT#2
MAC*AR3,*AR4,A;3*A1*x1
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1
RPT#2
MAC*AR3,*AR4,A;3*A2*x2?
?
?
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2
RPT#2
MAC*AR3,*AR4,A;3*A3*x3?
?
?
MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3
MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3+A4*x4
STHA,*AR3;保存x0
MPY*AR3+0%,*AR4-,A;计算前向通道,A=B0*x0
RPT#2
MAC*AR3,*AR4,A;3*B1*x1?
?
?
MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1
RPT#2
MAC*AR3,*AR4,A;3*B2*x2?
?
?
MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1+4*B2*x2
RPT#2
MAC*AR3,*AR4,A;3*B3*x3?
?
?
MAC*AR3+0%,*AR4-,A;A=B0*x0+4*B1*x1+4*B2*x2+4*B3*x3
MAC*AR3,*AR4,A;B=A=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4=y(n)
STHA,*AR3;保存y(n)
MVMMAR1,AR4;AR4重新指向A1
BDIIR2;循环
;PORTW*AR3,PA0;向PA0口输出数据
MVDD*AR3,*AR2;在这里设置断点与探针
nop
.end
带通:
.title"IIR2.asm"
.mmregs
.defstart
x4.usect"x",1
x3.usect"x",1
x2.usect"x",1
x1.usect"x",1
x0.usect"x",1
COEF.usect"COEF",9
indata.usect"buffer",1
outdata.usect"buffer",1
*PA0.set10
*PA1.set1
.data
table.word0
.word0
.word0
.word0
.word0
.word201*32768/10000;分子系数B4=0.0201
.word0*32768/10000;分子系数B3=0
.word-402*32768/10000;分子系数B2=-0.0402
.word0*32768/10000;分子系数B1=0
.word201*32768/10000;分子系数B0=0.0201
.word-6411*32768/10000;分母系数A4=-0.6411
.word575*32768/10000;分母系数A3/4=0.575
.word-914*32768/1000;分母系数A2/4=-0.914
.word7202*32768/10000;分母系数A1=0.7202
.text
start:
SSBXFRCT
STM#x4,AR1
RPT#4
MVPD#table,*AR1+
STM#indata,AR5
STM#outdata,AR2
STM#COEF,AR1
RPT#8
MVPD#table+5,*AR1+
STM#COEF+8,AR4;AR4-->A1
MVMMAR4,AR1;保存地址值在AR1中
STM#5,BK;设置循环缓冲区长度
STM#-1,AR0;设置变址寻址步长
STM#x4,AR3
IIR2:
;PORTRPA1,*AR3;从PA1口输入数据x(n)
MVDD*AR5,*AR3;在这里设置断点与探针
LD*AR3+0%,16,A;计算反馈通道,A=x(n)
MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1
RPT#2
MAC*AR3,*AR4,A;3*A2*x2?
?
?
MAC*AR3+0%,*AR4-,A;A=x(n)+4*A1*x1+4*A2*x2
RPT#2
MAC*AR3,*AR4,A;3*A3*x3
MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3
MAC*AR3+0%,*AR4-,A;A=x(n)+A1*x1+4*A2*x2+4*A3*x3+A4*x4
STHA,*AR3;保存x0
MPY*AR3+0%,*AR4-,A;计算前向通道,A=B0*x0
MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1
MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2
MAC*AR3+0%,*AR4-,A;A=B0*x0+B1*x1+B2*x2+B3*x3
MAC*AR3,*AR4,A;B=A=B0*x0+B1*x1+B2*x2+B3*x3+B4*x4=y(n)
STHA,*AR3;保存y(n)
MVMMAR1,AR4;AR4重新指向A1
BDIIR2;循环
;PORTW*AR3,PA0;向PA0口输出数据
MVDD*AR3,*AR2;在这里设置断点与探针
nop
.end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- dsp 实验