Note: This page has been translated by MathWorks. Click here to see

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

Kaiser window FIR filter design estimation parameters

`[n,Wn,beta,ftype] = kaiserord(f,a,dev)`

[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)

c = kaiserord(f,a,dev,fs,'cell')

`kaiserord`

returns a filter order `n`

and `beta`

parameter
to specify a Kaiser window for use with the `fir1`

function.
Given a set of specifications in the frequency domain, `kaiserord`

estimates
the minimum FIR filter order that will approximately meet the specifications. `kaiserord`

converts
the given filter specifications into passband and stopband ripples
and converts cutoff frequencies into the form needed for windowed
FIR filter design.

`[n,Wn,beta,ftype] = kaiserord(f,a,dev)`

finds
the approximate order `n`

, normalized frequency band
edges `Wn`

, and weights that meet input specifications `f`

, `a`

,
and `dev`

. `f`

is a vector of band
edges and `a`

is a vector specifying the desired
amplitude on the bands defined by `f`

. The length
of `f`

is twice the length of `a`

,
minus 2. Together, `f`

and `a`

define
a desired piecewise constant response function. `dev`

is
a vector the same size as `a`

that specifies the
maximum allowable error or deviation between the frequency response
of the output filter and its desired amplitude, for each band. The
entries in `dev`

specify the passband ripple and
the stopband attenuation. You specify each entry in `dev`

as
a positive number, representing absolute filter gain (not in decibels).

If, in the vector `dev`

, you specify unequal
deviations across bands, the minimum specified deviation is used,
since the Kaiser window method is constrained to produce filters with
minimum deviation in all of the bands.

`fir1`

can use the resulting
order `n`

, frequency vector `Wn`

,
multiband magnitude type `ftype`

, and the Kaiser
window parameter `beta`

. The `ftype`

output
argument is intended for use with `fir1`

;
it is equal to `'high'`

for a highpass filter and `'stop'`

for
a bandstop filter. For multiband filters, it can be equal to `'DC-0'`

when
the first band is a stopband (starting at *f* = 0) or `'DC-1'`

when
the first band is a passband.

To design an FIR filter `b`

that approximately
meets the specifications given by `kaiser`

parameters `f`

, `a`

,
and `dev`

, use the following command.

b = fir1(n,Wn,kaiser(n+1,beta),ftype,'noscale')

`[n,Wn,beta,ftype] = kaiserord(f,a,dev,fs)`

uses
a sampling frequency `fs`

in Hz. If you don't specify
the argument `fs`

, or if you specify it as the empty
vector `[]`

, it defaults to 2 Hz,
and the Nyquist frequency is 1 Hz. You can use this
syntax to specify band edges scaled to a particular application's
sampling frequency. The frequency band edges in `f`

must
be from 0 to `fs`

/2.

`c = kaiserord(f,a,dev,fs,'cell')`

is
a cell-array whose elements are the parameters to `fir1`

.

In some cases, `kaiserord`

underestimates or
overestimates the order `n`

. If the filter does not
meet the specifications, try a higher order such as `n+1`

, `n+2`

,
and so on, or a try lower order.

Results are inaccurate if the cutoff frequencies are near 0
or the Nyquist frequency, or if `dev`

is large (greater
than 10%).

Be careful to distinguish between the meanings of filter length
and filter order. The filter *length* is the number
of impulse response samples in the FIR filter. Generally, the impulse
response is indexed from *n* = 0 to *n* = *L*–1
where *L* is the filter length. The filter *order* is
the highest power in a *z*-transform representation
of the filter. For an FIR transfer function, this representation is
a polynomial in *z*, where the highest
power is *z*^{L}^{–1} and
the lowest power is *z*^{0}.
The filter order is one less than the length (*L*–1)
and is also equal to the number of zeros of the *z* polynomial.

`kaiserord`

uses empirically derived formulas
for estimating the orders of lowpass filters, as well as differentiators
and Hilbert transformers. Estimates for multiband filters (such as
bandpass filters) are derived from the lowpass design formulas.

The design formulas that underlie the Kaiser window and its application to FIR filter design are

$$\beta =\{\begin{array}{ll}0.1102(\alpha -8.7),\hfill & \alpha >50\hfill \\ 0.5842{(\alpha -21)}^{0.4}+0.07886(\alpha -21),\hfill & 21\le \alpha \le 50\hfill \\ 0,\hfill & \alpha <21\hfill \end{array}$$

where α = –20log_{10}δ
is the stopband attenuation expressed in decibels (recall that δ_{p} = δ_{s} is
required).

The design formula is

$$n=\frac{\alpha -7.95}{2.285(\Delta \omega )}$$

where *n* is the filter order and Δω
is the width of the smallest transition region.

[1] Kaiser, James F. “Nonrecursive
Digital Filter Design Using the I_{0}-sinh Window
Function.” *Proceedings of the 1974 IEEE International
Symposium on Circuits and Systems.* 1974, pp. 20–23.

[2] Digital Signal Processing Committee of
the IEEE Acoustics, Speech, and Signal Processing Society, eds. *Selected
Papers in Digital Signal Processing*. Vol. II. New York:
IEEE Press, 1976, pp. 123–126.

[3] Oppenheim, Alan V., Ronald W. Schafer,
and John R. Buck. *Discrete-Time Signal Processing.* Upper
Saddle River, NJ: Prentice Hall, 1999.