Main Content

zerophase

Zero-phase response of digital filter

Description

[Hr,w] = zerophase(b,a) returns the zero-phase response of the specified digital filter. Specify a digital filter with numerator coefficients b and denominator coefficients a. The function evaluates the zero-phase response at 512 equally spaced points on the upper half of the unit circle, and returns the zero-phase response Hr with the corresponding angular frequencies w.

example

[Hr,w] = zerophase(B,A,"ctf") returns the zero-phase response of the digital filter represented as Cascaded Transfer Functions (CTF) with numerator coefficients B and denominator coefficients A. (since R2024b)

example

[Hr,w] = zerophase({B,A,g},"ctf") returns the zero-phase response of the digital filter in CTF format. Specify the filter with numerator coefficients B, denominator coefficients A, and scaling values g across filter sections. (since R2024b)

example

[Hr,w] = zerophase(d) returns the zero-phase response for the digital filter d. Use designfilt to generate d based on frequency-response specifications.

example

[Hr,w] = zerophase(sos) returns the zero-phase response for the second order sections matrix sos.

[Hr,w] = zerophase(___,nfft) uses nfft frequency points on the upper half of the unit circle to compute the zero-phase response. You can use an input combination from any of the previous syntaxes.

example

[Hr,w] = zerophase(___,nfft,"whole") uses nfft frequency points around the whole unit circle to compute the zero-phase response.

example

[Hr,f] = zerophase(___,fs) uses the sample rate fs to determine the frequencies f at which the zero-phase response is computed.

example

[Hr,f] = zerophase(___,"whole",fs) uses the sample rate fs to determine the frequencies f around the whole unit circle at which the zero-phase response is computed.

example

Hr = zerophase(___,w) returns the zero-phase response Hr evaluated at the angular frequencies specified in w.

Hr = zerophase(___,f,fs) returns the zero-phase response Hr evaluated at the frequencies specified in f.

[Hr,w,phi] = zerophase(___) returns the zero-phase response Hr, angular frequencies w, and continuous phase component phi.

zerophase(___) plots the zero-phase response versus frequency. If you input the filter coefficients or second order sections matrix, the function plots in the current figure window.

Note

If the input to zerophase is single precision, the function calculates the zero-phase response using single-precision arithmetic. The output Hr is single precision.

Examples

collapse all

Use designfilt to design a 54th-order FIR filter with a normalized cutoff frequency of 0.3π rad/sample, a passband ripple of 0.7 dB, and a stopband attenuation of 42 dB. Use the method of constrained least squares. Display the zero-phase response.

Nf = 54;
Fc = 0.3;
Ap = 0.7;
As = 42;

d = designfilt("lowpassfir",FilterOrder=Nf,CutoffFrequency=Fc, ...
    PassbandRipple=Ap,StopbandAttenuation=As,DesignMethod="cls");
zerophase(d)

Figure contains an axes object. The axes object with title Zero-Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Amplitude contains an object of type line.

Design the same filter using fircls1, which uses linear units to measure the ripple and attenuation. Display the zero-phase response.

pAp = 10^(Ap/40); 
Apl = (pAp-1)/(pAp+1);
pAs = 10^(As/20);
Asl = 1/pAs;

b = fircls1(Nf,Fc,Apl,Asl);
zerophase(b)

Figure contains an axes object. The axes object with title Zero-Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Amplitude contains an object of type line.

Design a 10th-order elliptic lowpass IIR filter with a normalized passband frequency of 0.4π rad/sample, a passband ripple of 0.5 dB, and a stopband attenuation of 20 dB. Display the zero-phase response of the filter on 512 frequency points around the whole unit circle.

d = designfilt("lowpassiir",FilterOrder=10,PassbandFrequency=0.4, ...
    PassbandRipple=0.5,StopbandAttenuation=20,DesignMethod="ellip");
zerophase(d,512,"whole")

Figure contains an axes object. The axes object with title Zero-Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Amplitude contains an object of type line.

Create the same filter using ellip. Plot its zero-phase response.

[b,a] = ellip(10,0.5,20,0.4);
zerophase(b,a,512,"whole")

Figure contains an axes object. The axes object with title Zero-Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Amplitude contains an object of type line.

Since R2024b

Design a 40th-order lowpass Chebyshev type II digital filter with a stopband edge frequency of 0.4 and stopband attenuation of 50 dB. Plot the zero-phase response of the filter using its coefficients in the CTF format.

[B,A] = cheby2(40,50,0.4,"ctf");

zerophase(B,A,"ctf")

Figure contains an axes object. The axes object with title Zero-Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Amplitude contains an object of type line.

Design a 30th-order bandpass elliptic digital filter with passband edge frequencies of 0.3 and 0.7, passband ripple of 0.1 dB, and stopband attenuation of 50 dB. Plot the zero-phase response of the filter using its coefficients and gain in the CTF format.

[B,A,g] = ellip(30,0.1,50,[0.3 0.7],"ctf");
zerophase({B,A,g},"ctf")

Figure contains an axes object. The axes object with title Zero-Phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Amplitude contains an object of type line.

Input Arguments

collapse all

Transfer function coefficients, specified as vectors. For FIR filters where a=1, you can omit the value a from the command.

Data Types: single | double

Since R2024b

Cascaded transfer function (CTF) coefficients, specified as scalars, vectors, or matrices. B and A list the numerator and denominator coefficients of the cascaded transfer function, respectively.

