[Matlab]IIR滤波器参数

利用Matlab的filterbuilder生成IIR滤波器参数如下:

>> filterbuilder
The variable 'Hlp' has been exported to the workspace.
>> Hlp
 
Hlp =
 
         FilterStructure: 'Direct-Form II, Second-Order Sections'      
              Arithmetic: 'double'                                     
               sosMatrix: [13x6 double]                                
             ScaleValues: [0.465985780077502;1;1;1;1;1;1;1;1;1;1;1;1;1]
     OptimizeScaleValues: true                                         
        PersistentMemory: false

有用信息为 sosMatrix和ScaleValue。利用fdatool向外导出的也是这两个参数。

sosMartrix为一系列二阶滤波的参数,这些滤波器串联即为当前的IIR滤波器;而ScaleValues则是sosMartrix这些滤波器的增益。


>> Hlp.sosMatrix

ans =

    0.3523    0.7046    0.3523    1.0000   -0.1806    0.5304
    0.3724    0.7449    0.3724    1.0000   -0.1369    0.1602
    0.2986    0.5971    0.2986    1.0000   -0.1203    0.0195
    0.4716    0.4716         0    1.0000   -0.0592         0
    0.2876    0.5752    0.2876    1.0000   -0.1262    0.0694
    0.1272    0.2543    0.1272    1.0000   -0.1541    0.3054
    0.2577    0.5154    0.2577    1.0000   -0.2222    0.8826
    0.3837    0.7674    0.3837    1.0000   -0.1659    0.4057
    0.4242    0.8484    0.4242    1.0000   -0.1309    0.1090
    0.3007    0.6015    0.3007    1.0000   -0.1189    0.0075
    0.2701    0.5401    0.2701    1.0000   -0.1227    0.0399
    0.2238    0.4477    0.2238    1.0000   -0.1446    0.2248

    0.4153    0.8305    0.4153    1.0000   -0.1990    0.6862

>> Hlp.ScaleValues

ans =

    0.4660
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

此时完整的IIR滤波器Z变换表达式为:

 

利用fvtoll观察滤波器的频率响应

>> fvtool(Hlp)

利用sos2tf生成滤波器a,b参数,并利用freqz观察频率响应

>> [b,a]=sos2tf(Hlp.sosMatrix,Hlp.ScaleValues);

>> freqz(b,a)


手动计算滤波器的a,b参数,并利用freqz观察频率响应

>> b2=Hlp.sosMatrix(1,1:3);
>> for n=2:length(Hlp.sosMatrix), b2=conv(b2,Hlp.sosMatrix(n,1:3));end
>> a2=Hlp.sosMatrix(1,4:6);
>> for n=2:length(Hlp.sosMatrix), a2=conv(a2,Hlp.sosMatrix(n,4:6));end
>> freqz(b2,a2)
>> b2=b2*prod(Hlp.ScaleValues)
>> freqz(b2,a2)


你可能感兴趣的:(matlab)