DSP 101
M4 · Lab
Hands-on lab
Place a pole, watch the response move

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.

The transfer function
H(z) = g\,\frac{\prod_{k}(z - z_k)}{\prod_{k}(z - p_k)}

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.

1 / 7
DSP 101
M4 · Lab
Set it up
Pick a preset

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.

Set these values
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.

2 / 7
DSP 101
M4 · Lab
Step 1 of 3
A pole inside the circle

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.

Expected

The verdict reads STABLE: the largest pole radius is max|p_k| = 0.85, strictly inside the unit circle |z| = 1.

3 / 7
DSP 101
M4 · Lab
Step 2 of 3
A zero on the circle

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.

Expected

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.

4 / 7
DSP 101
M4 · Lab
Step 3 of 3
A pole on the circle

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.

Expected

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.

5 / 7
DSP 101
M4 · Lab
Your turn
Open the sandbox

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.

6 / 7
DSP 101
M4 · Lab
Wrap-up
What you did
  • 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
7 / 7
1 / 8 muted