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

    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

    expand all

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

    Version History

    Introduced in R2024a