
iir数字滤波器设计-1.ppt
69页第7章 IIR数字滤波器设计,7.1 IIR滤波器原理 7.2 使用DSP Builder设计IIR滤波器 7.3 在Quartus II中使用IIR滤波器IP核,7.1 IIR滤波器原理,IIR滤波器一般采用递归方式来实现也就是说,滤波器当前输出是输入序列和以前各输出值、、…的函数,这可以用下列差分方程来表示:,,(7-1),其中M≤N,N是IIR滤波器的阶数 相应地,IIR滤波器的系统函数可以表示为,,(7-2),在上一章已经提及到,FIR滤波器的系统函数只有零点而IIR滤波器除了具有极点以外,一般还存在零点由于极点的存在,IIR滤波器用递归结构来实现较为简单实现IIR滤波器的基本结构共有三中:直接型、级联型和并联型下面简单介绍前两种IIR滤波器的结构1. 直接型 利用公式(7-2),可以直接导出直接I型的IIR滤波器结构,可用下式来表示:,,(7-3),可以看出, 和反馈环节 中的延时单元不能共用,需要个延 时单元为了减少延时单元,对于线性系统,公式(7-3)也可以写成:,,,,由此可以导出直接Ⅱ型的滤波器结构图7-1表示了一个直接Ⅱ型IIR滤波器的结构,该滤波器的阶数是2阶,共存在两个反馈环节。
图7-1 直接Ⅱ型IIR滤波器结构,2. 级联型 对式(7-2)的分子、分母进行因式分解,由于中的系数都为实数,的极、零点只可能是实数或者复共轭对,对于复共轭对因子,可以复合成二阶因子:,,式中系数都为实数如果把实数因子(一阶因子)看成是二次项系数为0的二阶因子,则上式可以写成:,,,其中,由此可见,是一个2阶的IIR滤波器,N阶IIR滤波器可以看成是由多个2阶IIR滤波器级联而成的,即IIR滤波器可以采用下列结构来表示,也就是级联型结构(见图7-2):,,图7-2 级联型IIR滤波器结构,7.2 使用DSP Builder设计IIR滤波器,7.2.1 4阶直接Ⅱ型IIR滤波器设计 在此需要设计一个4阶IIR滤波器给定滤波器的系统函数如下:,,即滤波器系数为 a0=1 b0=0.05 a1= -1.95 b1=0.20 a2=1.74 b2=0.31 a3= -0.72 b3=0.20 a4=0.12 b4=0.05 可以看出,这是一个4阶IIR滤波器,我们采用直接Ⅱ型结构来实现该滤波器,其具体结构可由信号流图(见图7-3)来表示图7-3 直接Ⅱ型4阶IIR滤波器信号流图,在DSP Builder中,建立一个新模型,按照图7-3调用DSP Builder模块进行设计。
设计完的4阶IIR滤波器模型如图7-4所示图7-4 4阶IIR滤波器模型,该模型中各个模块的参数设置如下: X模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Fractional”(有符号小数) 参数“Node Type”设为“Input port” 参数“[number of bits].[]”设为“2” 参数“[].[number of bits]”设为“8”,Y模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Fractional” 参数“Node Type”设为“Output port” 参数“[number of bits].[]”设为“4” 参数“[].[number of bits]”设为“23” BusConversion模块:(BusConversion) 库:Altera DSP Builder中Bus Manipulation库,参数“Input Bus Type”设为“signed Fractional” 参数“Input [number of bits].[]”设为“4” 参数“Input [].[number of bits]”设为“23” 参数“Output Bus Type”设为“signed Fractional” 参数“Output [number of bits].[]”设为“2” 参数“Output [].[number of bits]”设为“8” FeedBack Adder模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“2” 参数“Add(+)Sub(-)”设为“+ -”,FeedBack Adder1模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“4” 参数“Add(+)Sub(-)”设为“++++” FeedForward Adder模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“5” 参数“Add(+)Sub(-)”设为“+++++”,Delay、Delay1、Delay2、Delay3模块:(Delay) 库:Altera DSP Builder中Storage库 参数“Depth”设为“1” 参数“Clock Phase Selection”设为“1” A1、A2、A3、A4、B0、B1、B2、B3、B4模块:(Gain) 库:Altera DSP Builder中Arithemtic库 参数“Gain Value”按照设计要求中指定的系数设置(直接输入) 参数“Map Gain Value to Bus Type”设为“Signed Fraction” 参数“[Gain value number of bits].[]”设为“2” 参数“[].[Gain value number of bits]”设为“12” 参数“Number of Pipeline Levels”设为“0”,另外,用于Simulink仿真的模块的参数设置如下: Pulse Generator模块:(Pulse Generator) 库:Simulink中Sources库 参数“Pulse type”设为“Sample based” 参数“Amplitude”设为“1” 参数“Period(number of samples)”设为“1000” 参数“Pulse width(number of samples”设为“1” 参数“Phase delay (number of samples)”设为“10” 参数“Sample time”设为“1” “Interpret vector parameters as 1-D”设为“√”,Scope模块:(Scope) 库:Simulink中sinks库 参数“Number of Axes”为“2” 在这个实现中,使用了增益(Gain)模块来完成常数系数的乘法。
这里使用了有符号小数(Signed Fractional)来简化IIR滤波器系数的代入过程值得注意的是,参数“[number of bits].[]”设置的是整数部分的位宽,其中最高位为符号位;参数“[].[number of bits]”设置了小数部分的位宽假如把参数“[number of bits].[]”设置为“2”,那就意味着该小数的整数部分只能是0、1、-1、-2(分别对应00、01、10或10、10),而且整数部分要为-2,必须是小数部分为全零建立IIR滤波器模型后就可以进行仿真了Simulink仿真模块“Pulse Generator”(脉冲发生器)模拟了一个单位冲激函数通过“Scope”模块来观察该直接Ⅱ型IIR滤波器的冲激响应 修改Simulink的仿真参数设置,设置“Stop time”仿真停止时间为“50”,“Solver options”中“Type”为“Fixed-Step”启动仿真仿真结果见图7-5图7-5 IIR滤波器仿真结果,7.2.2 4阶级联型IIR滤波器设计 1. 建立模型 参照图7-2,建立一个4阶的级联型IIR滤波器模型,该模型共由两节2阶直接Ⅱ型IIR滤波器构成,见图7-6。
图7-6 4阶级联型IIR滤波器,模型中各个模块的参数设置如下: X模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Fractional”(有符号小数) 参数“Node Type”设为“Input port” 参数“[number of bits].[]”设为“2” 参数“[].[number of bits]”设为“8”,Y模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Fractional” 参数“Node Type”设为“Output port” 参数“[number of bits].[]”设为“4” 参数“[].[number of bits]”设为“23” BusConv模块:(BusConversion) 库:Altera DSP Builder中Bus Manipulation库 参数“Input Bus Type”设为“signed Fractional” 参数“Input [number of bits].[]”设为“4”,参数“Input [].[number of bits]”设为“18” 参数“Output Bus Type”设为“signed Fractional” 参数“Output [number of bits].[]”设为“2” 参数“Output [].[number of bits]”设为“15”,BusConv1、BusConv4模块:(BusConversion) 库:Altera DSP Builder中Bus Manipulation库 参数“Input Bus Type”设为“signed Fractional” 参数“Input [number of bits].[]”设为“3” 参数“Input [].[number of bits]”设为“15” 参数“Output Bus Type”设为“signed Fractional” 参数“Output [number of bits].[]”设为“2” 参数“Output [].[number of bits]”设为“15”,BusConv2、BusConv3、BusConv5模块:(BusConversion) 库:Altera DSP Builder中Bus Manipulation库 参数“Input Bus Type”设为“signed Fractional” 参数“Input [number of bits].[]”设为“4” 参数“Input [].[number of bits]”设为“25” 参数“Output Bus Type”设为“signed Fractional” 参数“Output [number of bits].[]”设为“2” 参数“Output [].[number of bits]”设为“15”,FeedBackAdder、FeedBackAdder2模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Number of Inputs”设为“2” 参数“Add(+)Sub(-)”设为“+ -” FeedBackAdder1、FeedBackAdder3模块:(Parallel Adder Subtractor)。
