1、实验五 IIR 滤波器设计的 DSP 实现一、实验目的1. 掌握二阶标准型 IIR 滤波器的 DSP 程序设计。2. 能设计用 IIR 滤波器对音频信号进行滤波的 DSP 程序。二、实验环境1.奔腾 IV 计算机2.Code Composer Studio (CCS)软件三、实验原理IIR 滤波器的差分方程为: NiMi inyanxby10)()()(其中,b i,ai,-滤波器系数; x(n-i)-滤波器在 i 时刻的输入;y(n-i)-i 时刻的输出。y(n)-滤波器的输出。4、实验内容1.二阶标准型 IIR 滤波器(1)系统框图反馈通道和前向通道的差分方程 :反馈: w(n) = x(
2、n) + a1w(n-1) + a2w(n-2) 前向: y(n) = b0w(n) + b1w(n-1)+ b2w(n-2) 计算步骤: 计算反馈通道; 计算前向通道; 输出结果 y(n); 重复循环。注:x0 单元有 3 个作用:存放 x(n),w(n)及 y(n)。需要注意的指令:需注意的指令:1)LTD- 装载-延时。语句: LTD Smem功能:T=Smem,(Smem+1)=Smem2)LD-(延时) 装载语句: LD Smem,16,dst功能:将 Smem 左移 16 位后装入 dst(2)示例设计一个二阶标准型低通滤波器,H(z)= ,输入信号:x(n)=07FFFH,0,0
3、,0,0,画出输出波形 z(n)及其幅频谱。存储单元分配:1)XN -5 个单元,存放输入数据。2)x0-暂存 x(n),w(n)或 y(n)。 x1-暂存 w(n-1)。x2-暂存 w(n-2)。3)系数表:B2,B1,B0,A2,A1(共 5 个单元)4) z-5 个单元,存放输出数据。;源程序 ch5p1.asm.mmregs.def aa.bss z,5XN .usect “XN“,5 ;输入数据单元x0 .usect “x“,1 ;暂存 x(n),w(n),y(n)的单元x1 .usect “x“,1 ;暂存 w(n-1)的单元x2 .usect “x“,1 ;暂存 w(n-2)的单
4、元B2 .usect “COEF“,1 ;滤波系数表数据单元B1 .usect “COEF“,1B0 .usect “COEF“,1 A2 .usect “COEF“,1 A1 .usect “COEF“,1.data tableXN: .word 07FFFH,0,0,0,0 ;输入数据tablex: .word 0,0 ;w(n-1)和 w(n-2)初始值tableBA: .word 676*32768/100000 ;系数表/10.word 1352*32768/100000 .word 676*32768/100000.word 4142*32768/100000.word -1414
5、2*32768/100000.text aa: LD #x0,DP ;设置数据页:DP=1SSBX FRCT ;小数运算STM #XN,AR1 RPT #4MVPD #tableXN,*AR1+ ; 将程序存储空间中标号为 ”tableXN”的地址里的数据存入 AR1 所指向的数据存储空间,且地址 AR1 加 1。 STM #x1,AR1RPT #1MVPD #tablex,*AR1+ ; 将程序存储空间中标号为 ”tablex”的地址里的数据存入AR1 所指向的数据存储空间,且地址 AR1 加 1。 STM #B2,AR1214.02.)(67zzRPT #4 MVPD #tableBA,*
6、AR1+ ; 将程序存储空间中标号为”tableBA”的地址里的数据存入 AR1 所指向的数据存储空间,且地址 AR1 加 1。 STM #z,AR2 ;AR2 指向 zSTM #5,AR4 ;AR4=5 (循环次数)STM #XN,AR3 ;AR3 指向 XN IIR1: LD #0,B ;B=0LD *AR3+,B ;将一个输入数据装入 BSTL B,x0 ;将 B 中的数据存入 x0LD x0,16,A ;将 x0 中的数据(x(n) 左移 16 位,装入 ALD x1,T ; T=(x1)MAC A1,A ;A=A+A1*(x1)LD x2,T ;T=(x2)MAC A2,A ;A=A
7、+A2*(x2)STH A,x0 ;将 A 中的数据(w(n)存入 x0;以上是反馈通道计算MPY B2,A ;A=B2*T 即 A=B2*(x2)=B2*w(n-2)LTD x1 ;T=(x1)=w(n-1),且(x1+1)=(x1),即 w(n-2)=w(n-1)MAC B1,A ;A=A+T*B1=A+w(n-1)*B1LTD x0 ;T=(x0)=w(n),且(x0+1)=(x0) 即 w(n-1)=w(n)MAC B0,A ;A=A+w(n)*B0;以上是前向通道计算STH A,*AR2+ ;将输出存入 AR2 指向的单元(z), 且 AR2 加 1BANZ IIR1,*AR4- ;
8、若 AR4 不等于 0 则跳到 IIR1,循环end:B end.end ;程序结束链接命令文件:ch5p1.cmd-e aa-m map.mapMEMORYPAGE 0:EPROM :org=04000H len=1000HPAGE 1:SPRAM :org=0060H len=0030HDARAM :org=0090H len=1380HSECTIONS.text : EPROM PAGE 0.data : EPROM PAGE 0.bss : SPRAM PAGE 1XN : align(8) DARAM PAGE 1x: align(8) DARAM PAGE 1COEF: align
9、(8) DARAM PAGE 1实验要求:1)在空格内填入注释,并运行程序 ch5p1.asm。2)观察内存单元,则滤波结果z= 3)分别按以下设置,画出 z 的时域波形及 。z 波形 z 幅频谱问:该滤波器是 低通 (低通/高通/ 带通/带阻)滤波器。2.音频信号的 IIR 滤波设一个音频信号由 10Hz 及 40Hz 的正弦波组成,取样频率 fs=100Hz,即x(n)=sin(2*10/100 n) +sin(2*40/100 n),用上述滤波器对 x(n)进行 IIR 滤波。1修改程序 ch5p1.asm。2画 x(n)(内存单元:XN) 及输出波形 z(n) (内存单元:z)。3画
10、x(n)及 z(n)的幅频谱,体会滤波原理。提示:x(n)的数据是用下列 Matlab 程序产生的:f1=10;f2=40;fs=100;n=0:1:99;x=sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs);plot(n/fs,x);x(n)在 MATLAB 中的波形:将 x 乘以 32768,再除以 10,即可得到 DSP 程序的输入数据 XN,则在上述程序中,将“tableXN:”中的输入数据改为 :.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11
11、756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000 .word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-1
12、1756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-1
13、1756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-1
14、1756*32768/100000 将链接命令文件 ch5p1.cmd 改为:-e aa-m map.mapMEMORYPAGE 0:EPROM :org=04000H len=1000HPAGE 1:SPRAM :org=0060H len=0130HDARAM :org=0190H len=1380HSECTIONS.text : EPROM PAGE 0.data : EPROM PAGE 0.bss : SPRAM PAGE 1XN : align(128) DARAM PAGE 1x: align(8) DARAM PAGE 1COEF: align(8) DARAM PAGE 1X
15、N 波形 XN 幅频谱z 波形 z 幅频谱问:再怎样修改该程序,完成滤波功能?将修改的程序语句写在下方:.mmregs.def aa.bss z,5XN .usect “XN“,100 x0 .usect “x“,1 x1 .usect “x“,1 x2 .usect “x“,1 B2 .usect “COEF“,1 B1 .usect “COEF“,1B0 .usect “COEF“,1 A2 .usect “COEF“,1 A1 .usect “COEF“,1.data tableXN: .word 0,11756*32768/100000,0,19021*32768/100000,0.w
16、ord 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000 .word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.
17、word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.
18、word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.word 0,0,-19021*32768/100000,0,-11756*32768/100000.word 0,11756*32768/100000,0,19021*32768/100000,0.
19、word 0,0,-19021*32768/100000,0,-11756*32768/100000 tablex: .word 0,0 tableBA: .word 676*32768/100000 .word 1352*32768/100000 .word 676*32768/100000.word 4142*32768/100000.word -14142*32768/100000.text aa: LD #x0,DP SSBX FRCT STM #XN,AR1 RPT #99MVPD #tableXN,*AR1+ STM #x1,AR1RPT #1MVPD #tablex,*AR1+
20、STM #B2,AR1RPT #99 MVPD #tableBA,*AR1+ STM #z,AR2 STM #100,AR4 STM #XN,AR3 IIR1: LD #0,B LD *AR3+,B STL B,x0 LD x0,16,A LD x1,T MAC A1,A LD x2,T MAC A2,A STH A,x0 MPY B2,A LTD x1 MAC B1,A LTD x0 MAC B0,A STH A,*AR2+ BANZ IIR1,*AR4- end:B end.end *3.设计思考题已知:x(n)=07FFFH,0,0,0,0,滤波系数: B2=0.6132,B1=-1.2
21、265,B0=0.6132, A2= 0.3821,A1= -1.0708。,设计实现该 2 阶标准型 IIR 滤波器的 DSP 程序,求滤波结果 z(n),画 z(n)及其幅频谱,问:该滤波器是低通还是高通滤波器?高通滤波器(注:将滤波系数*32768/10);源程序 ch5p2.asm.mmregs.def aa.bss z,5XN .usect “XN“,5 x0 .usect “x“,1 x1 .usect “x“,1 x2 .usect “x“,1 B2 .usect “COEF“,1 B1 .usect “COEF“,1B0 .usect “COEF“,1 A2 .usect “C
22、OEF“,1 A1 .usect “COEF“,1.data tableXN: .word 07FFFH,0,0,0,0 tablex: .word 0,0 tableBA: .word 6132*32768/100000 .word -12265*32768/100000 .word 6132*32768/100000.word 3821*32768/100000.word -10708*32768/100000.text aa: LD #x0,DP SSBX FRCT STM #XN,AR1 RPT #4MVPD #tableXN,*AR1+ STM #x1,AR1RPT #1MVPD #
23、tablex,*AR1+ STM #B2,AR1RPT #4 MVPD #tableBA,*AR1+ STM #z,AR2 STM #5,AR4 STM #XN,AR3 IIR1: LD #0,B LD *AR3+,B STL B,x0 LD x0,16,A LD x1,T MAC A1,A LD x2,T MAC A2,A STH A,x0 MPY B2,A LTD x1 MAC B1,A LTD x0 MAC B0,A STH A,*AR2+ BANZ IIR1,*AR4- end:B end.end ;链接命令文件 ch5p2.cmd-e aa-m map.mapMEMORYPAGE 0:EPROM :org=04000H len=1000HPAGE 1:SPRAM :org=0060H len=0030HDARAM :org=0090H len=1380HSECTIONS.text : EPROM PAGE 0.data : EPROM PAGE 0.bss : SPRAM PAGE 1XN : align(8) DARAM PAGE 1x: align(8) DARAM PAGE 1COEF: align(8) DARAM PAGE 1;z(n)波形:;z(n)的幅频谱: