Main Content


Minimum-phase FIR spectral factor


h = firminphase(b) computes the minimum-phase FIR spectral factor h of a linear-phase FIR filter b.

You can find the maximum-phase spectral factor, g, by reversing h such that g = fliplr(h), and b = conv(h, g).


h = firminphase(b,nz) specifies the number of zeros, nz, of b that lie on the unit circle.


collapse all

Design a constrained least squares filter with a nonnegative zero-phase response, and then use the firminphase function to compute the minimum-phase spectral factor.

f   = [0 0.4 0.8 1];
a   = [0 1 0];
up  = [0.02 1.02  0.01];
lo  = [0 0.98 0]; % The zeros ensure nonnegative zero-phase resp.
n   = 32;
b   = fircls(n,f,a,up,lo);
h   = firminphase(b)
h = 1×17

    0.2397   -0.1556   -0.2834    0.3866    0.0415   -0.2529    0.0584   -0.0028    0.0868    0.0079   -0.0978    0.0309    0.0095    0.0669    0.0171   -0.0111   -0.0019

Input Arguments

collapse all

Lowpass FIR filter coefficients, specified as a row vector. Elements of b must be real, of even order, and have nonnegative zero-phase response.

Data Types: single | double

Number of zeros of b that lie on the unit circle, specified as a positive integer. You must specify nz as an even number to compute the minimum-phase spectral factor because every root on the unit circle must have even multiplicity. Including nz can help the firminphase function calculate the required FIR spectral factor. Zeros with multiplicity greater than two on the unit circle cause problems in the spectral factor determination.

Data Types: single | double | int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64

Output Arguments

collapse all

Minimum-phase FIR spectral factor coefficients of a linear-phase FIR filter b, returned as a row vector.

Data Types: single | double


[1] Mitra, Sanjit Kumar, and James F. Kaiser, eds. Handbook for Digital Signal Processing. New York: Wiley, 1993.

Extended Capabilities

Version History

Introduced in R2011a

See Also

| |