1、无限脉冲响应数字滤波器(IIR)设计所谓的数字滤波,指的是输入、输出均为数字信号,通过一定运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分。数字滤波可分为无限脉冲响应(IIR)滤波和有限脉冲响应(FIR)滤波。本次试验利用 VISUAL DSP+ 软环境 SIMULATOR 模拟实现无限脉冲响应(IIR)数字信号处理。无限脉冲响应(IIR)的系统函数为:公式101()MrrNkkbzHZa即如果输入为X(Z),输出为Y(N),则:Y(Z)= X(Z)H(Z) ,即公式201()MrrNkkbzYZXa本试验中利用的公式是对上面的公式2对了相应的形式变化,利用中间变量 公式31()
2、NkkWZaz那么公式40()MrrYZbz因此,本次试验设计了一个4阶IIR滤波,其对应的公式3和公式4的时域公式如下:;公式5W(n)=x*scale+w(n-1)*a(-2)a+w(n-3)*a(-)a;公式6ybbb4b在本次设计中由于系数a4,a3,a2,a1,b4,b3,b2,b1都是用户自己初始化的时候给定的且均为常数,所以公式5和公式6也相应可以变为公式7和公式8:公式7(n)=x*scale+w(n-1)*a4(-2)3+w(n-)*a2(-4)1公式8 ybbbn*b其中x(n)是输入的数字序列。从公式5和公式6可知:只要我们设定设计需要的a4,a3,a2,a1,b4,b3
3、,b2,b1 ,以及初始化w(n-1), w(n-2), w(n-3), w(n-4),就可以得到我们所需要的滤波器了。通过本练习使学生加深对 IIR 的理解,加深对数字信号处理理论的理解。输入数据放在直接在数组 inputsN中给出,滤波器系数 a4,a3,a2,a1,b4,b3,b2,b1 按顺序a2,a4,b2,b4,a1,a3,b1,b3 存放在系数缓冲区 coeffs2*SECTIONS中,w(n-1), w(n-2), w(n-3), w(n-4)初始化存放在 delaylineSECTIONS(此处滤波器设计为因果滤波器,n#endif#include “cache_macros
4、.h“.section program;.global _main;/*Power up code */powerup:#ifdef _ADSPTS201_/*in the case of TS201, at the beginning of the program thecache must be enabled. The procedure is contained in thecache_enable macro that uses the refresh rate as input parameter-if CCLK=500MHz, refresh_rate=750-if CCLK=4
5、00MHz, refresh_rate=600-if CCLK=300MHz, refresh_rate=450-if CCLK=250MHz, refresh_rate=375*/cache_enable(750);/-Optional example to preload cache-j0 = j31 + coeffs; LC0 = 2;nop;nop;.align_code 4;ini_cache:xr3:0 = qj0+=0;.align_code 4;if NLC0E, jump ini_cache; qj0+=4 = xr3:0;/-#endifend_powerup:/* Sta
6、rt of code */_main:j1 = j31 + inputs; LC0 = N; /J1指向输入数据inputs.j2 = j31 + output; /J2指向输出数据 outputs.align_code 4;iir_loop:yr8 = j1+=1; /yr8=x(n)/read cycle counterini_cycle_count;/* Start of IIR code*/j0 = j31 + delayline; / j0指向delaylinek0 = k31 + coeffs; / k0指向coeffsr3:2 = lj0+=2; r7:6 = qk0+=4; /
7、r3:2=w(n-1) w(n-3) yr7:6=a4,a2 xr7:6=b4,b2r1:0 = lj0+=2; r5:4 = qk0+=4; /r1:0=w(n-2) w(n-4) yr5:4=a3,a1 xr5:4=b3,b1fr9 = r3 * r7; yr13 = scale; /yr9=w(n-1)*a4 xr9=w(n-1)*b4fr10 = r2 * r6; /yr10=w(n-3)*a2 xr10=w(n-3)*b2fr11 = r1 * r5; /yr11=w(n-2)*a3 xr11=w(n-2)*b3fr12= r0 * r4; fr9 = r9 + r10; /yr12
8、=w(n-4)*a1 yr9=w(n-1)*a4+w(n-3)*a2/xr12=w(n-4)*b1 xr9=w(n-1)*b4+w(n-2)*b2yfr8 = r8 * r13; lr1:0 = lshift r1:0 by -32; /yr8=x(n)*scale / w(n-4) is shifted out of the delay linefr10 = r11 + r12; lj31 + delayline+2 = yr3:2; /yr10=w(n-2)*a3+w(n-4)*a1/xr10=w(n-2)*b3+w(n-4)*b1/the delay line is savedyfr9
9、= r8 + r9; /yr1=x(n)*scale+w(n-1)*a4+w(n-3)*a2fr1 = r9 + r10; /yr1=x(n)*scale+w(n-1)*a4+w(n-3)*a2+w(n-2)*a3+w(n-4)*a1=w(n)/xr1= w(n-1)*b4+w(n-2)*b2+w(n-2)*b3+w(n-4)*b1/in this moment w(n) is introduced in the new delay linexr4 = yr1; /w(n) is passed in the X block/xr4=w(n)+w(n-1)*b4+w(n-2)*b2+w(n-2)
10、*b3+w(n-4)*b1=y(n)/the delayline is savedxfr4 = r4 + r1; lj31 + delayline = yr1:0;/* Done */read cycle counter and compute the programs cycle countcomp_cycle_count;/end of IIR program. Save y(n) into the output buffer.align_code 4;if NLC0E, jump iir_loop; j2+=1 = xr4;_main.end:_lib_prog_term:nop;nop
11、;nop;nop;2. 实验步骤 1) 调入程序启动运行 VisualDSP+,建立新工程,将位于将unit_2IIR 目录下的源文件IIR_flp32.asm 和 cache_macros.h 添加到工程中。 2)编译程序分析、理解源程序,在此基础上编译运行程序。可通过点击按钮命令或选择菜单命令 ProjectBuild Project 来完成编译,sessions 为 ADSP-TS201 ADSP-TS201 Rev. 1.0 Single Processor Simulator。4) 观察结果查看 inputs和 output的时域图和频谱图,并把 output的时域图和频谱图与exp
12、ected_output 的时域图和频谱图。也可以通过存储空间直接比较 output和expected_output的值。(参数的设定过程如练习一中所示)Data Sets Name Memory Address Count Stride Datainputs inputs TigerSharcMemoryinputs 30 1 float output output TigerSharcMemoryoutput 30 1 float3.实验结果Inputoutput图 7.21 输入数据和输出数据的时域图Inputoutput图 7.22 输入数据和输出数据的频谱图4. 实验要求在实验报告中记录IIR输入和输出数据及其波形,并 利用数字信号处理课程所学知识分析结果。