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

📄 iir.c.txt

📁 用汇编设计的四阶椭圆低通IIR滤波器程序
💻 TXT
字号:
;四阶椭圆低通IIR滤波器
                 .mmregs  
                 .include    "main.inc"
iir_table_star   .sect       "iir_coff"
;第一个二阶基本节系数
                 .word    -26778      ;a2
                 .word     29529      ;a1/2,对大于1的系数定标
                 .word     19381      ;b2
                 .word    -23184      ;b1
                 .word     19381      ;b0
;第二个二阶基本节系数
                 .word    -30497      ;a2
                 .word     31131      ;a1/2,对大于1的系数定标
                 .word     11363      ;b2
                 .word    -20735      ;b1
                 .word     11363      ;b0
iir_table_end
iir_coff_table   .usect   "coff_iir",16
iir_d            .usect   "iir_vars",3*2
iir_y            .usect   "iir_vars",1
                 .def     iir_init
                 .def     iir_task
;初始化程序:用于初始化数据缓冲区和系数缓冲区
                 .sect    "iir"
iir_init:      STM  #iir_coff_table,AR1   ;AR1指向iir_coff_table
               RPT  #K_IIR_SIZE-1         ;将系数移到数据存储器
               MVPD #iir_table_start,*AR1+   
               STM  #iir_d,AR2            ;AR2指向iir_d
               RPTZ  A,*AR2+              ;使w(n),w(n-1),w(n-2)为0
;IIR滤波器处理程序
                 .sect  "iir"
iir_task      STM  #in_buf,AR3             ;AR3指向采样数据入口 
              STM  #out_buf.AR4            ;AR4指向数据输出口
              STM  #K_FRAME_SIZE-1,BRC      ;设置采样点的个数
              RPTB iir_filter_loop-1       ;由采样点的个数进行滤波
              LD   *AR3+,8,A               ;装载输入数据x(n)
iir_filter    STM  #iir_d+5,AR2            ;AR2指向w(n),w(n-1),w(n-2)
              STM  #iir_coff_table,AR1     ;AR1指向a2,a1/2,b2,b1,b0
              STM  #K_BIQUD-1,AR0          ;设定二阶基本节的个数
feedback_path:    MAC  *AR1+,*AR2-,A       ;A=x(n)+a2*w(n-2)
                  MAC  *AR1,*AR2,A         ;A=x(n)+a2*w(n-2)+a1*w(n-1)/2
                  MAC  *AR1+,*AR2-,A       ;A=x(n)+a2*w(n-2)+a1*w(n-1)
                  STH  A,*AR2+             ;w(n)=x(n)+a2*w(n-2)+a1*w(n-1)
                  MAR  *AR2+
forward_path:   MPY   *AR1+,*AR2-,A         ;A=b2*w(n-2)
                MAC   *AR1+,*AR2,A           ;A=b2*w(n-2)+b1*w(n-1)
                DELAY   *AR2-                ;w(n-2)=w(n-1)
eloop:         BANZD feedback_path,*AR0-     ;二阶基本节未计算完,则循环
               MAC   *AR1+,AR2,A             ;A=b2*w(n-2)+b1*w(n-1)+b0*w(n)
               DELAY  *AR2-                  ;w(n-1)=w(n)
               STH   A,iir_y
               LD     iir_y,2,A              ;定标输出数据
               STL   A,*AR4+                  ;存储滤波结果y(n)
iir_filter_loop:  RET
          .end

⌨️ 快捷键说明

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