The primary advantage of IIR filters over FIR filters is that they typically meet a given set
of specifications with a much lower filter order than a corresponding FIR filter.
Although IIR filters have nonlinear phase, data processing within MATLAB^{®} software is commonly performed “offline,” that is, the
entire data sequence is available prior to filtering. This allows for a noncausal,
zerophase filtering approach (via the filtfilt
function), which eliminates the nonlinear phase distortion
of an IIR filter.
The classical IIR filters, Butterworth, Chebyshev Types I and II, elliptic, and Bessel, all approximate the ideal “brick wall” filter in different ways.
This toolbox provides functions to create all these types of classical IIR filters in both the analog and digital domains (except Bessel, for which only the analog case is supported), and in lowpass, highpass, bandpass, and bandstop configurations. For most filter types, you can also find the lowest filter order that fits a given filter specification in terms of passband and stopband attenuation, and transition width(s).
The direct filter design function yulewalk
finds a filter with
magnitude response approximating a specified frequencyresponse function. This is
one way to create a multiband bandpass filter.
You can also use the parametric modeling or system identification functions to design IIR filters. These functions are discussed in Parametric Modeling.
The generalized Butterworth design function maxflat
is discussed in the section Generalized Butterworth Filter Design.
The following table summarizes the various filter methods in the toolbox and lists the functions available to implement these methods.
Toolbox Filters Methods and Available Functions
Filter Method  Description  Filter Functions 

Analog Prototyping  Using the poles and zeros of a classical lowpass prototype filter in the continuous (Laplace) domain, obtain a digital filter through frequency transformation and filter discretization.  Complete design functions: besself , butter , cheby1 , cheby2 , ellip Order estimation functions: buttord , cheb1ord , cheb2ord , ellipord Lowpass analog prototype functions: besselap , buttap , cheb1ap , cheb2ap , ellipap Frequency transformation functions: lp2bp , lp2bs , lp2hp , lp2lp Filter discretization functions: bilinear , impinvar 
Direct Design  Design digital filter directly in the discrete timedomain by approximating a piecewise linear magnitude response.  
Generalized Butterworth Design  Design lowpass Butterworth filters with more zeros than poles.  
Parametric Modeling  Find a digital filter that approximates a prescribed time or frequency domain response. (See System Identification Toolbox™ documentation for an extensive collection of parametric modeling tools.)  Timedomain modeling functions: lpc , prony , stmcb Frequencydomain modeling functions: invfreqs , invfreqz 
The principal IIR digital filter design technique this toolbox provides is based on the conversion of classical lowpass analog filters to their digital equivalents. The following sections describe how to design filters and summarize the characteristics of the supported filter types. See Special Topics in IIR Filter Design for detailed steps on the filter design process.
You can easily create a filter of any order with a lowpass, highpass, bandpass, or bandstop configuration using the filter design functions.
Filter Design Functions
Filter Type  Design Function 

Bessel (analog only) 

Butterworth 

Chebyshev Type I 

Chebyshev Type II 

Elliptic 

By default, each of these functions returns a lowpass filter; you need to specify only the
cutoff frequency that you want, Wn
, in normalized units such
that the Nyquist frequency is 1 Hz). For a highpass filter, append
'high'
to the function's parameter list. For a bandpass
or bandstop filter, specify Wn
as a twoelement vector
containing the passband edge frequencies. Append 'stop'
for
the bandstop configuration.
Here are some example digital filters:
[b,a] = butter(5,0.4); % Lowpass Butterworth [b,a] = cheby1(4,1,[0.4 0.7]); % Bandpass Chebyshev Type I [b,a] = cheby2(6,60,0.8,'high'); % Highpass Chebyshev Type II [b,a] = ellip(3,1,60,[0.4 0.7],'stop'); % Bandstop elliptic
To design an analog filter, perhaps for simulation, use a trailing 's'
and
specify cutoff frequencies in rad/s:
[b,a] = butter(5,0.4,'s'); % Analog Butterworth filter
All filter design functions return a filter in the transfer function, zeropolegain, or
statespace linear system model representation, depending on how many output
arguments are present. In general, you should avoid using the transfer function
form because numerical problems caused by roundoff errors can occur. Instead,
use the zeropolegain form which you can convert to a secondorder section
(SOS) form using zp2sos
and then use the SOS form
to analyze or implement your filter.
All classical IIR lowpass filters are illconditioned for extremely low cutoff frequencies. Therefore, instead of designing a lowpass IIR filter with a very narrow passband, it can be better to design a wider passband and decimate the input signal.
This toolbox provides order selection functions that calculate the minimum filter order that meets a given set of requirements.
Filter Type  Order Estimation Function 

