Convert an IIR discrete-time filter object to a biquadratic filter object that contains the corresponding SOS sections.
Design a 10th order lowpass Butterworth filter using the butter function.
N = 10;
Fc = 0.4;
[b,a] = butter(N,Fc);
Create a dsp.IIRFilter object and assign the designed coefficients to the Numerator and the Denominator properties of the object.
iir = dsp.IIRFilter('Numerator',b,'Denominator',a)
iir =
dsp.IIRFilter with properties:
Structure: 'Direct form II transposed'
Numerator: [1x11 double]
Denominator: [1x11 double]
InitialConditions: 0
Show all properties
Use the sos function to convert the IIR filter object into a biquadratic filter that contains the corresponding SOS sections.
biquad = sos(iir)
biquad =
dsp.BiquadFilter with properties:
Structure: 'Direct form II transposed'
SOSMatrixSource: 'Property'
SOSMatrix: [5x6 double]
ScaleValues: [6x1 double]
InitialConditions: 0
OptimizeUnityScaleValues: true
Show all properties
You can access the SOS matrix and the scale value properties of the biquadratic filter.
sMatrix = biquad.SOSMatrix
sMatrix = 5×6
1.0000 2.0958 1.0984 1.0000 -0.3187 0.0313
1.0000 2.0576 1.0602 1.0000 -0.3345 0.0826
1.0000 1.9981 1.0005 1.0000 -0.3695 0.1958
1.0000 1.9412 0.9436 1.0000 -0.4317 0.3969
1.0000 1.9073 0.9097 1.0000 -0.5380 0.7410
sValues = biquad.ScaleValues
sValues = 6×1
0.0005
1.0000
1.0000
1.0000
1.0000
1.0000
To verify, compare these values to the values obtained using the tf2sos function.
[sMatrixfn,g] = tf2sos(b,a)
sMatrixfn = 5×6
1.0000 2.0958 1.0984 1.0000 -0.3187 0.0313
1.0000 2.0576 1.0602 1.0000 -0.3345 0.0826
1.0000 1.9981 1.0005 1.0000 -0.3695 0.1958
1.0000 1.9412 0.9436 1.0000 -0.4317 0.3969
1.0000 1.9073 0.9097 1.0000 -0.5380 0.7410
g = 4.9945e-04
isequal(sMatrix,sMatrixfn)
ans = logical
1
isequal(sValues(1),g)
ans = logical
1