Blog / Development

Poles, Zeros, and the Unit Circle: The Math Your EQ Doesn't Show You

Poles, Zeros, and the Unit Circle: The Math Your EQ Doesn't Show You

When you drag an EQ band to 2 kHz and crank the Q to 8, you're placing two complex numbers close to the boundary of an imaginary unit circle. Everything about how that band behaves, its center frequency, its sharpness, its gain, follows directly from where those numbers sit in a two-dimensional plane you've probably never seen.

This plane is called the Z-plane, and it governs every IIR filter in every EQ, compressor, and crossover plugin you've ever run. Here's what it actually looks like.

How the Z-Transform Frames the Problem

Analog filters live in the s-plane, defined by the Laplace transform. When Ragazzini and Zadeh introduced the Z-transform in their 1952 paper "The analysis of sampled-data systems," they gave engineers the equivalent tool for discrete-time systems. The Z-transform maps a sequence of audio samples to a complex function of a variable z, and the transfer function H(z) describes how a filter behaves at every frequency.

The key insight: if you draw H(z) on a 2D plane where z is a complex number, the filter's entire frequency response lives on a specific subset of that plane, the unit circle.

The Unit Circle Is the Frequency Axis

In the Z-plane, the unit circle is defined by |z| = 1. It's the circle of radius 1 centered at the origin. Points on this circle are written as z = e^(jω), where ω is angular frequency in radians per sample.

The mapping:

  • DC (0 Hz) sits at z = 1 (angle 0, rightmost point of the circle)
  • Nyquist (fs/2) sits at z = -1 (angle π, leftmost point)
  • Every audio frequency between DC and Nyquist corresponds to an arc along the upper half of the circle

The full frequency response of your filter is obtained by walking around this circle and measuring what H(z) does at each point. This is not a metaphor. The frequency response you see in your EQ curve is literally the value of H(z) evaluated at each point on the unit circle.

Poles: Where the Filter Resonates

The denominator of H(z) is a polynomial in z. Its roots are called poles. They are the values of z where the denominator goes to zero, meaning H(z) would go to infinity.

Now, a pole is never exactly on the unit circle in a working filter. It sits inside the circle, close to it. Here's what that position controls:

Angle sets the resonant frequency. A pole at angle θ creates a peak near the frequency ω = θ. Place a pole at angle corresponding to 1 kHz and you get a boost region near 1 kHz.

Radius sets the sharpness. A pole at radius r = 0.99 is very close to the unit circle. The filter gain peaks sharply near that frequency, producing a narrow, high-Q resonance. A pole at r = 0.5 is far from the unit circle, producing a broad, low-Q bump. This is what the Q knob in your parametric EQ is physically doing: moving a pole radially toward or away from the unit circle.

Stability requires poles inside the circle. A pole at exactly r = 1 produces infinite gain at that frequency. A pole at r > 1 means the filter is unstable: its impulse response grows without bound, turning a short transient into an exponentially increasing signal that clips immediately. Every IIR filter you use has its poles verified to be strictly inside the unit circle during design. If they weren't, the plugin would sound like digital destruction.

Zeros: Where the Filter Kills Frequencies

The numerator of H(z) also has roots, called zeros. Where poles amplify, zeros suppress. A zero at angle θ on the unit circle means the filter has zero gain at that frequency, a complete null. This is how notch filters work: place a zero directly on the unit circle at the target frequency and the response drops to silence there.

Zeros can also sit inside or outside the unit circle. Minimum-phase filters keep zeros inside. Linear-phase filters place zeros symmetrically inside and outside, which is why they always introduce ringing: the non-minimum-phase zeros create an inherently two-sided impulse response.

A typical shelving filter has its zeros clustered near the origin or at high angles, while its poles are near the frequency where the shelf transitions. The interaction between pole proximity and zero proximity determines the shelf slope.

The Biquad: Two Poles, Two Zeros, Everything

The second-order section, or biquad, is the universal building block of digital audio processing. Its transfer function is:

H(z) = (b0 + b1*z^-1 + b2*z^-2) / (1 + a1*z^-1 + a2*z^-2)

The denominator has exactly 2 roots: two poles, always appearing as complex conjugate pairs (pole at angle +θ, pole at angle -θ) for real-coefficient filters. The numerator has two zeros. That's it. Every band in your parametric EQ is one biquad. A 10-band EQ is 10 biquads running in series, each contributing one pair of poles and one pair of zeros to the total response.

In code, that translates to roughly 5 multiplications and 4 additions per sample per biquad section, which is why a 31-band graphic EQ runs comfortably on a 1990s processor.

The RBJ Cookbook: Translating Human Knobs to Z-Plane Coordinates

Nobody designs filters by placing poles and zeros manually. Instead, you specify human-readable parameters and a formula converts them to the polynomial coefficients that encode those pole-zero positions.

Robert Bristow-Johnson posted what became known as the Audio EQ Cookbook to the music-dsp mailing list in 2001. It provides closed-form biquad coefficient formulas for every common filter type: peaking EQ, lowpass, highpass, bandpass, notch, lowshelf, highshelf. The formulas derive from analog prototypes that are then digitized using the bilinear transform, which maps the s-plane to the Z-plane with frequency warping corrected.

The RBJ Cookbook is now part of the W3C Web Audio API specification. If you've used a parametric EQ in any DAW, browser, or mobile app, there is a high probability the underlying biquad coefficients came from those formulas.

Why High-Order Filters Cascade as Biquads

You might expect a 6th-order Butterworth lowpass filter to be implemented as one monolithic 6th-degree polynomial. It rarely is. Instead, it decomposes into three cascaded biquads.

The reason is numerical stability. When you quantize a 6th-order polynomial's coefficients to 32-bit or 64-bit floating-point, small rounding errors can push poles slightly outside the unit circle. The filter starts feeding back and becomes unstable. Biquad sections tolerate quantization far more gracefully because each section only has two poles, and their positions are less sensitive to coefficient rounding.

This is not a theoretical concern. Early hardware DSPs with 16-bit coefficients required careful ordering of biquad sections and gain scaling to avoid this. Even today, some embedded audio processors use 32-bit fixed-point arithmetic, where biquad stability under quantization is a real design constraint.

What Changes When You Touch a Knob

Now the EQ knob behavior makes geometric sense:

Adjusting center frequency rotates the poles around the unit circle. The angular position of the pole cluster tracks the frequency position of the peak.

Adjusting Q moves poles radially. Higher Q pushes them closer to the unit circle. Lower Q pulls them inward. The gain at the peak frequency scales with how close the pole is to the circle.

Adjusting gain (for peaking bands) adjusts the relative weight of poles vs zeros. In a boost, poles dominate near the target frequency. In a cut, zeros are placed closer to the unit circle at that frequency while poles sit further back.

The visual you're missing in every EQ plugin is a real-time pole-zero plot. A handful of tools, including MATLAB's Filter Visualization Tool and Julius O. Smith's online DSP textbooks at CCRMA Stanford (which include interactive examples), show this view. Opening one while adjusting a parametric band makes the abstraction concrete: you're doing geometry on a circle.

The unit circle was there the entire time.