📄 zhy_215.asm
字号:
***************************************************************
* IIR滤波器的DSP的实现 *
* 直接形式2阶IIR滤波器实现 *
* 2阶IIR滤波器可以写成直接形式,其优点是在迭代运算中先衰减后 *
* 增益,系统的动态范围和鲁棒性都要好一些. *
* 直接形式的2阶IIR滤波器的差分方程为: *
* y(n) = B0*x(n) + B1*x(n-1) + B2*x(n-2) *
* + A1*y(n-1) + A2*y(n-2) *
* 在编程时,将变量和系数都存放在DARAM之中,并采用循环缓冲去的 *
* 寻址方式,共需开辟4个循环缓冲区,用来存放变量和系数 *
* X: x(n-2),x(n-1),x(n) *
* Y: y(n-2),y(n-1),y(n) *
* B: B2 ,B1 ,B0 *
* A: A2 ,A1 ,未用 *
*-------------------------------------------------------------*
* 程序来源:DSP技术与应用实例(赵红怡) Page 215 *
*-------------------------------------------------------------*
* .word 676*32768/10000 ;B2 *
* .word 1352*32768/10000 ;B1 *
* .word 676*32768/10000 ;B0 *
* .word -4142*32768/10000 ;A2 *
* .word 707*32768/10000 ;A1/2 *
* 该程序经验证能够正确的对信号进行滤波 *
* lvlishan *
* 2009 04 18 *
***************************************************************
.title "IIR3.ASM"
.mmregs
.def _c_int00
X .usect "X",3
x_i .usect "X",1
Y .usect "Y",3
B .usect "B",3
A .usect "A",3
y_out .usect "y_out",200
PA0 .set 0
PA1 .set 1
.data
table: .word 0 ;x(n-2)
.word 0 ;x(n-1)
.word 0 ;y(n-2)
.word 0 ;y(n-1)
.word 676*32768/10000;1*32768/10 ;B2
.word 1352*32768/10000;2*32768/10 ;B1
.word 676*32768/10000;3*32768/10 ;B0
.word -4142*32768/10000;5*32768/10 ;A2
.word 1414*32768/10000;-4*32768/10 ;A1
.text
_c_int00:
SSBX FRCT ;设置小数乘法
LD #x_i,DP
STM #y_out,AR6
STM #X,AR1 ;传送初始数据x(n-2),x(n-1)
RPT #1
MVPD #table,*AR1+
STM #Y,AR1 ;传送初始数据y(n-2),y(n-1)
RPT #1
MVPD #table+2,*AR1+
STM #B,AR1 ;传送系数B2,B1,B0
RPT #2
MVPD #table+4,*AR1+
STM #A,AR1 ;传送系数A2,A1
RPT #1
MVPD #table+7,*AR1+
STM #X+2,AR2 ;AR2 数据X指针
STM #A+1,AR3 ;AR3 系数A指针
STM #Y+1,AR4 ;AR4 数据Y指针
STM #B+2,AR5 ;AR5 系数B指针
STM #3,BK ;循环缓冲区的长度为3
STM #-1,AR0 ;数据计算的步进值为-1
IIR: NOP
NOP;add a input toggle probe point here 在此处增加输入探针
LD @x_i,A
NOP
NOP
STL A,*AR2
;PORTR PA1,*AR2 ;输入x(n)
;计算前向通道,从x(n)开始计算
; 数据X指针,系数B指针
MPY *AR2+0%,*AR5+0%,A ;x(n)*B0-->A
MAC *AR2+0%,*AR5+0%,A ;A + x(n-1)*B1 -->A
MAC *AR2,*AR5+0%,A ;A + x(n-2)*B2 -->A
;计算反向通道,先计算y(n-1),再计算y(n-2)
; 数据Y指针,系数A指针
MAC *AR4+0%,*AR3+0%,A ;A + y(n-1)*A1 -->A
MAC *AR4+0%,*AR3+0%,A ;A + y(n-2)*A2 -->A
MAR *AR3+0%
STH A,*AR4
STH A,*AR6+
NOP
NOP;add a output toggle probe point here 在此处增加输出探针
B IIR
;BD IIR
;PORTW *AR4,PA0
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -