collapse all

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*^{jω}, 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.

`bilinear`

uses one of two algorithms depending on the format of the
input linear system you supply. One algorithm works on the zero-pole-gain format and the other
on the state-space format. For transfer function representations, `bilinear`

converts to state-space form, performs the transformation, and converts the resulting
state-space system back to transfer function form.

### Zero-Pole-Gain Algorithm

For a system in zero-pole-gain form, `bilinear`

performs four
steps:

If `fp`

is present, it prewarps:

fp = 2*pi*fp;
fs = fp/tan(fp/fs/2)

otherwise, `fs = 2*fs`

.

It strips any zeros at ±∞ using

It transforms the zeros, poles, and gain using

pd = (1+p/fs)./(1-p/fs); % Do bilinear transformation
zd = (1+z/fs)./(1-z/fs);
kd = real(k*prod(fs-z)./prod(fs-p));

It adds extra zeros at -1 so the resulting system has equivalent numerator and
denominator order.

### State-Space Algorithm

An analog system in state space form is given by

. This system is converted to the discrete form using state-space
equations as follows:

To convert an analog system in state-space form,
`bilinear`

performs two steps:

If `fp`

is present, let

If `fp`

is not present, let λ=*fs*.

Compute `Ad`

, `Bd`

, `Cd`

, and
`Dd`

in terms of `A`

, `B`

,
`C`

, and `D`

using

### Transfer Function

For a system in transfer function form, `bilinear`

converts 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 sample rate 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.