利用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这些滤波器的增益。
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)