## Documentation Center |

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

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

`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

With the prewarping option, `bilinear` maps
the *j*Ω axis (from Ω = –∞ to +∞) repeatedly around the unit
circle (*e ^{jw}*, from ω = –π to π) by

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:

`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`

to the discrete-time system:

`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.

Was this topic helpful?