Understanding the Z-Domain: Frequency, Time, and the Discrete Plane Explained

If you've ever worked with digital filters or discrete control systems, you've probably run into the Z-domain — and maybe wondered what it actually is and why it looks so different from everything else. I get it. It's not immediately obvious why we need yet another domain, or why it looks like a circle instead of the usual axes we're used to.


In this post, I'm going to walk you through exactly that. We'll look at how the Z-domain fits into the bigger picture of all the domains engineers work with, why the Z-plane is polar instead of rectangular, and how this choice makes implementing digital filters in code surprisingly simple.




Table of Contents




The Big Map of Domains


The Big Map of Domains


Before diving into the Z-domain specifically, it helps to see the whole landscape. There are several domains engineers use to represent signals and systems, and each one gives you a different lens to look through.


Here's a simple way to think about it:


Domain Signal Type Key Transform
Continuous Time Values at every moment
Discrete Time Values at specific points Sampling / Interpolation
Continuous Frequency Magnitudes & phases of all frequencies Fourier Transform
Discrete Frequency Specific frequency values Discrete Fourier Transform (DFT)
S-Domain Frequency + exponential (continuous) Laplace Transform
Z-Domain Frequency + exponential (discrete) Z-Transform

The key idea: you can move between all of these domains using the right transform. Knowing which domain to work in depends on what you're trying to do — analyze, design, or implement.



Time Domain: Continuous vs. Discrete


Time Domain: Continuous vs. Discrete


The continuous time domain is the natural world — signals with a value at every single moment in time. Think of a microphone picking up sound, or a temperature sensor reading in real time.


The discrete time domain, on the other hand, only has values at specific, separate points. This is typical of:


  • Digital audio samples
  • Monthly temperature averages
  • Any data from a microcontroller reading at fixed intervals

To go from continuous to discrete, you sample the signal at regular intervals. To go back, you interpolate — filling in the missing gaps. Common interpolation methods include:


  • Zero-order hold — hold the last known value constant until the next sample
  • First-order hold — draw a straight line between consecutive points
  • And many more advanced methods depending on the application

💡 Key point: Sampling and interpolation keep the shape of the signal the same. A discrete time signal still looks like its continuous counterpart, just with gaps between the dots.




Frequency Domain: Continuous vs. Discrete


Frequency Domain: Continuous vs. Discrete


Instead of plotting signal values over time, the frequency domain plots the magnitudes and phases of the frequencies that make up a signal.


  • The Fourier Transform takes you from continuous time → continuous frequency
  • The Discrete Fourier Transform (DFT) takes you from discrete time → discrete frequency
  • Both have inverse transforms to bring you back

One thing to keep in mind: when you move from continuous frequency to discrete frequency, frequencies above the Nyquist frequency (half the sampling rate) get aliased — they fold back down into the range we can see. But aside from that, the format stays the same: frequency along the horizontal axis, amplitude on the vertical. Nothing radical changes.


This is an important contrast to what happens when we move from the S-domain to the Z-domain — which, as we'll see, is a completely different story.




S-Domain and Z-Domain: The Transform Pair


S-Domain and Z-Domain: The Transform Pair


The S-domain is what you get when you apply the Laplace Transform to a continuous-time signal. It represents systems using both frequency content (imaginary axis) and exponential growth/decay (real axis). It's a rectangular (Cartesian) plane, and it's incredibly useful for:



The Z-domain is the discrete-time equivalent. The Z-Transform takes you from discrete time to the Z-domain. You can also go directly from S to Z using the substitution:


\[ Z = e^{sT} \]


where \( T \) is the sample time and \( s \) is the complex location in the S-plane.


However, this substitution is nonlinear, so linear alternatives like the bilinear transform are often used instead — though they come with their own trade-off called frequency warping in the Z-plane.


⚠️ Common pitfall: Don't confuse the bilinear transform with a simple approximation. It systematically warps frequency, so you need to pre-warp your frequency specs if you use it for filter design.




Why the Z-Plane Is a Circle, Not a Grid


Why the Z-Plane Is a Circle, Not a Grid