Butterworth 

Chebyshev Type I 

Chebyshev Type II 

Elliptic 

These are useful in conjunction with the filter design functions.
Suppose you want a bandpass filter with a passband from 1000 to 2000
Hz, stopbands starting 500 Hz away on either side, a 10 kHz sampling
frequency, at most 1 dB of passband ripple, and at
least 60 dB of stopband attenuation. You can meet these specifications
by using the butter
function as follows.
[n,Wn] = buttord([1000 2000]/5000,[500 2500]/5000,1,60) [b,a] = butter(n,Wn);
n = 12 Wn = 0.1951 0.4080
An elliptic filter that meets the same requirements is given by
[n,Wn] = ellipord([1000 2000]/5000,[500 2500]/5000,1,60) [b,a] = ellip(n,1,60,Wn);
n = 5 Wn = 0.2000 0.4000
These functions also work with the other standard band configurations, as well as for analog filters.
The toolbox provides five different types of classical IIR filters, each optimal in some way. This section shows the basic analog prototype form for each and summarizes major characteristics.
The Butterworth filter provides the best Taylor series approximation to the ideal lowpass filter response at analog frequencies Ω = 0 and Ω = ∞; for any order N, the magnitude squared response has 2N – 1 zero derivatives at these locations (maximally flat at Ω = 0 and Ω = ∞). Response is monotonic overall, decreasing smoothly from Ω = 0 to Ω = ∞. $$\leftH(j\Omega )\right=1/\sqrt{2}$$ at Ω = 1.
The Chebyshev Type I filter minimizes the absolute difference
between the ideal and actual frequency response over the entire passband
by incorporating an equal ripple of Rp
dB
in the passband. Stopband response is maximally flat. The transition
from passband to stopband is more rapid than for the Butterworth filter. $$\leftH(j\Omega )\right={10}^{\text{Rp}/20}$$ at Ω = 1.
The Chebyshev Type II filter minimizes the
absolute difference between the ideal and actual frequency response
over the entire stopband by incorporating an equal ripple of Rs
dB in the stopband. Passband response is maximally flat.
The stopband does not approach zero as quickly as the type I filter (and does not approach zero at all for evenvalued filter order n). The absence of ripple in the passband, however, is often an important advantage. $$\leftH(j\Omega )\right={10}^{\text{Rs}/20}$$ at Ω = 1.
Elliptic filters are equiripple in both the passband and stopband.
They generally meet filter requirements with the lowest order of any
supported filter type. Given a filter order n,
passband ripple Rp
in decibels, and stopband ripple Rs
in
decibels, elliptic filters minimize transition width. $$\leftH(j\Omega )\right={10}^{\text{Rp}/20}$$ at Ω = 1.
Analog Bessel lowpass filters have maximally flat group delay at zero frequency and retain nearly constant group delay across the entire passband. Filtered signals therefore maintain their waveshapes in the passband frequency range. Frequency mapped and digital Bessel filters, however, do not have this maximally flat property; this toolbox supports only the analog case for the complete Bessel filter design function.
Bessel filters generally require a higher filter order than other filters for satisfactory stopband attenuation. $$\leftH(j\Omega )\right<1/\sqrt{2}$$ at Ω = 1 and decreases as filter order n increases.
The lowpass filters shown above were created with the analog
prototype functions besselap
, buttap
, cheb1ap
, cheb2ap
, and ellipap
.
These functions find the zeros, poles, and gain of an n
thorder
analog filter of the appropriate type with a cutoff frequency of 1 rad/s. The complete filter design functions (besself
, butter
, cheby1
, cheby2
,
and ellip
) call the prototyping
functions as a first step in the design process. See Special Topics in IIR Filter Design for details.
To create similar plots, use n
= 5
and, as needed, Rp
= 0.5
and Rs
= 20
. For example,
to create the elliptic filter plot:
[z,p,k] = ellipap(5,0.5,20); w = logspace(1,1,1000); h = freqs(k*poly(z),poly(p),w); semilogx(w,abs(h)), grid xlabel('Frequency (rad/s)') ylabel('Magnitude')
This toolbox uses the term direct methods to
describe techniques for IIR design that find a filter based on specifications
in the discrete domain. Unlike the analog prototyping method, direct
design methods are not constrained to the standard lowpass, highpass,
bandpass, or bandstop configurations. Rather, these functions design
filters with an arbitrary, perhaps multiband, frequency response.
This section discusses the yulewalk
function,
which is intended specifically for filter design; Parametric Modeling discusses
other methods that may also be considered direct, such as Prony's
method, Linear Prediction, the SteiglitzMcBride method, and inverse
frequency design.
The yulewalk
function designs
recursive IIR digital filters by fitting a specified frequency response.
yulewalk
's name reflects its
method for finding the filter's denominator coefficients: it finds the inverse
FFT of the ideal specified magnitudesquared response and solves the modified
YuleWalker equations using the resulting autocorrelation function samples. The
statement
[b,a] = yulewalk(n,f,m)
returns row vectors b
and a
containing the
n+1
numerator and denominator coefficients of the
n
thorder IIR filter whose frequencymagnitude
characteristics approximate those given in vectors f
and
m
. f
is a vector of frequency points
ranging from 0 to 1, where 1 represents the Nyquist frequency.
m
is a vector containing the specified magnitude response
at the points in f
. f
and
m
can describe any piecewise linear shape magnitude
response, including a multiband response. The FIR counterpart of this function
is fir2
, which also designs a filter
based on an arbitrary piecewise linear magnitude response. See FIR Filter Design for details.
Note that yulewalk
does
not accept phase information, and no statements are made about the
optimality of the resulting filter.
Design a multiband filter with yulewalk
and plot the specified
and actual frequency response:
m = [0 0 1 1 0 0 1 1 0 0]; f = [0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 1]; [b,a] = yulewalk(10,f,m); [h,w] = freqz(b,a,128) plot(f,m,w/pi,abs(h))
The toolbox function maxflat
enables
you to design generalized Butterworth filters, that is, Butterworth
filters with differing numbers of zeros and poles. This is desirable
in some implementations where poles are more expensive computationally
than zeros. maxflat
is just
like the butter
function, except
that it you can specify two orders (one for the
numerator and one for the denominator) instead of just one. These
filters are maximally flat. This means that the
resulting filter is optimal for any numerator and denominator orders,
with the maximum number of derivatives at 0 and the
Nyquist frequency ω = π both
set to 0.
For example, when the two orders are the same, maxflat
is
the same as butter
:
[b,a] = maxflat(3,3,0.25)
b = 0.0317 0.0951 0.0951 0.0317 a = 1.0000 1.4590 0.9104 0.1978
[b,a] = butter(3,0.25)
b = 0.0317 0.0951 0.0951 0.0317 a = 1.0000 1.4590 0.9104 0.1978
However, maxflat
is more
versatile because it allows you to design a filter with more zeros
than poles:
[b,a] = maxflat(3,1,0.25)
b = 0.0950 0.2849 0.2849 0.0950 a = 1.0000 0.2402
The third input to maxflat
is the
halfpower frequency, a frequency between
0 and 1 with a magnitude response of $$1/\sqrt{2}$$.
You can also design linear phase filters that have the maximally
flat property using the 'sym'
option:
maxflat(4,'sym',0.3)
ans = 0.0331 0.2500 0.4337 0.2500 0.0331
For complete details of the maxflat
algorithm,
see Selesnick and Burrus [2].