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.

Bilinear transformation method for analog-to-digital filter conversion

`[zd,pd,kd] = bilinear(z,p,k,fs) `

[zd,pd,kd] = bilinear(z,p,k,fs,fp)

[numd,dend] = bilinear(num,den,fs)

[numd,dend] = bilinear(num,den,fs,fp)

[Ad,Bd,Cd,Dd] = bilinear(A,B,C,D,fs)

[Ad,Bd,Cd,Dd] = bilinear(A,B,C,D,fs,fp)

The *bilinear transformation* is a mathematical
mapping of variables. In digital filtering, it is a standard method
of mapping the *s* or analog plane into the *z* or
digital plane. It transforms analog filters, designed using classical
filter design techniques, into their discrete equivalents.

The bilinear transformation maps the *s*-plane
into the *z*-plane by

$${H(z)=H(s)|}_{s=2{f}_{s}\frac{z-1}{z+1}}.$$

This transformation maps the *j*Ω axis
(from Ω = –∞
to +∞) repeatedly around the unit circle (*e ^{jw}*,
from

$$\omega =2{\mathrm{tan}}^{-1}\left(\frac{\Omega}{2{f}_{s}}\right).$$

`bilinear`

can accept an optional parameter `Fp`

that
specifies prewarping. `fp`

, in hertz, indicates a
“match” frequency, that is, a frequency for which the
frequency responses before and after mapping match exactly. In prewarped
mode, the bilinear transformation maps the *s*-plane
into the *z*-plane with

$${H(z)=H(s)|}_{s=\frac{2\pi {f}_{p}}{\mathrm{tan}\left(\pi \frac{{f}_{p}}{{f}_{s}}\right)}\frac{z-1}{z+1}}.$$

With the prewarping option, `bilinear`

maps
the *j*Ω axis (from Ω = –∞ to +∞) repeatedly around the unit
circle (*e ^{jω}*, from

$$\omega =2{\mathrm{tan}}^{-1}\left(\frac{\Omega \mathrm{tan}\left(\pi \frac{{f}_{p}}{{f}_{s}}\right)}{2\pi {f}_{p}}\right).$$

In prewarped mode, `bilinear`

matches the frequency
2*πf*_{p} (in radians per
second) in the *s*-plane to the normalized frequency
2*πf*_{p}/*f*_{s} (in
radians per second) in the *z*-plane.

The `bilinear`

function works with three different
linear system representations: zero-pole-gain, transfer function,
and state-space form.

`[zd,pd,kd] = bilinear(z,p,k,fs) `

and

`[zd,pd,kd] = bilinear(z,p,k,fs,fp) `

convert the *s*-domain transfer function specified
by `z`

, `p`

, and `k`

to
a discrete equivalent. Inputs `z`

and `p`

are
column vectors containing the zeros and poles, `k`

is
a scalar gain, and `fs`

is the sampling frequency
in hertz. `bilinear`

returns the discrete equivalent
in column vectors `zd`

and `pd`

and
scalar `kd`

. The optional match frequency, `fp`

is
in hertz and is used for prewarping.

`[numd,dend] = bilinear(num,den,fs)`

and

`[numd,dend] = bilinear(num,den,fs,fp)`

convert
an *s*-domain transfer function given by `num`

and `den`

to
a discrete equivalent. Row vectors `num`

and `den`

specify
the coefficients of the numerator and denominator, respectively, in
descending powers of *s*. Let *B*(*s*)
be the numerator polynomial and *A*(*s*)
be the denominator polynomial. The transfer function is:

$$\frac{B(s)}{A(s)}=\frac{B(1){s}^{n}+\cdots +B(n)s+B(n+1)}{A(1){s}^{m}+\cdots +A(m)s+A(m+1)}$$

`fs`

is the sampling frequency in hertz. `bilinear`

returns
the discrete equivalent in row vectors `numd`

and `dend`

in
descending powers of *z* (ascending
powers of *z*^{–1}). `fp`

is
the optional match frequency, in hertz, for prewarping.

`[Ad,Bd,Cd,Dd] = bilinear(A,B,C,D,fs)`

and

`[Ad,Bd,Cd,Dd] = bilinear(A,B,C,D,fs,fp)`

convert
the continuous-time state-space system in matrices `A`

, `B`

, `C`

, `D`

$$\begin{array}{l}\dot{x}=Ax+Bu\\ y=Cx+Du\end{array}$$

to the discrete-time system:

$$\begin{array}{l}x[n+1]={A}_{d}x[n]+{B}_{d}u[n],\\ y[n]\text{}={C}_{d}x[n]+{D}_{d}u[n].\end{array}$$

`fs`

is the sampling frequency in hertz. `bilinear`

returns
the discrete equivalent in matrices `Ad`

, `Bd`

, `Cd`

, `Dd`

.
The optional match frequency, `fp`

is in hertz and
is used for prewarping.

`bilinear`

requires that the numerator order
be no greater than the denominator order. If this is not the case, `bilinear`

displays

Numerator cannot be higher order than denominator.

For `bilinear`

to distinguish between the zero-pole-gain
and transfer function linear system formats, the first two input parameters
must be vectors with the same orientation in these cases. If this
is not the case, `bilinear`

displays

First two arguments must have the same orientation.

[1] Parks, Thomas W., and C. Sidney Burrus. *Digital
Filter Design*. New York: John Wiley & Sons, 1987,
pp. 209–213.

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