This is the part I find genuinely fascinating. When you go from continuous time to discrete time, the signal still looks the same — just sampled. Same axes, same general shape. But going from S-domain to Z-domain is a completely different kind of transformation.


The S-plane is rectangular. The Z-plane is polar — built around the unit circle.


Here's why. Since \( s \) is a complex number with a real part \( \sigma \) and an imaginary part \( j\omega \), we can split the equation \( Z = e^{sT} \) like this:


\[ Z = e^{\sigma T} \cdot e^{j\omega T} \]


Now, using Euler's formula:


\[ e^{j\omega T} = \cos(\omega T) + j\sin(\omega T) \]


This traces a circle in the complex plane as \( \omega \) increases. The real part \( e^{\sigma T} \) just scales the radius of that circle:


  • \( \sigma = 0 \) → \( e^0 = 1 \) → unit circle (the thick black circle)
  • \( \sigma < 0 \) (left half of S-plane) → radius < 1inside the unit circle
  • \( \sigma > 0 \) (right half of S-plane) → radius > 1outside the unit circle

So in plain terms:


  • Left half S-plane = inside the unit circle in Z (stable region)
  • Right half S-plane = outside the unit circle in Z (unstable region)
  • Imaginary axis of S-plane = exactly on the unit circle in Z

💡 Stability check: For a discrete system to be stable, all poles must be inside the unit circle. This is the Z-domain equivalent of the "left half S-plane = stable" rule you use with the Laplace transform.




Why This Circular Representation Makes Sense


Why This Circular Representation Makes Sense


There are two solid reasons why the Z-domain is defined this way rather than just as a "sampled S-plane."


Reason 1: Aliasing wraps naturally around a circle


Discrete systems only have frequency content up to the Nyquist frequency (half the sampling rate). In a rectangular plane, you'd have to awkwardly cut off the plot above and below the Nyquist.


But here's the real issue — aliasing. When frequencies above Nyquist get sampled, they don't just disappear. They fold back into the usable range. And this folding behavior is perfectly described by looping around the unit circle:


  • At 0 Hz → positive real axis
  • At Nyquist frequency → negative real axis (far left of the circle)
  • At the full sampling frequency → back to the positive real axis

High-frequency content just keeps looping around. The circular plane makes this aliasing behavior visual and intuitive instead of confusing.


Reason 2: It makes digital implementation trivial


This one is the real practical payoff — more on that in the next section.



From Z-Domain to Code: The Difference Equation


From Z-Domain to Code: The Difference Equation


Here's where the Z-domain really earns its keep. While you design your filter or controller in the Z-domain (checking poles, zeros, stability, frequency response), you ultimately have to run it on a processor — and processors work in the time domain.


The good news? Going from a Z-domain transfer function to code is almost trivial.


Let's say you have a transfer function with generic coefficients \( a_i \) and \( b_i \), written using negative powers of Z (each \( Z^{-1} \) represents a one-sample delay):


\[ Y(z) \left(1 - b_1 z^{-1} - b_2 z^{-2}\right) = U(z)\left(a_0 + a_1 z^{-1} + a_2 z^{-2}\right) \]


Taking the inverse Z-transform of each term, \( z^{-1} \) becomes a one-sample delay in the time domain. So \( z^{-1} Y(z) \) becomes \( y[k-1] \).


The result is a difference equation like:


\[ y[k] = a_0 \cdot u[k] + a_1 \cdot u[k-1] + a_2 \cdot u[k-2] + b_1 \cdot y[k-1] + b_2 \cdot y[k-2] \]


And here's the remarkable part: the coefficients in the Z-domain are identical to the coefficients in the difference equation. You don't need to re-derive anything.


To implement this in code, you're literally just:


  1. Storing a small buffer of past inputs and outputs
  2. Multiplying each by its coefficient
  3. Summing them together

That's it. This is why the Z-domain is the standard tool for digital filter and controller design.


💡 Pro tip: If you're ever given a list of recursion coefficients from a DSP library or filter design tool, you can immediately write out the Z-domain transfer function — and from there, check stability, frequency response, and impulse response directly.




Putting It Together: The Integrator Example


Putting It Together: The Integrator Example


