DSP

[Matlab]IIR滤波器参数

2019-07-13 17:43发布

利用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)