Main Content

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

See Also

Functions

Objects