Main Content

isminphase

Determine whether filter is minimum phase

Description

flag = isminphase(b,a) returns a logical output equal to 1 if the specified filter is minimum phase. Specify a filter with numerator coefficients b and denominator coefficients a.

example

flag = isminphase(B,A,"ctf") returns 1 if the filter specified as Cascaded Transfer Functions (CTF) with numerator coefficients B and denominator coefficients A is minimum phase. (since R2024b)

example

flag = isminphase({B,A,g},"ctf") returns 1 if the filter specified in CTF format is minimum phase. Specify the filter with numerator coefficients B, denominator coefficients A, and scaling values g across filter sections. (since R2024b)

example

flag = isminphase(d) returns 1 if the digital filter d is minimum phase. Use designfilt to generate d based on frequency-response specifications.

example

flag = isminphase(sos) returns 1 if the filter specified by second order sections matrix sos is minimum phase.

example

flag = isminphase(___,tol) uses the tolerance tol to determine when two numbers are close enough to be considered equal.

example

Examples

collapse all

Design a sixth-order lowpass Butterworth IIR filter using second order sections. Specify a normalized 3-dB frequency of 0.15. Check if the filter is minimum phase.

[z,p,k] = butter(6,0.15);
SOS = zp2sos(z,p,k);            
min_flag = isminphase(SOS)
min_flag = logical
   1

Redesign the filter using designfilt. Check that the zeros and poles of the transfer function are on or within the unit circle.

d = designfilt("lowpassiir",DesignMethod="butter",FilterOrder=6, ...
               HalfPowerFrequency=0.25);
d_flag = isminphase(d)
d_flag = logical
   1

zplane(d)

Figure contains an axes object. The axes object with title Pole-Zero Plot, xlabel Real Part, ylabel Imaginary Part contains 4 objects of type line, text. One or more of the lines displays its values using only markers

Given a filter defined with a set of single-precision numerator and denominator coefficients, check if it is minimum phase for different tolerance values.

b = single([1 1.00001]);  
a = single([1 0.45]);               
min_flag1 = isminphase(b,a)        
min_flag1 = logical
   0

min_flag2 = isminphase(b,a,1e-3)
min_flag2 = logical
   1

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. Verify that the filter is minimum phase using the filter coefficients in the CTF format.

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

flag = isminphase(B,A,"ctf")
flag = logical
   1

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. Verify that the filter is minimum phase using the filter coefficients and gain in the CTF format.

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

Input Arguments

collapse all

Transfer function coefficients, specified as vectors.

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 isminphase 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 isminphase 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. 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: double

Tolerance, specified as a positive scalar. The tolerance value determines when two numbers are close enough to be considered equal.

Data Types: double

Output Arguments

collapse all

Logical output, returned as 1 or 0. The function returns 1 when the input is a minimum phase filter.

More About

collapse all

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] Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.

Version History

Introduced in R2013a

expand all