B must be of size L-by-(m + 1) and A must be of size L-by-(n + 1), where:

  • L represents the number of filter sections.

  • m represents the order of the filter numerators.

  • n represents the order of the filter denominators.

For more information about the cascaded transfer function format and coefficient matrices, see Specify Digital Filters in CTF Format.

Note

If any element of A(:,1) is not equal to 1, then zerophase normalizes the filter coefficients by A(:,1). In this case, A(:,1) must be nonzero.

Data Types: double | single
Complex Number Support: Yes

Since R2024b

Scale values, specified as a real-valued scalar or as a real-valued vector with L + 1 elements, where L is the number of CTF sections. The scale values represent the distribution of the filter gain across sections of the cascaded filter representation.

The zerophase function applies a gain to the filter sections using the scaleFilterSections function depending on how you specify g:

  • Scalar — The function distributes the gain uniformly 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.

Data Types: double | single

Digital filter, specified as a digitalFilter object.

Second order sections, specified as a k-by-6 matrix where the number of sections k must be greater than or equal to 2. If the number of sections is less than 2, the function considers the input to be the numerator vector b. Each row of sos corresponds to the coefficients of a second order (biquad) filter. The ith row of the sos matrix corresponds to [bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)].

Data Types: single | double

Number of frequency points used to evaluate the zero-phase response, specified as a positive integer scalar. For best results, set nfft to a value greater than the filter order.

Data Types: double

Angular frequencies at which the zero-phase response is computed, specified as a vector and expressed in radians/sample. w must have at least two elements.

Data Types: double

Frequencies at which the zero-phase response is computed, specified as a vector and expressed in hertz. f must have at least two elements.

Data Types: double

Sample rate, specified as a positive scalar.

Data Types: double

Output Arguments

collapse all

Zero-phase response, returned as a vector.

The zero-phase response, Hr(ω), is related to the frequency response, H(e), by

H(ejω)=Hr(ω)ejφ(ω),

where φ(ω) is the continuous phase.

Note

The zero-phase response is always real, but it is not the equivalent of the magnitude response. The former can be negative while the latter cannot be negative.

Angular frequencies at which the zero-phase response is computed, returned as a vector.

Frequencies at which the zero-phase response is computed, returned as a vector.

Continuous phase component, returned as a vector. This quantity is not equivalent to the phase response of the filter when the zero-phase response is negative.

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).

Specify Digital Filters in CTF Format

You can specify digital filters in the CTF format for analysis, visualization, and signal filtering. Specify a filter by listing its coefficients B and A. You can also include the filter scaling gain across sections by specifying a scalar or vector g.

Filter Coefficients

When you specify the coefficients as L-row matrices,

B=[b11b12b1,m+1b21b22b2,m+1bL1bL2bL,m+1],A=[a11a12a1,n+1a21a22a2,n+1aL1aL2aL,n+1],

it is assumed that you have specified the filter as a sequence of L cascaded transfer functions, such that the full transfer function of the filter is

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

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

  • If you specify both B and A as vectors, it is assumed that the underlying system is a one-section IIR filter (L = 1), with B representing the numerator of the transfer function and A representing its denominator.

  • If B is scalar, it is assumed that the filter is a cascade of all-pole IIR filters with each section having an overall system gain equal to B.

  • If A is scalar, it is assumed that the filter is a cascade of FIR filters with each section having an overall system gain equal to 1/A.

Note

  • To convert second-order section matrices to cascaded transfer functions, use the sos2ctf function.

  • To convert a zero-pole-gain filter representation to cascaded transfer functions, use the zp2ctf function.

Coefficients and Gain

If you have an overall scaling gain or multiple scaling gains factored out from the coefficient values, you can specify the coefficients and gain as a cell array of the form {B,A,g}. Scaling filter sections is especially important when you work with fixed-point arithmetic to ensure that the output of each filter section has similar amplitude levels, which helps avoid inaccuracies in the filter response due to limited numeric precision.

The gain can be a scalar overall gain or a vector of section gains.

  • If the gain is scalar, the value applies uniformly to all the cascade filter sections.

  • If the gain is a vector, it must have one more element than the number of filter sections L in the cascade. Each of the first L scale values applies to the corresponding filter section, and the last value applies uniformly to all the cascade filter sections.

If you specify the coefficient matrices and gain vector as

B=[b11b12b1,m+1b21b22b2,m+1bL1bL2bL,m+1],A=[a11a12a1,n+1a21a22a2,n+1aL1aL2aL,n+1],g=[g1g2gLgS],

it is assumed that the transfer function of the filter system is

H(z)=gS(g1b11+b12z1++b1,m+1zma11+a12z1++a1,n+1zn×g2b21+b22z1++b2,m+1zma21+a22z1++a2,n+1zn××gLbL1+bL2z1++bL,m+1zmaL1+aL2z1++aL,n+1zn).

Tips

  • You can obtain filters in CTF format, including the scaling gain. Use the outputs of digital IIR filter design functions, such as butter, cheby1, cheby2, and ellip. Specify the "ctf" filter-type argument in these functions and specify to return B, A, and g to get the scale values. (since R2024b)

References

[1] Antoniou, Andreas. Digital Filters. New York: McGraw-Hill, Inc., 1993.

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

Version History

Introduced before R2006a

expand all