Cascade (series) realization factors a high-order transfer function into lower-order sections (typically 1st or 2nd order) connected in sequence. Each output feeds the next section's input. This structure reduces computational complexity, improves numerical stability, and allows independent design of sections. Pole and zero pairing significantly affects noise and overflow behavior.
Factor a 4th-order transfer function into two 2nd-order sections. Implement both forms and compare outputs with finite-precision arithmetic.
From your study of transfer functions, you know that a filter is completely characterized by its poles and zeros, and that an Nth-order transfer function H(z) is a ratio of polynomials of degree N in z. For first- or second-order filters, implementing this directly as a difference equation is straightforward. For higher-order filters — 8th, 10th, or 16th-order designs are common in practice — implementing H(z) as a single monolithic difference equation creates serious numerical problems. Small errors in the coefficients, unavoidable in finite-precision arithmetic, shift the poles and zeros, and for a high-degree polynomial a tiny coefficient error can move a pole outside the unit circle and cause instability. Cascade realization is the primary strategy for defeating this problem.
The core idea is factoring. Any Nth-order H(z) can be written as a product of lower-order sections: H(z) = H₁(z) · H₂(z) · ... · H_K(z), where each Hₖ(z) is first or second order. Each section is implemented as its own small, stable filter, and the sections are connected in series — the output of each section feeds the input of the next. Because polynomial root sensitivity decreases dramatically with polynomial degree, a 2nd-order section with 3 coefficients has far better numerical behavior than a 10th-order section with 11 coefficients. The overall frequency response is unchanged by the factoring — products of transfer functions in the z-domain correspond exactly to cascading in signal flow — but the computational structure is far more robust.
The non-obvious design choice is pole-zero pairing and section ordering. In principle, any pole pair can be combined with any zero pair; all pairings produce the same mathematical response. In practice with finite-word-length arithmetic, pairings affect the intermediate signal levels between sections. The goal is to prevent intermediate signals from overflowing the register or being buried in round-off noise. A practical rule: pair each pole pair with the zero pair closest to it in the z-plane, which tends to keep each section's gain near unity. For ordering, a common heuristic is to place sections with poles closest to the unit circle — highest Q, most resonant — in the middle of the chain, after early sections have shaped the signal and before output stages.
Second-order sections, called biquads (from "biquadratic" — H(z) is a ratio of two second-degree polynomials in z), are the universal building block. A biquad has the form H(z) = (b₀ + b₁z⁻¹ + b₂z⁻²) / (1 + a₁z⁻¹ + a₂z⁻²), with five coefficients controlling one complex-conjugate pole pair and one complex-conjugate zero pair. Any even-order filter factors exactly into biquads; odd-order filters add one first-order section. Standard DSP processors include hardware optimized specifically for biquad computation, making cascade structures not only numerically superior but computationally efficient in practice.