Place poles and zeros on the z-plane in the sandbox and predict, before you read it, how each one bends the magnitude response and whether the filter stays stable.
A pole near the unit circle lifts the response into a peak; a zero on the circle pulls it to a true null; a pole outside the circle makes the filter blow up. Reading a pole-zero plot at a glance is how engineers see what a filter does before computing anything.
Open the sandbox. Each step below names a Filter form preset from the dropdown — set that preset, keep the conjugate-pair lock on so the coefficients stay real, and read the verdict panel and the magnitude plot.
Filter form -> pick the preset each step names
conjugate-pair lock -> on (keeps coefficients real)
Each preset prints its own pole and zero placement in the panel beside the dropdown, so you never accept a placement on trust.
Select the Single-pole lowpass preset — one pole at r = 0.85 on the real axis. Predict whether h[n] settles or blows up, then read the verdict panel.
The verdict reads STABLE: the largest pole radius is max|p_k| = 0.85, strictly inside the unit circle |z| = 1.
Select the Notch (bandstop) at 0.25π preset — a conjugate zero pair sits exactly on the unit circle at ω = 0.25π. Predict |H| at that frequency, then read the magnitude plot.
The magnitude plot shows |H(e^{jω})| = 0 at ω = 0.25π — a zero sitting on the circle pulls the response down to a true null.
Select the Marginally stable preset — the pole pair moves out to exactly r = 1, onto the unit circle. Predict the stability verdict, then read the panel.
The verdict reads MARGINALLY STABLE: max|p_k| = 1, exactly on the circle, so h[n] rings forever at constant amplitude — an oscillator, not a working filter.
Everything above is waiting in the sandbox. Drag the poles and zeros yourself, turn on the |H(z)| heat map, and watch the response, the phase and the impulse response all move at once.
- Read a STABLE verdict from max|p_k| = 0.85 inside the circle
- Saw a zero on the circle force a true null, |H| = 0 at 0.25π
- Found the marginal boundary at max|p_k| = 1, exactly on the circle
- Every verdict you predicted is the demo's own complex arithmetic, not a picture