Skip to main content

Z-Transform and ROC

The zz-transform is the discrete-time counterpart of the Laplace transform. It represents sequences using the complex variable z=rejΩz=re^{j\Omega} and provides a natural language for recursive difference equations, digital filters, poles, zeros, stability, and causality. The DTFT is obtained by evaluating the zz-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 zz-transform of a sequence x[n]x[n] is

X(z)=n=x[n]zn.X(z)=\sum_{n=-\infty}^{\infty}x[n]z^{-n}.

The unilateral zz-transform is

X+(z)=n=0x[n]zn.X_+(z)=\sum_{n=0}^{\infty}x[n]z^{-n}.

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 zz values for which the sum converges. For rational transforms, the ROC is an annulus centered at the origin:

r1<z<r2,r_1<|z|<r_2,

possibly with r1=0r_1=0 or r2=r_2=\infty. The ROC never includes poles.

The DTFT is obtained on the unit circle if z=1\vert z\vert =1 lies in the ROC:

X(ejΩ)=X(z)z=ejΩ.X(e^{j\Omega})=X(z)\bigg|_{z=e^{j\Omega}}.

Important transform pairs include, for z>a\vert z\vert \gt \vert a\vert ,

anu[n]11az1,a^n u[n]\leftrightarrow \frac{1}{1-a z^{-1}},

and, for z<a\vert z\vert \lt \vert a\vert ,

anu[n1]11az1.-a^n u[-n-1]\leftrightarrow \frac{1}{1-a z^{-1}}.

Again, the expression is identical but the ROC and sequence are different.

For an LTI system with impulse response h[n]h[n], the system function is

H(z)=n=h[n]zn.H(z)=\sum_{n=-\infty}^{\infty}h[n]z^{-n}.

If y[n]=x[n]h[n]y[n]=x[n]*h[n], then

Y(z)=X(z)H(z),Y(z)=X(z)H(z),

with ROC at least including the intersection of the ROCs, except for possible pole-zero cancellations.

Key results

Linearity:

ax1[n]+bx2[n]aX1(z)+bX2(z).a x_1[n]+b x_2[n]\leftrightarrow aX_1(z)+bX_2(z).

Time shifting:

x[nn0]zn0X(z),x[n-n_0]\leftrightarrow z^{-n_0}X(z),

with possible ROC changes at 00 or \infty depending on finite-length terms.

Multiplication by ana^n:

anx[n]X(za).a^n x[n]\leftrightarrow X\left(\frac{z}{a}\right).

Time reversal:

x[n]X(z1).x[-n]\leftrightarrow X(z^{-1}).

Convolution:

x[n]h[n]X(z)H(z).x[n]*h[n]\leftrightarrow X(z)H(z).

For rational H(z)H(z),

H(z)=B(z)A(z).H(z)=\frac{B(z)}{A(z)}.

Poles are values of zz where H(z)H(z) 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:

n=h[n]<.\sum_{n=-\infty}^{\infty}|h[n]|<\infty.

In zz-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:

pi<1.|p_i|<1.

The frequency response of a stable system is

H(ejΩ)=H(z)z=ejΩ.H(e^{j\Omega})=H(z)\bigg|_{z=e^{j\Omega}}.

This provides a direct bridge from pole-zero diagrams to filter magnitude and phase.

The shape of the ROC follows from powers of znz^{-n}. For a right-sided sequence, convergence depends on large positive nn, so the ROC is outside the largest active pole. For a left-sided sequence, convergence depends on large negative nn, 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 zz-transform that is a polynomial in z1z^{-1}, so it has no finite poles except possibly at z=0z=0 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 zz variable also encodes delay naturally. A factor of z1z^{-1} represents a one-sample delay in a transfer function. This is why digital filters are commonly written as polynomials in z1z^{-1}: the coefficients directly multiply present and delayed samples in a difference equation. Reading powers of z1z^{-1} 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 z=az=a can create terms like nanu[n]n a^n u[n]. 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 typeROC shapeStability conditionCausality clue
Right-sided anu[n]a^n u[n]z>a\vert z\vert \gt \vert a\vert stable if a<1\vert a\vert \lt 1causal candidate
Left-sided anu[n1]-a^n u[-n-1]z<a\vert z\vert \lt \vert a\vert stable if a>1\vert a\vert \gt 1anti-causal candidate
Two-sided sequenceannulus between polesunit circle inside annulusnoncausal
Causal rational LTIoutside outermost poleall poles inside unit circlecausal
FIR filterwhole plane except maybe z=0z=0always stable if finite coefficientscausal if right-sided

Worked example 1: same rational expression, different sequence

Problem: Interpret

X(z)=1112z1X(z)=\frac{1}{1-\frac{1}{2}z^{-1}}

for two possible ROCs.

Method:

  1. Identify the pole. The denominator is zero when
112z1=0.1-\frac{1}{2}z^{-1}=0.

Multiply by zz:

z12=0,z-\frac{1}{2}=0,

so the pole is

z=12.z=\frac{1}{2}.
  1. If the ROC is
z>12,|z|>\frac{1}{2},

the sequence is right-sided:

x[n]=(12)nu[n].x[n]=\left(\frac{1}{2}\right)^n u[n].
  1. If the ROC is
z<12,|z|<\frac{1}{2},

the sequence is left-sided:

x[n]=(12)nu[n1].x[n]=-\left(\frac{1}{2}\right)^n u[-n-1].
  1. Check the right-sided case:
n=0(12)nzn=n=0(12z1)n=1112z1,\sum_{n=0}^{\infty}\left(\frac{1}{2}\right)^n z^{-n} =\sum_{n=0}^{\infty}\left(\frac{1}{2}z^{-1}\right)^n =\frac{1}{1-\frac{1}{2}z^{-1}},

which converges when

12z1<1z>12.\left|\frac{1}{2}z^{-1}\right|<1 \quad \Rightarrow \quad |z|>\frac{1}{2}.

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

H(z)=111.2z1+0.32z2.H(z)=\frac{1}{1-1.2z^{-1}+0.32z^{-2}}.

Determine whether it is stable.

Method:

  1. Find the poles by solving
11.2z1+0.32z2=0.1-1.2z^{-1}+0.32z^{-2}=0.
  1. Multiply by z2z^2:
z21.2z+0.32=0.z^2-1.2z+0.32=0.
  1. Factor:
z21.2z+0.32=(z0.8)(z0.4).z^2-1.2z+0.32=(z-0.8)(z-0.4).
  1. The poles are
z=0.8,z=0.4.z=0.8,\qquad z=0.4.
  1. Because the system is causal, the ROC is outside the outermost pole:
z>0.8.|z|>0.8.
  1. The unit circle z=1\vert z\vert =1 lies in this ROC.

Checked answer: The system is BIBO stable. For a causal rational system, the same conclusion follows from the pole magnitudes:

0.8<1,0.4<1.0.8<1,\qquad 0.4<1.

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 zz-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 H(ejΩ)H(e^{j\Omega}) when the unit circle is not in the ROC.
  • Forgetting that the ROC of a rational transform cannot include poles.
  • Mixing powers of zz and z1z^{-1} when finding poles. Clear denominators before solving.

Connections