Z-Transform ROC Calculator

Find the region of convergence for a z-transform from its pole locations, and check whether the resulting system is stable.

🎡 Z-Transform ROC Calculator
Sequence direction
Pole magnitude |p|0.8
0.013.00
Inner pole magnitude |p1|0.5
0.015.00
Outer pole magnitude |p2|2
0.015.00
Region of convergence
Stability
Sequence type
Step-by-step working

🎡 What is the Z-Transform Region of Convergence?

The region of convergence (ROC) is the set of complex values z for which a discrete-time signal's z-transform sum actually adds up to a finite number instead of diverging. It is not optional bookkeeping: the exact same algebraic transfer function, the same pole and zero locations, can represent completely different time-domain sequences (causal, anticausal, or two-sided) depending on which ROC is paired with it.

Control engineers check the ROC every time they analyze a feedback system's stability, since the standard BIBO stability test is simply "does the ROC contain the unit circle." Digital filter designers rely on the causal ROC rule when building any filter meant to run in real time, since only a causal sequence's exterior-region ROC corresponds to an implementable, on-line filter. Signal processing theorists use two-sided ROCs to build stable filters from otherwise-unstable pole configurations by deliberately choosing a non-causal (offline) implementation.

A common misconception is that a transfer function's poles alone determine whether a system is stable. They do not, the ROC choice matters just as much. Two poles at the same exact locations can produce a stable two-sided system or an unstable causal system, depending entirely on which side of each pole the ROC (and therefore the underlying sequence) extends toward.

This calculator applies the three standard ROC rules, causal (right-sided), anticausal (left-sided), and two-sided, to pole magnitudes you provide, and checks whether the resulting region of convergence includes the unit circle.

📐 Formula

Causal: |z| > |p|max     Anticausal: |z| < |p|min     Two-sided: |p1| < |z| < |p2|
|p| = magnitude (distance from origin) of a pole in the z-plane
Causal (right-sided) sequence: ROC extends outward from the outermost pole to infinity
Anticausal (left-sided) sequence: ROC extends inward from the innermost pole to zero
Two-sided sequence: ROC is the annulus between two pole magnitudes
Stability rule: the system is BIBO stable if and only if |z| = 1 (the unit circle) lies inside the ROC

📖 How to Use This Calculator

Steps

1
Choose the sequence type. Select Single Pole for a purely causal or anticausal sequence, or Two Poles for a two-sided sequence.
2
Enter the pole magnitude(s). For single-pole mode, choose the direction and enter one pole magnitude. For two-pole mode, enter both pole magnitudes.
3
Read the ROC and stability. Click Calculate to see the region of convergence and whether the resulting system is BIBO stable.

💡 Example Calculations

Example 1 — Stable Causal (Right-Sided) System

Single pole, right-sided (causal), |p| = 0.8

1
ROC (causal) = |z| > 0.8000
2
Unit circle |z| = 1 is greater than 0.8, so it lies inside the ROC: Stable
ROC = |z| > 0.8000, Stable
Try this example →

Example 2 — Stable Anticausal (Left-Sided) System

Single pole, left-sided (anticausal), |p| = 1.5

1
ROC (anticausal) = |z| < 1.5000
2
Unit circle |z| = 1 is less than 1.5, so it lies inside the ROC: Stable
ROC = |z| < 1.5000, Stable
Try this example →

Example 3 — Stable Two-Sided System

Two poles, |p1| = 0.5, |p2| = 2

1
ROC (two-sided) = 0.5000 < |z| < 2.0000
2
Unit circle |z| = 1 falls between 0.5 and 2, so it lies inside the ROC: Stable
ROC = 0.5000 < |z| < 2.0000, Stable
Try this example →

❓ Frequently Asked Questions

