Z-Transform and ROC
The -transform is the discrete-time counterpart of the Laplace transform. It represents sequences using the complex variable and provides a natural language for recursive difference equations, digital filters, poles, zeros, stability, and causality. The DTFT is obtained by evaluating the -transform on the unit circle when that circle lies in the region of convergence.
As with the Laplace transform, the region of convergence is part of the answer. The same rational expression can describe a right-sided sequence, a left-sided sequence, or a two-sided sequence depending on the ROC. In digital signal processing, many system questions reduce to locating poles relative to the unit circle.
Definitions
The bilateral -transform of a sequence is
The unilateral -transform is
The bilateral transform is used for signal and LTI system properties. The unilateral transform is useful for solving difference equations with initial conditions.
The region of convergence, or ROC, is the set of values for which the sum converges. For rational transforms, the ROC is an annulus centered at the origin:
possibly with or . The ROC never includes poles.
The DTFT is obtained on the unit circle if lies in the ROC:
Important transform pairs include, for ,
and, for ,
Again, the expression is identical but the ROC and sequence are different.
For an LTI system with impulse response , the system function is
If , then
with ROC at least including the intersection of the ROCs, except for possible pole-zero cancellations.
Key results
Linearity:
Time shifting:
with possible ROC changes at or depending on finite-length terms.
Multiplication by :
Time reversal:
Convolution:
For rational ,
Poles are values of where becomes unbounded; zeros are values where it becomes zero. In digital filters, zeros can create frequency nulls and poles can create resonances or instability.
For a causal rational LTI system, the ROC is outside the outermost pole. For a left-sided anti-causal system, the ROC is inside the innermost pole. For a two-sided sequence, the ROC is an annulus between pole radii.
BIBO stability for a discrete-time LTI system requires absolute summability:
In -transform terms, for rational systems, stability is equivalent to the unit circle being in the ROC. If the system is both causal and rational, then stability is equivalent to all poles lying strictly inside the unit circle:
The frequency response of a stable system is
This provides a direct bridge from pole-zero diagrams to filter magnitude and phase.
The shape of the ROC follows from powers of . For a right-sided sequence, convergence depends on large positive , so the ROC is outside the largest active pole. For a left-sided sequence, convergence depends on large negative , so the ROC is inside the smallest active pole. For a two-sided sequence, both tails must converge, so the ROC is an annulus between pole radii.
Finite-length sequences are special. A finite right-sided sequence has a -transform that is a polynomial in , so it has no finite poles except possibly at depending on how the expression is written. Such FIR systems are BIBO stable because their impulse responses are absolutely summable. Recursive IIR systems can be stable too, but only if their pole and ROC conditions satisfy the unit-circle test.
Pole-zero diagrams are qualitative frequency-response tools. A point on the unit circle near a pole usually gives a large magnitude because the denominator is small. A point on the unit circle near a zero usually gives a small magnitude because the numerator is small. Exact zeros on the unit circle create exact frequency nulls.
The variable also encodes delay naturally. A factor of represents a one-sample delay in a transfer function. This is why digital filters are commonly written as polynomials in : the coefficients directly multiply present and delayed samples in a difference equation. Reading powers of as delays helps connect algebraic expressions to block diagrams.
As with the Laplace transform, repeated poles produce polynomial factors in the sequence. A repeated pole at can create terms like . The pole magnitude still controls exponential decay or growth, while the polynomial factor changes the transient envelope.
Visual
z-plane ROC examples
right-sided sequence: two-sided sequence: left-sided sequence:
pole radius r r1 < |z| < r2 pole radius r
(x) (x) (x) (x)
| | | |
+==== ROC outward +== ROC ==+ ROC inward ====+
The unit circle must lie in the ROC for the DTFT to exist.
| Sequence/system type | ROC shape | Stability condition | Causality clue |
|---|---|---|---|
| Right-sided | stable if | causal candidate | |
| Left-sided | stable if | anti-causal candidate | |
| Two-sided sequence | annulus between poles | unit circle inside annulus | noncausal |
| Causal rational LTI | outside outermost pole | all poles inside unit circle | causal |
| FIR filter | whole plane except maybe | always stable if finite coefficients | causal if right-sided |
Worked example 1: same rational expression, different sequence
Problem: Interpret
for two possible ROCs.
Method:
- Identify the pole. The denominator is zero when
Multiply by :
so the pole is
- If the ROC is
the sequence is right-sided:
- If the ROC is
the sequence is left-sided:
- Check the right-sided case:
which converges when
Checked answer: Both sequences share the same rational expression. The ROC determines whether the sequence is right-sided or left-sided.
Worked example 2: stability of a causal digital filter
Problem: A causal LTI system has
Determine whether it is stable.
Method:
- Find the poles by solving
- Multiply by :
- Factor:
- The poles are
- Because the system is causal, the ROC is outside the outermost pole:
- The unit circle lies in this ROC.
Checked answer: The system is BIBO stable. For a causal rational system, the same conclusion follows from the pole magnitudes:
Both poles are inside the unit circle.
Code
import numpy as np
import matplotlib.pyplot as plt
# H(z)=1/(1 - 1.2 z^-1 + 0.32 z^-2)
den = np.array([1.0, -1.2, 0.32])
poles = np.roots(den)
print("poles:", poles)
print("causal stable:", np.all(np.abs(poles) < 1))
Omega = np.linspace(-np.pi, np.pi, 1000)
z = np.exp(1j * Omega)
H = 1 / (1 - 1.2 * z**-1 + 0.32 * z**-2)
fig, ax = plt.subplots(1, 2, figsize=(10, 4))
circle = plt.Circle((0, 0), 1, fill=False, color="gray")
ax[0].add_artist(circle)
ax[0].plot(poles.real, poles.imag, "xr", markersize=10)
ax[0].set_aspect("equal", adjustable="box")
ax[0].set_title("Pole-zero view")
ax[0].grid(True)
ax[1].plot(Omega, np.abs(H))
ax[1].set_title("Frequency response magnitude")
ax[1].grid(True)
plt.tight_layout()
plt.show()
Common pitfalls
- Giving a -transform without its ROC when the inverse sequence is requested.
- Assuming right-sided and causal always mean stable. A causal pole outside the unit circle is unstable.
- Evaluating when the unit circle is not in the ROC.
- Forgetting that the ROC of a rational transform cannot include poles.
- Mixing powers of and when finding poles. Clear denominators before solving.