# sos

Convert to second order sections

## Description

example

sosFilt = sos(sysobj) converts a IIR discrete-time filter to a second-order section (SOS) filter. The sosFilt output is a dsp.SOSFilter System object™.

sosFilt = sos(sysobj,dir_flag) rearranges the second-order sections according to proximity to the origin of the poles of the sections.

## Examples

collapse all

Convert an IIR discrete-time filter object to an SOS 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: [4.9945e-04 0.0050 0.0225 0.0599 0.1049 0.1259 0.1049 0.0599 0.0225 0.0050 4.9945e-04]
Denominator: [1 -1.9924 3.0195 -2.8185 2.0387 -1.0545 0.4144 -0.1157 0.0225 -0.0027 1.4876e-04]
InitialConditions: 0

Use get to show all properties

Use the sos function to convert the IIR filter object into an SOS filter that contains the corresponding SOS sections.

sosFilt = sos(iir)
sosFilt =
dsp.SOSFilter with properties:

Structure: 'Direct form II transposed'
CoefficientSource: 'Property'
Numerator: [5x3 double]
Denominator: [5x3 double]
HasScaleValues: true
ScaleValues: [4.9945e-04 1 1 1 1 1]

Use get to show all properties

You can obtain the SOS matrix and scale values from the SOS filter object.

sMatrix = [sosFilt.Numerator,sosFilt.Denominator]
sMatrix = 5×6

1.0000    2.0032    1.0005    1.0000   -0.3187    0.0313
1.0000    2.0846    1.0874    1.0000   -0.3345    0.0826
1.0000    2.0293    1.0321    1.0000   -0.3695    0.1958
1.0000    1.9655    0.9682    1.0000   -0.4317    0.3969
1.0000    1.9174    0.9199    1.0000   -0.5380    0.7410

sValues = sosFilt.ScaleValues
sValues = 1×6

0.0005    1.0000    1.0000    1.0000    1.0000    1.0000

Compare these values to the values obtained using the tf2sos function and verify that they are the same.

[sMatrixfn,g] = tf2sos(b,a)
sMatrixfn = 5×6

1.0000    2.0032    1.0005    1.0000   -0.3187    0.0313
1.0000    2.0846    1.0874    1.0000   -0.3345    0.0826
1.0000    2.0293    1.0321    1.0000   -0.3695    0.1958
1.0000    1.9655    0.9682    1.0000   -0.4317    0.3969
1.0000    1.9174    0.9199    1.0000   -0.5380    0.7410

g = 4.9945e-04
isequal(sMatrix,sMatrixfn)
ans = logical
1

isequal(sValues(1),g)
ans = logical
1

## Input Arguments

collapse all

IIR discrete-time filter object, specified as a dsp.IIRFilter System object.

Pole direction flag, specified as either:

• 'up' –– The first row contains the poles closest to the origin, and the last row contains the poles closest to the unit circle.

• 'down' –– The sections are ordered in the opposite direction. The zeros are always paired with the poles closest to them.

## Output Arguments

collapse all

Second order section filter object, returned as a dsp.SOSFilter System object. The sos function converts the input IIR filter numerator and denominator coefficients into SOS matrix and scale values, and assigns these values to the dsp.SOSFilter object.

## Version History

Introduced in R2011a

expand all