What is the region of convergence (ROC) in the z-transform?+
The region of convergence is the set of z values in the complex plane for which the z-transform's infinite sum actually converges to a finite value. The same algebraic transfer function can correspond to different time-domain sequences depending on which ROC is chosen alongside it.
How do you find the ROC for a causal (right-sided) sequence?+
A causal sequence's ROC is always the region outside its outermost pole: |z| > max(pole magnitudes). This extends all the way out to infinity, which is why every proper causal transfer function's ROC is an exterior region.
How do you find the ROC for an anticausal (left-sided) sequence?+
An anticausal sequence's ROC is always the region inside its innermost pole: |z| < min(pole magnitudes). This extends inward all the way to zero (excluding the origin if there is a pole there), the mirror image of the causal case.
What does the ROC look like for a two-sided sequence?+
A two-sided sequence combines a causal part (contributing an exterior ROC from its own pole) and an anticausal part (contributing an interior ROC from a different pole). The combined ROC is the overlap of the two, which is always an annulus: r1 < |z| < r2, between the two pole magnitudes.
How do you check if a system is stable from its ROC?+
A discrete-time LTI system is BIBO (bounded-input, bounded-output) stable if and only if its region of convergence includes the unit circle, |z| = 1. This test works regardless of whether the system is causal, anticausal, or two-sided, it only depends on where the ROC sits relative to the unit circle.
Can a causal system be unstable?+
Yes. A causal system's ROC is |z| > (outermost pole magnitude). If that outermost pole has magnitude 1 or greater, the unit circle sits on or outside the ROC boundary rather than inside it, so the system is causal but unstable, exactly the case of a pole at or beyond |z| = 1.
Can an anticausal system be stable?+
Yes. An anticausal sequence's ROC is |z| < (innermost pole magnitude). If that innermost pole has magnitude greater than 1, the unit circle lies inside the ROC and the system is stable, even though it is anticausal and therefore non-realizable in real time.
Why does the same transfer function have multiple possible ROCs?+
The z-transform's algebraic expression only encodes the pole and zero locations, not which side of each pole the sequence extends toward. The same set of poles supports one causal, one anticausal, and (for 2+ poles) one or more two-sided ROC choices, each corresponding to a genuinely different time-domain sequence.
Does zero location affect the ROC?+
No. The ROC is entirely determined by pole locations; zeros do not restrict or shift the ROC at all (though a zero can sit anywhere, including inside the ROC, without changing its boundaries). This is why this calculator only asks for pole magnitudes.
What is a practical example of choosing between ROCs?+
Digital filter designers deliberately choose the causal ROC when building a real-time filter (since only causal systems can be implemented as they run), while choosing a two-sided ROC is common in offline (non-real-time) signal processing, where future samples are already available and a stable two-sided filter can be preferable to an unstable causal one built from the same poles.

What is the region of convergence (ROC) in the z-transform?

The region of convergence is the set of z values in the complex plane for which the z-transform's infinite sum actually converges to a finite value. The same algebraic transfer function can correspond to different time-domain sequences depending on which ROC is chosen alongside it.

How do you find the ROC for a causal (right-sided) sequence?

A causal sequence's ROC is always the region outside its outermost pole: |z| > max(pole magnitudes). This extends all the way out to infinity, which is why every proper causal transfer function's ROC is an exterior region.

How do you find the ROC for an anticausal (left-sided) sequence?

An anticausal sequence's ROC is always the region inside its innermost pole: |z| < min(pole magnitudes). This extends inward all the way to zero (excluding the origin if there is a pole there), the mirror image of the causal case.

What does the ROC look like for a two-sided sequence?

A two-sided sequence combines a causal part (contributing an exterior ROC from its own pole) and an anticausal part (contributing an interior ROC from a different pole). The combined ROC is the overlap of the two, which is always an annulus: r1 < |z| < r2, between the two pole magnitudes.

How do you check if a system is stable from its ROC?

A discrete-time LTI system is BIBO (bounded-input, bounded-output) stable if and only if its region of convergence includes the unit circle, |z| = 1. This test works regardless of whether the system is causal, anticausal, or two-sided, it only depends on where the ROC sits relative to the unit circle.

Can a causal system be unstable?

Yes. A causal system's ROC is |z| > (outermost pole magnitude). If that outermost pole has magnitude 1 or greater, the unit circle sits on or outside the ROC boundary rather than inside it, so the system is causal but unstable, exactly the case of a pole at or beyond |z| = 1.

Can an anticausal system be stable?

Yes. An anticausal sequence's ROC is |z| < (innermost pole magnitude). If that innermost pole has magnitude greater than 1, the unit circle lies inside the ROC and the system is stable, even though it is anticausal and therefore non-realizable in real time.

Why does the same transfer function have multiple possible ROCs?

The z-transform's algebraic expression only encodes the pole and zero locations, not which side of each pole the sequence extends toward. The same set of poles supports one causal, one anticausal, and (for 2+ poles) one or more two-sided ROC choices, each corresponding to a genuinely different time-domain sequence.

Does zero location affect the ROC?

No. The ROC is entirely determined by pole locations; zeros do not restrict or shift the ROC at all (though a zero can sit anywhere, including inside the ROC, without changing its boundaries). This is why this calculator only asks for pole magnitudes.

What is a practical example of choosing between ROCs?

Digital filter designers deliberately choose the causal ROC when building a real-time filter (since only causal systems can be implemented as they run), while choosing a two-sided ROC is common in offline (non-real-time) signal processing, where future samples are already available and a stable two-sided filter can be preferable to an unstable causal one built from the same poles.