Bridging Analog and Digital
The previous lesson introduced three classical analog filter families — Butterworth, Chebyshev, and Elliptic — each with well-understood pole-zero placements in the s-plane. The question now is: how do we turn an analog filter H_a(s) into a digital filter H(z)? The answer used in virtually every practical IIR design is the bilinear transform.
The bilinear transform is a substitution that maps every point in the s-plane to a unique point on the unit circle of the z-plane — and vice versa. It guarantees that a stable analog filter (poles in the left half of the s-plane) always maps to a stable digital filter (poles inside the unit circle). There is no aliasing — a critical advantage over the earlier impulse invariant method.
The Substitution Formula
The bilinear transform replaces the complex frequency variable s with a function of z:
This substitution is algebraic and exact — no approximation is involved in the transform itself. The only imperfection introduced is a nonlinear warping of the frequency axis, which must be compensated for.
Frequency Warping
Evaluating the bilinear substitution on the unit circle (z = e^{jω}) reveals how analog frequencies Ω map to digital frequencies ω:
This compression is the source of frequency warping. Near DC (ω ≈ 0), the mapping is nearly linear: Ω ≈ ω/T. But as ω approaches π, the analog frequencies are dramatically compressed. A sharp cutoff at Ω_c in the analog domain corresponds to a different digital cutoff ω_c — they are not equal.
Frequency warping distorts the frequency axis — but for filters whose specifications are about passband and stopband edges rather than exact shape, this is acceptable. The equiripple or monotone character within each band is preserved. Only the transition edge locations shift. Pre-warping corrects exactly those edge locations.
Band character is preserved — only edge frequencies shiftPre-Warping Critical Frequencies
The solution to frequency warping is to pre-warp the analog prototype before applying the bilinear transform. If you want the digital filter to have its −3 dB point (or equiripple band edge) at digital frequency ω_c, you design the analog prototype with a cutoff at the pre-warped analog frequency:
Pre-warping ensures that one or two critical frequencies — the passband edge, the stopband edge, or the −3 dB point — land precisely in the right place after the bilinear transform compresses the frequency axis. All other frequencies will still be warped, but the specifications are met at the locations that matter.
The Complete Design Workflow
Combining analog prototype design with the bilinear transform gives a complete, practical IIR filter design procedure:
The result is a digital IIR filter whose magnitude response meets the original specifications exactly at the pre-warped critical frequencies. In practice, design tools (MATLAB's bilinear(), Python's scipy.signal.bilinear()) handle this algebra automatically.
Bilinear vs. Impulse Invariant
Before the bilinear transform became standard, engineers used the impulse invariant method — sampling the analog impulse response to create the digital filter. The bilinear transform is preferred for most applications because:
| Property | Impulse Invariant | Bilinear Transform |
|---|---|---|
| Aliasing | Yes — stopband aliases wrap around | None — complete s→z mapping |
| Frequency axis | Linear (but aliased) | Warped (but no aliasing) |
| Suitable filter types | Lowpass only (stopband must be negligible near Nyquist) | Any type — LP, HP, BP, BS |
| Impulse response | Preserved (sampled) | Changed by warping |
| Industry usage | Rare (historical) | Standard |
Highpass, Bandpass, and Bandstop Designs
The bilinear transform workflow is not limited to lowpass filters. For highpass, bandpass, and bandstop designs, an additional frequency transformation step is inserted between the analog lowpass prototype and the bilinear substitution:
butter(N,'high'), cheby1(N,Rp,'bandpass'), and scipy.signal.iirdesign() handle all transformations and bilinear mapping automatically.Stability and the Unit Circle
One of the most elegant properties of the bilinear transform is its stability guarantee. The left half of the s-plane (Re{s} < 0) maps exactly to the interior of the unit circle in the z-plane (|z| < 1). The imaginary axis (jΩ) maps to the unit circle itself (|z| = 1). The right half-plane maps outside the unit circle.
Because the bilinear transform is a one-to-one mapping between the s-plane and z-plane (excluding z = −1 ↔ s = ∞), a causal analog prototype that is stable — with all poles in the left half-plane — always produces a causal, stable digital filter with all poles inside the unit circle. No stability check is needed after the transformation.
Left half-plane → inside unit circle: stability is preserved by construction- The bilinear transform substitutes s = (2/T)(z−1)/(z+1) to map an analog prototype H_a(s) to a digital IIR filter H(z), with no aliasing.
- The mapping compresses the entire analog frequency axis (−∞ to +∞) into the digital range (−π to π) — creating frequency warping.
- Pre-warping corrects for this distortion: design the analog prototype at Ω_c = (2/T)·tan(ω_c·T/2) so the digital filter's critical frequency lands exactly where required.
- Stability is guaranteed: analog poles in the left half-plane always map to digital poles inside the unit circle.
- The bilinear transform superseded the impulse invariant method because it eliminates aliasing and works for all filter types — not just lowpass.
- Additional frequency transformations (LP→HP, LP→BP, LP→BS) can be composed with the bilinear transform to design any filter type from a lowpass prototype.
- In practice, the entire workflow (prototype design + pre-warping + bilinear + frequency transformation) is automated by
butter(),cheby1(),ellip(), and similar functions in MATLAB and SciPy.