Two poles in the plane of , and the impulse response they make. Watch what turning the pair does to the ringing, and what pulling it in does.
Where the pair sits is how h[n] moves
Poles re^{±jθ} of y[n] = 2r cos θ y[n−1] − r²y[n−2] + x[n], and its impulse response.
r = 0.9, θ = 30°: each sample h turns 30° and shrinks to 0.9 of its size. It rings once every 12 samples and takes 37 samples to fall to 2 %.
Describe this picture
Poles of , and its impulse response. Two panels: the plane, real part against imaginary part, with the unit circle labelled “unit circle”, and the stems of against sample from 0 to 24. A cross marks the upper pole, labelled “re^{jθ}”; its mirror, labelled “re^{−jθ}”, has its own colour. A dashed circle of radius passes through both poles, an arc labelled “θ” measures the angle from the real axis, and a circle at 0 is labelled “2 zeros”. The dashed curve labelled “envelope” is , and the key row names “h[n]” and “envelope”. Three readouts follow the frame: the pole, in a form like “0.90∠30.0°”, the samples per cycle, and when falls to 2 %, in a form like “n = 37.1”.
The clip starts at and (0.90∠30.0°, 12.0, n = 37.1): “r = 0.9, θ = 30°: each sample h turns 30° and shrinks to 0.9 of its size. It rings once every 12 samples and takes 37 samples to fall to 2 %.” The angle then eases to 90°, with the caption “Turning the pair: the ringing speeds up.”; at the hold (0.90∠90.0°, 4.0, n = 37.1): “Turn the pair to θ = 90°: now a cycle takes 4 samples. The radius did not change, so it dies just as slowly.” Last, the radius eases to 0.6, with the caption “Pulling the pair in: the ringing dies sooner.”; at the end (0.60∠90.0°, 4.0, n = 7.7): “Pull it in to r = 0.6: the same 4-sample ringing, gone within 8 samples. The angle sets the ringing; the radius sets how fast it dies.”
When the clip has finished, the upper pole becomes a handle named “Pole pair”, whose value text reads like “0.60∠90.0°, 4.0 samples per cycle”. The hint reads “Drag the upper pole, or use the arrow keys, to move the pair. The mirror pole follows.” Left and Right change by 5°, and Up and Down change by 0.01; runs from 0.3 to 0.95 and from 15° to 165°. After a drag, the caption at a key position is the one above; elsewhere it reads in the form “Pole 0.80∠45.0°: a cycle every 8.0 samples, down to 2 % by n = 17.5.”
From a difference equation to a transfer function
The z-transform (16.1) turned a sequence into a function of , and Properties and the inverse z-transform (16.2) gave the delay rule: a delay by one sample multiplies the transform by . This page uses that rule to read a system’s behaviour from one picture, the discrete twin of Poles, zeros and the s-plane (9.3).
Take a system with impulse response . Its z-transform is the transfer function. Convolution becomes a product, so and . You do not need to find it. Transform each term of the difference equation from Difference equations (6.1), turning every delay into , and divide:
The coefficients and are the ones SciPy’s lfilter(b, a, x) takes. On the unit circle, , this is the frequency response of Frequency response of discrete-time systems (12.4), .
Here is the equation from 6.1:
The input side has and . The output side moves to the left as . So .
Now multiply the top and bottom by the highest power of that appears. The zeros are the roots of the top: the values of where is 0. The poles are the roots of the bottom: the values where blows up. With a constant for the overall size,
When is not 0, . SciPy’s z, p, k = tf2zpk(b, a) returns the three at once. For this system the top is and the bottom is , so there is one zero at , one pole at and . To go back, multiply the factors out.
difference equation
y[n] = x[n] + 2x[n−1] + 0.5y[n−1]
transfer function
H(z) = (1 + 2z⁻¹)/(1 − 0.5z⁻¹)
The pole is the 0.5 in the loop, and it is also what contains. By the rule from 16.2, a pole at puts the term into . Here and for , so and .
Order 2 works the same way, by hand, with the quadratic formula. The bottom becomes . Its discriminant is , so the roots are complex: . Complex roots of a real polynomial come as mirror pairs, as in 9.3.
Where the pair sits is how h[n] moves
In 6.3 I wrote the recursion of a ringing system with a pole pair at angle . Here I write the angle , because now means the frequency of a test point on the circle. The recursion is
and its transfer function is . The bottom factors as , so the poles are . Multiplying the top and bottom by shows two zeros at .
The impulse response is . Each sample it turns by and shrinks by : the spiral of 6.3. A plucked string is the everyday case. Its pitch is the angle, and how long it sounds is the radius.
The picture at the top of this page moves such a pair. At and , each sample turns 30° and shrinks to 0.9 of its size: it rings once every 12 samples and takes 37 samples to fall to 2 %. Turned to , a cycle takes 4 samples. The radius did not change, so it dies just as slowly. Pulled in to , the same 4-sample ringing is gone within 8 samples. The angle sets the ringing; the radius sets how fast it dies.
Notice what each move changed. Turning the pair changed only how fast the response rings. Pulling it in changed only how fast it dies.
When the clip has finished, drag the upper pole to move the pair yourself; the mirror pole follows.
Here are the numbers behind the three key frames. For the bottom is , and the first eight values of are 1, 1.5588, 1.62, 1.2627, 0.6561, 0, −0.5314 and −0.8284, the numbers of 6.3. A cycle takes samples. The envelope falls to 2 % when , so . At the bottom is , and is 1, 0, −0.81, 0, 0.6561 and so on: four samples per cycle. At it is 1, 0, −0.36, 0, 0.1296 and the 2 % time is . The pair rings every 8 samples and reaches 2 % at .
A single real pole gives . A negative pole flips sign every sample, which is . The pole angle also has a frequency in hertz. A sample at rate is seconds long, and one turn of rad takes samples, so
At kHz a pole angle of rings at 2 kHz.
A pole close to the unit circle rings for a long time, nearly a steady tone. What happens on the circle, and beyond it, is the question of Stability and causality (16.4).
Arrows to the unit circle
Now the frequency response. At the test point , each factor is the arrow from the pole to the test point, by the nose-to-tail rule of Complex numbers for signals (3.3). Dividing complex numbers divides lengths, as in Fourier series and LTI systems (7.4). This is the rule of 9.3 with the spin-rate axis bent into a circle.
Take a resonator with poles . Choose the gain so that at . At the bottom is , so , and
On the circle, the size is
The two zeros at 0 are 1 away from every point of the circle, since . They change no size. SciPy sees them if you write the top as [K, 0, 0].
Watch the arrow to the upper pole as the test point walks round the circle: where it is shortest, the gain climbs.
Arrows to the unit circle
H(z) = 0.537/(1 − 1.273z⁻¹ + 0.81z⁻²), poles 0.9e^{±jπ/4}. The gain is 0.537 ÷ (product of the arrow lengths).
Ω = 0: both arrows are 0.733 long, so |H| = 0.537 ÷ (0.733 × 0.733) = 1.00.
Describe this picture
, with poles ; the gain is 0.537 ÷ (product of the arrow lengths). The plane shows the unit circle, the two poles labelled “0.9∠45°” and “0.9∠−45°”, a circle at 0 labelled “2 zeros”, and a filled dot, the test point, on the circle. An arrow runs from each pole to the test point, “to the upper pole” solid and “to the mirror pole” dashed, each with its length to three decimals. The gain panel plots gain from 0 to 4.5 against in rad/sample from 0 to , with the curve traced up to the current point. Two readouts sit in one row: the test point , in a form like “0.25π rad/sample”, and the gain .
At the start, (0 rad/sample, 1.00): “Ω = 0: both arrows are 0.733 long, so |H| = 0.537 ÷ (0.733 × 0.733) = 1.00.” The test point then eases toward the upper pole: “The test point nears the upper pole: its arrow shortens, and |H| climbs.” At the hold, , the poles’ angle (0.25π rad/sample, 3.99): “Ω = 0.25π, the poles’ angle: the short arrow is 0.100, just 1 − r, and |H| = 3.99, near its peak.” Then: “Past the pole both arrows grow, and |H| falls.” At the end, (1.00π rad/sample, 0.17): “Ω = π: both arrows are 1.756 long, and |H| = 0.17. The gain is high only where the walk passes close to a pole.”
When the clip has finished, the test point is a handle named “Test point Ω”, whose value text reads like “0.50π rad/sample, |H| = 0.42”. It moves along the upper half of the circle, from 0 to in steps of , and the hint reads “Drag the test point round the circle, or use the arrow keys (0 to π).” After a drag, the caption reads in the form “Ω = 0.50π: arrows 0.733 and 1.756, |H| = 0.42.”
At both arrows are 0.733 long, so . As the test point nears the upper pole, its arrow shortens and climbs. At , the poles’ angle, the short arrow is just long, and , near its peak. Past the pole both arrows grow, and falls. At both arrows are 1.756 long, and . The gain is high only where the walk passes close to a pole.
When the clip has finished, drag the test point round the circle to read the gain anywhere.
The gain numbers at the other test points, for : at the arrows are 0.3834 and 1.0589, and . At they are 0.7329 and 1.7558, and . At they are 1.3454 and 1.9000, and . At , , which is dB.
The true peak, 4.00, is not at the pole’s angle. It is at , a little before it, because the arrow to the mirror pole is still growing as you walk. This is the point of 9.3 §3 again. The peak is at , which is here, and freqz gives the same. The half-power band, where is at least the peak divided by , runs from to . Its width is rad/sample, close to . Resonators, notches and combs (17.4) uses that rule.
The angle of follows the same picture: the angles of the zero arrows minus the angles of the pole arrows. The two zeros at 0 each have arrow angle , so they add . At the arrow to the upper pole points at and the arrow to the mirror pole at . So
A zero on the circle makes a zero arrow of length 0, so there. That is the notch of 17.4.
The maths behind it · characteristic polynomials
The bottom polynomial is the characteristic polynomial of the recursion’s 2×2 state matrix, and the poles are its eigenvalues. A real matrix has complex eigenvalues only in mirror pairs, which is why the poles of a real system pair up.
The maths behind it · autoregressive spectra
An autoregressive model of a random series, , has these poles. A pair close to the unit circle gives the series’ spectrum a sharp peak at the pole’s angle: this lesson’s walk, fed with noise.
Worked example
Go the other way: from poles to an equation. Place a pair at . The bottom is . Here and , so
The peak of its gain sits near , which is in hertz. At kHz that is 1 kHz. The pair is closer to the circle than the pair of 0.9, so the peak is narrower: its width is about rad/sample.
Where you will meet this
Every digital filter is a transfer function, and its design is a placement of poles and zeros: a pole near the circle for a peak, a zero on it for a notch. The same placement builds the resonators and combs of Resonators, notches and combs (17.4). All-pass systems (17.1) and Minimum phase (17.2) read the phase and the size from the same plane.
Reference card
| Quantity | Formula | Notes |
|---|---|---|
| Transfer function | , | the z-transform of |
| Factored | SciPy z, p, k = tf2zpk(b, a); | |
| Frequency response | at | freqz(b, a) |
| Pole pair | for | rings every samples; envelope |
| Pole angle in hertz | at 8 kHz: 2 kHz | |
| Gain from arrows | zeros at 0 change no size | |
| Phase from arrows | zero-arrow angles minus pole-arrow angles | plus per extra zero at 0 |
| Resonator peak | near the pole’s angle; width about rad/sample | 17.4 |