Let's make this concrete with the discrete integrator — a classic example.


In the S-domain, an integrator has the transfer function:


\[ H(s) = \frac{1}{s} \]


This means there's a pole at the origin (as \( s \to 0 \), the function → ∞) and a zero at infinity.


Now, transforming to the Z-domain, the pole at the origin maps to \( Z = 1 \), and the zero at infinity gets pulled in to \( Z = 0 \). So the Z-domain transfer function is:


\[ H(z) = \frac{z}{z - 1} = \frac{1}{1 - z^{-1}} \]


Taking the inverse Z-transform:


\[ y[k] - y[k-1] = u[k] \]


Rearranging:


\[ y[k] = u[k] + y[k-1] \]


Read that difference equation out loud: the output at the current time step is the new input plus the previous output. That's a running total — exactly what an integrator does. Add up all the inputs over time.


It's elegant that the Z-domain makes this so easy to see and implement.



Key Takeaways


  • Six domains, one map — continuous/discrete versions of the time, frequency, S, and Z domains are all connected by transforms
  • Z-domain is polar, not rectangular — because \( Z = e^{sT} \) maps rectangular S-plane coordinates onto circles
  • Stability rule — poles inside the unit circle = stable discrete system
  • Aliasing = looping around the unit circle — the circular geometry naturally captures how high frequencies fold back at Nyquist
  • Coefficients carry over directly — the Z-domain transfer function coefficients are the same as the difference equation coefficients, making implementation straightforward
  • Design in Z, implement in time — use poles and zeros to shape your filter in the Z-domain, then take the inverse Z-transform to get code-ready equations

Action Steps


  1. Sketch the domain map from this post — having a visual reference for all six domains and their transforms is genuinely useful
  2. Try converting a simple transfer function from Z-domain to a difference equation by hand
  3. Watch Youngmoo Kim's video on the Z-domain for an excellent complementary perspective on filter design
  4. Explore MATLAB's zplane and freqz functions — they let you interactively place poles and zeros and immediately see the frequency response


FAQs


What is the Z-domain used for? The Z-domain is used to analyze and design discrete-time systems — primarily digital filters and digital controllers. It lets you study stability, frequency response, and impulse response by looking at the positions of poles and zeros on the Z-plane (relative to the unit circle).


What is the difference between the S-domain and Z-domain? The S-domain is a rectangular (Cartesian) complex plane used for continuous-time systems via the Laplace Transform. The Z-domain is a polar complex plane used for discrete-time systems via the Z-Transform. The key geometric difference is that frequency runs along the imaginary axis in the S-plane, but wraps around the unit circle in the Z-plane.


Why is the unit circle important in the Z-domain? The unit circle in the Z-plane corresponds to the imaginary axis in the S-plane — i.e., signals that are neither growing nor decaying. For a discrete system to be stable, all poles must lie inside the unit circle. Poles on or outside the unit circle indicate instability or marginal stability.


What does Z⁻¹ mean in signal processing? \( Z^{-1} \) represents a unit delay — it shifts the signal back by one sample time. In code, this corresponds to reading a value from a memory buffer that stores the previous sample.


What is a difference equation? A difference equation is the discrete-time equivalent of a differential equation. It expresses the current output of a system as a weighted sum of past inputs and outputs. It's the form you actually implement in software when coding a digital filter or controller.


How do you convert a Z-domain transfer function to code? Write the transfer function using negative powers of Z, expand it, take the inverse Z-transform term by term (each \( Z^{-n} \) becomes a delay of \( n \) samples), rearrange to solve for the current output, and implement as a running sum with a short buffer of past values. The coefficients don't change.


What is the Nyquist frequency and why does it matter for the Z-domain? The Nyquist frequency is half the sampling rate — it's the highest frequency that a discrete system can represent without aliasing. In the Z-domain, the Nyquist frequency corresponds to the point \( Z = -1 \) (the leftmost point of the unit circle). Frequencies above Nyquist alias back into the visible range, which the circular geometry of the Z-plane naturally represents as looping.


#buttons=(Ok, Go it!) #days=(20)

Our website uses cookies to enhance your experience. Learn More
Ok, Go it!