Main Content

sos2ctf

Convert digital filter second-order section parameters to cascaded transfer function form

Since R2024a

    Description

    [B,A] = sos2ctf(sos) computes the second-order Cascaded Transfer Functions (CTF) of a filter system described by the second-order section matrix sos.

    example

    [B,A] = sos2ctf(sos,g) also specifies the scale values g to perform gain scaling across the sections of the cascaded transfer function of the system.

    example

    Examples

    collapse all

    Convert a second-order sections matrix to the cascaded transfer function form.

    sos = [2 4 2 1 0 0;3 2 0 1 1 0];
    
    [ctfB,ctfA] = sos2ctf(sos)
    ctfB = 2×3
    
         2     4     2
         3     2     0
    
    
    ctfA = 2×3
    
         1     0     0
         1     1     0
    
    

    Obtain the cascaded transfer function of a 10th-order lowpass elliptic filter with a normalized cutoff frequency of 0.25πrad/sample.

    [z,p,k] = ellip(10,1,60,0.25);
    [sos,g] = zp2sos(z,p,k);
    
    [b,a] = sos2ctf(sos,g)
    b = 5×3
    
        0.3216    0.2716    0.3216
        0.3216   -0.2850    0.3216
        0.3216   -0.4033    0.3216
        0.3216   -0.4345    0.3216
        0.3216   -0.4432    0.3216
    
    
    a = 5×3
    
        1.0000   -1.5959    0.6751
        1.0000   -1.5123    0.8125
        1.0000   -1.4458    0.9225
        1.0000   -1.4169    0.9730
        1.0000   -1.4099    0.9936
    
    

    Plot the filter response.

    filterAnalyzer(b,a)

    Input Arguments

    collapse all

    Second-order section representation, specified as an L-by-6 matrix, where L is the number of second-order sections. The matrix

    sos=[b01b11b211a11a21b02b12b221a12a22b0Lb1Lb2L1a1La2L]

    represents the second-order sections of H(z):

    H(z)=gk=1LHk(z)=gk=1Lb0k+b1kz1+b2kz21+a1kz1+a2kz2.

    Example: [z,p,k] = butter(3,1/32); sos = zp2sos(z,p,k) specifies a third-order Butterworth filter with a normalized 3 dB frequency of π/32 rad/sample.

    Data Types: single | double
    Complex Number Support: Yes

    Scale values, specified as a real-valued scalar or as a real-valued vector with L+1 elements, where L is the number of second-order sections.

    The sos2ctf function applies a gain to the filter sections using the scaleFilterSections function. Depending on the value you specify in g:

    • Scalar — The function uniformly distributes the gain across all filter sections.

    • Vector — The function applies the first L gain values to the corresponding filter sections and distributes the last gain value uniformly across all filter sections.

    Output Arguments

    collapse all

    Cascaded transfer function coefficients, returned as L-by-3 matrices, where L is the number of second-order sections.

    The matrices B and A list the numerator and denominator coefficients of the cascaded transfer function, respectively. See Return Digital Filters in CTF Format for more information.

    More About

    collapse all

    Cascaded Transfer Functions

    Partitioning an IIR digital filter into cascaded sections improves its numerical stability and reduces its susceptibility to coefficient quantization errors. The cascaded form of a transfer function H(z) in terms of the L transfer functions H1(z), H2(z), …, HL(z) is

    H(z)=l=1LHl(z)=H1(z)×H2(z)××HL(z).

    Return Digital Filters in CTF Format

    Get the filter coefficients by specifying to return B and A. That way, you can have digital filters in CTF format for analysis, visualization and signal filtering.

    Filter Coefficients

    When you specify to return the numerator and denominator coefficients in the CTF format, the L-row matrices B and A are returned as

    B=[b11b12b1,m+1b21b22b2,m+1bL1bL2bL,m+1],A=[1a12a1,n+11a22a2,n+11aL2aL,n+1],

    such that the full transfer function of the filter is

    H(z)=b11+b12z1++b1,m+1zm1+a12z1++a1,n+1zn×b21+b22z1++b2,m+1zm1+a22z1++a2,n+1zn××bL1+bL2z1++bL,m+1zm1+aL2z1++aL,n+1zn,

    where m ≥ 0 is the numerator order of the filter and n ≥ 0 is the denominator order.

    Note

    Algorithms

    The sos2ctf function computes the numerator and denominator coefficients of the cascaded-transfer-function sections from the second-order-section coefficients of the filter system.

    The output arguments B and A contain the second-order cascaded transfer function coefficients of the filter system distributed in L rows.

    • Each row of A and B lists the coefficients in each section.

    • The sos2ctf function returns the L-by-3 matrices B and A, where the last two columns correspond to the z–1 and z–2 terms for each cascaded section of the filter system.

    For a second-order-section matrix sos, and unity scale value (g=1), the values for B and A are these:

    B = sos(:,1:3);
    A = sos(:,4:6);

    If you specify g, sos2ctf distributes the scale values from g across the numerator coefficients, so that the values for B and A are these:

    B = scaleFilterSections(sos(:,1:3),g);
    A = sos(:,4:6);

    References

    [1] Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.

    Extended Capabilities

    C/C++ Code Generation
    Generate C and C++ code using MATLAB® Coder™.

    Version History

    Introduced in R2024a