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

📄 zhy_212.asm

📁 IIR滤波器的DSP的实现
💻 ASM
字号:
***************************************************************
*  IIR滤波器的DSP的实现                                       *
*  2阶IIR滤波器的双操作数指令实现                             *
*  IIR滤波器可用较少的阶数获得较好的选择性,所用的存储单元少,  *
*  运算次数少.但是在有限精度的运算中,可能出现不稳定现象.而且  *
*  选则性好,相位的非线性失真越严重.在线性相位要求不敏感的场合 *
*  (如语音通信)选用IIR滤波器较为合适                          *
*  对于2阶标准形式IIR滤波器由反馈通道和前向通道组成           *
*      反馈通道: x0   = w(n) = x(n) + A1*x1 + A2*x2           *
*      前向通道: y(n) = B0*x0 + B1*x1 + B2*x2                 *
*-------------------------------------------------------------*
*  程序来源:DSP技术与应用实例(赵红怡)     Page 212            *
*                                            lvlishan         *
*                                            2009 04 18       *
***************************************************************
		.title  "IIR2.ASM"
		.mmregs
		.def    _c_int00
x2      .usect  "x",1
x1      .usect  "x",1
x0      .usect  "x",1
x_i     .usect  "x",1
COEF    .usect  "COEF",5
y_out   .usect  "y_out",200
PA0     .set    0
PA1     .set    1
		.data
table:  .word   0                  ;x(n-2)
		.word   0                  ;x(n-0)
		.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
_c_int00:
		SSBX    FRCT          ;设置有符号小数乘法
		LD      #x_i,DP
		STM     #y_out,AR5    ;
		STM     #x2,AR1       ;传送初始化数据
		RPT     #1
		MVPD    #table,*AR1+
		STM     #COEF,AR1     ;传送滤波器系数
		RPT     #4
		MVPD    #table+2,*AR1+
		STM     #x2,AR3       ;AR3作为数据指针
		STM     #COEF+4,AR4   ;AR4作为系数指针
		MVMM    AR4,AR1       ;保存系数指针值在AR1中
		STM     #3,BK         ;设置循环缓冲区的长度
		STM     #-1,AR0       ;设置变址寻址步长
IIR2:   NOP
		NOP ;add a input toggle probe point here 在此处增加输入探针
		LD      @x_i,A
		STL     A,*AR3
		NOP
		;PORTR   PA1,*AR3        ;从PA1端口输入数据x(n)
		LD      *AR3+0%,16,A    ;x(n)*1 --> A
		MAC     *AR3,*AR4,A     ;A + x(n-1)*A1/2 --> A
		MAC     *AR3+0%,*AR4-,A ;A + x(n-1)*A1/2 --> A
		MAC     *AR3+0%,*AR4-,A ;A + x(n-2)*A2   --> A
		STH     A,*AR3          ;更新x0,此处的x0表示反馈通道所求的和
		MPY     *AR3+0%,*AR4-,A ;x0 * B0       --> A
		MAC     *AR3+0%,*AR4-,A ;A + x(n-1)*B1 --> A
		MAC     *AR3,*AR4-,A    ;A + x(n-2)*B2 --> A
		STH     A,*AR3          ;保存x(n-2)的单元暂存滤波器的输出结果
		STH     A,*AR5+
		MVMM    AR1,AR4         ;重新设置系数指针
		NOP ;add a output toggle probe point here 在此处增加输出探针
		NOP
		B       IIR2
		;BD      IIR2
		;PORTW   *AR3,PA0       ;这里使用的是循环缓冲区
		.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -