Discrete-Time Z-Transform Pole-Zero Calculator
Find the poles and zeros of a 2nd-order discrete-time transfer function H(z), with a unit-circle stability verdict and a plotted pole-zero map on the z-plane.
⭕ What is a Discrete-Time Z-Transform Pole-Zero Analysis?
The discrete-time z-transform pole-zero analysis finds the values of the complex variable z where a discrete-time transfer function H(z) = N(z)/D(z) has its poles (roots of the denominator D(z) = 0) and zeros (roots of the numerator N(z) = 0). This is the exact discrete-time counterpart of continuous-time pole-zero analysis on a transfer function G(s), except the variable is z instead of s, and the stability test changes from a left-half-plane check to a unit-circle check. Poles still determine the system's natural, unforced response and its stability; zeros still shape the transient behavior without affecting whether the system is stable.
Digital control engineers use z-domain pole-zero analysis whenever a controller, filter, or plant model is implemented as a difference equation running on a microcontroller, DSP, or PLC rather than as continuous analog hardware. A digital filter designer checks that every pole of a newly designed IIR filter sits inside the unit circle before deploying it, since a single pole outside would make the filter's output grow without bound on real hardware. An engineer converting an analog PID controller to a digital equivalent (often via the bilinear transform) checks the resulting discrete poles to confirm the conversion preserved stability. Anyone debugging an oscillating or diverging digital control loop starts the same way as in continuous time, by finding the poles and reading their magnitudes.
A common point of confusion is assuming the same left-half-plane stability rule from continuous time carries over directly to discrete time. It does not: the z-plane stability boundary is the unit circle |z| = 1, not the imaginary axis. A discrete pole at z = -0.5, for example, sits well inside the unit circle and is perfectly stable, even though it is a negative real number and would look unusual if you tried to apply an s-plane intuition to it directly. The relationship z = e^(sT) explains why: the continuous imaginary axis (Re(s) = 0) maps to |z| = 1 under this exponential mapping, and the continuous left-half-plane (Re(s) less than 0) maps to the interior of the unit circle.
This calculator takes the six coefficients of a general 2nd-order discrete-time transfer function H(z), computes its poles and zeros using the quadratic formula (handling both real and complex-conjugate cases, exactly like the continuous-time version), states a clear stability verdict using the unit-circle test, and plots every pole and zero on a pole-zero map with the unit circle drawn as the stability boundary so you can see their position at a glance.
📐 Formula
📖 How to Use This Calculator
Steps
💡 Example Calculations
Example 1 — Real Zeros and Poles, Stable
N(z) = z² − 0.3z + 0.02, D(z) = z² − 0.9z + 0.2
Example 2 — Complex Zeros and Poles, Stable
N(z) = z² + 0.25, D(z) = z² − z + 0.5
Example 3 — Unstable System (Pole Outside the Unit Circle)
N(z) = z² − z, D(z) = z² − 2.5z + 1
❓ Frequently Asked Questions
🔗 Related Calculators
What are poles and zeros of a discrete-time transfer function?
Poles are the values of z that make the denominator D(z) of H(z) = N(z)/D(z) equal to zero, and zeros are the values of z that make the numerator N(z) equal to zero. Poles determine a discrete-time system's stability and natural response; zeros shape the transient response, exactly as in the continuous-time s-domain case.
How do you find the poles of a discrete-time transfer function?
Set the denominator equal to zero and solve. For a 2nd-order denominator a2*z^2 + a1*z + a0, use the quadratic formula: z = (-a1 plus-or-minus sqrt(a1^2 - 4*a2*a0)) / (2*a2). If the discriminant is negative, the poles are a complex-conjugate pair, just as in the continuous-time case.
What determines if a discrete-time system is stable from its poles?
A discrete-time linear time-invariant system is stable if and only if every pole lies strictly inside the unit circle, meaning its magnitude |z| is less than 1. This unit-circle test is the direct discrete-time analog of the continuous-time left-half-plane test.
Why is the unit circle the stability boundary instead of the imaginary axis?
The z-plane pole locations relate to continuous-time s-plane poles by z = e^(sT), where T is the sample period. The imaginary axis (Re(s) = 0, the continuous stability boundary) maps under this exponential relationship to |z| = 1, the unit circle, which is why discrete-time stability uses |z| less than 1 instead of Re(s) less than 0.
What does a pole exactly on the unit circle mean?
A pole with magnitude exactly 1 (sitting on the unit circle) produces a response that oscillates or holds at constant amplitude forever, neither decaying nor growing. This is marginally stable, the boundary case between stable and unstable, the same physical meaning as a continuous-time pole on the imaginary axis.
Do zeros affect the stability of a discrete-time system?
No. Stability is determined entirely by the poles (the denominator's roots), never by the zeros (the numerator's roots). Zeros shape the transient response, such as overshoot in the step response, but a discrete-time system is exactly as stable or unstable as its poles say.
How is this different from the continuous-time Transfer Function Poles and Zeros Calculator?
The math for finding the roots is identical, the quadratic formula applied to numerator and denominator coefficients. The difference is entirely in the stability test: continuous-time systems are stable when every pole has a negative real part (left-half s-plane), while discrete-time systems are stable when every pole has magnitude less than 1 (inside the unit circle in the z-plane).
What order discrete-time transfer function does this calculator support?
This calculator handles a general 2nd-order H(z), with up to two poles and two zeros. Setting the leading coefficient (a2 or b2) to zero drops that polynomial to 1st order, giving a single real pole or zero instead of a pair, the same convention used by the continuous-time version.
Why do complex poles always appear in conjugate pairs in the z-domain?
For a z-transform with real-valued coefficients, complex roots of a polynomial always occur in conjugate pairs (a+bj and a-bj together), a direct consequence of the quadratic formula applied to real coefficients. This guarantees the system's discrete-time response stays real-valued, the same reasoning as the continuous-time s-domain case.
How does a pole's distance from the unit circle relate to its decay rate?
A real pole at z = r (between 0 and 1) corresponds to a time-domain term that decays like r^n, where n is the sample index. A pole close to the origin (small r) decays quickly within a few samples, while a pole close to the unit circle (r near 1) decays slowly, taking many samples to die out.