##
Creating Minimum Phase Filters

and Signals

Minimum-phase filter design often requires creating a minimum-phase
desired frequency response
from a given magnitude response
). As is clear from
§11.5, any filter transfer function can be made
minimum-phase, in principle, by completely factoring and
``reflecting'' all zeros for which inside the
unit circle, *i.e.*, replacing by . However, factoring a polynomial this large can be impractical. An approximate ``nonparametric'' method

^{12.3}is based on the property of the

*complex cepstrum*(see §8.8) that each minimum-phase zero in the spectrum gives rise to a causal exponential in the cepstrum, while each maximum-phase zero corresponds to an anti-causal exponential in the cepstrum [60]. Therefore, by computing the cepstrum and converting anti-causal exponentials to causal exponentials, the corresponding spectrum is converted

*nonparametrically*to minimum-phase form.

A matlab function

`mps.m`which carries out this method is listed in §J.11.

^{12.4}It works best for

*smooth*desired frequency response curves, but in principle the error can be made arbitrarily small by simply enlarging the FFT sizes used. Specifically, the inverse FFT of the log magnitude frequency response should not ``wrap around'' in the time domain (negligible ``time aliasing''). It is important to use something like

`mps`when designing digital filters based on a magnitude frequency-response specification using ``phase sensitive'' filter-design software (such as

`invfreqz`in matlab). In other words, poor results are generally obtained when phase-sensitive filter-design software is asked to design a causal, stable, zero-phase filter. As a general rule, when phase doesn't matter, ask for minimum phase. A related practical note is that unstable recursive filter designs can often be stabilized by simply adding more delay to the desired impulse response (

*i.e.*, adding a negatively sloped linear phase to the desired phase response). For example, the Steiglitz-McBride algorithm in Matlab (

`stmcb`) is a phase-sensitive IIR filter-design function that accepts a desired impulse response, while Matlab's

`invfreqz`(which can optionally iterate toward the Steiglitz-McBride solution), accepts a complex desired frequency response.

**Next Section:**

Signal Representation and Notation

**Previous Section:**

Is Linear Phase Really Ideal for Audio?