⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhy_215.asm

📁 CCS环境下IIR滤波器的DSP的实现。直接形式2阶IIR滤波器实现
💻 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 + -