HuntsvilleEngineers mark
HE Reference Shelf — huntsvilleengineers.com
The Reference Shelf · Analysis & Transforms

Z-transform

The Laplace transform for sampled signals — it turns a difference equation running at your loop rate into algebra, so you can read stability and frequency response off pole locations instead of stepping code.

Also known as: z-domain · discrete transfer function · pulse transfer function · discrete-time transform

The formula

The definition, one-sided version, which is the one control work uses:

X(z) = Σ x[n]·z⁻ⁿ    summed over n = 0, 1, 2, ...

Reading: tag each sample with a power of z⁻¹ that records how late it arrived, then add them up. The two-sided (bilateral) version sums over all integer n and is what DSP texts start from.

The property that makes it work:

x[n−1]  ↔  z⁻¹·X(z)

Reading: z⁻¹ is one sample of delay. That single fact converts any constant-coefficient difference equation into a ratio of polynomials.

So a filter or controller in code,

y[n] = b₀·x[n] + b₁·x[n−1] + ... − a₁·y[n−1] − a₂·y[n−2] − ...

becomes a discrete transfer function:

H(z) = (b₀ + b₁·z⁻¹ + b₂·z⁻² + ...) / (1 + a₁·z⁻¹ + a₂·z⁻² + ...)

Reading: numerator roots are zeros, denominator roots are poles, exactly as in the s-domain — the geometry just moves from a half-plane to a circle.

The bridge back to continuous time, for sample period T:

z = e^(s·T)

Reading: the left half of the s-plane maps to the inside of the unit circle; the jω axis wraps onto the circle itself, once per Nyquist band.

The workhorse transform pair, worth memorizing:

x[n] = aⁿ  (n ≥ 0)   ↔   X(z) = 1/(1 − a·z⁻¹) = z/(z − a),   valid for |z| > |a|

Reading: a sampled exponential decay is a single pole at z = a. Every first-order response you will ever log lives in that pair.

Where you meet it

  • Bench, digital filter design. The smoothing filter in your DAQ firmware — y[n] = 0.9·y[n−1] + 0.1·x[n] — is H(z) = 0.1/(1 − 0.9·z⁻¹), a pole at z = 0.9. At a 1 kHz sample rate that is a 9.5 ms time constant and a −3 dB point at 16.8 Hz. If you have ever tuned that 0.9 by feel, you were moving a z-plane pole by hand.
  • Test stand, discrete PID. The PLC or real-time controller closing a thrust-stand load loop at 100 Hz is not running the PID you designed in s. It is running a difference equation, and the honest analysis of its margins happens in z, where the sample-and-hold and the computation delay actually show up.
  • Review board. When flight software closes an attitude loop at 50 Hz and someone asks "did the phase margin account for the one-frame processing delay," the answer is a factor of z⁻¹ in the loop transfer function. A one-sample delay costs 360°·f/fs of phase — 36 degrees at a 10 Hz crossover with a 100 Hz loop. Boards have been stopped over less.
  • Sampled-data plant models. Handing a continuous plant to a discrete controller means taking the zero-order-hold equivalent — the "pulse transfer function" in the older control literature. Every autocode toolchain does this discretization for you, which is exactly why it pays to know what it did.

How it works

Everything reads off the unit circle. A pole inside it (|p| < 1) is a decaying response; on it, marginal; outside, divergent — the discrete analogue of the left/right half-plane split. Pole radius sets settling speed in samples: a pole at 0.9 rings down to 2% in about 37 samples, at 0.99 it takes about 389. That is why "slow" digital filters have poles crowded up against the circle, and why they are the fragile ones.

Frequency response is the transfer function evaluated on the circle: H(e^(jωT)), with ωT the angle. Sweep the angle from 0 to π and you have DC to Nyquist. For the a = 0.9 smoother above, the gain at Nyquist is (1−a)/(1+a) ≈ 0.053, about −25.6 dB — numbers you can confirm by driving the difference equation with a sine and measuring, which is exactly what a numerical check of this entry did.

The mapping z = e^(sT) explains aliasing without a single picture of overlapping spectra: e^(sT) is periodic in ω with period 2π/T, so infinitely many s-plane points land on each z-plane point. A continuous pole at s = −100 + j·2π·60 with T = 1 ms lands at |z| = e^(−0.1) ≈ 0.905 — and so would its aliases. Once you have sampled, the transform cannot tell them apart. Nyquist is not a guideline; it is the geometry of this map.

Getting from an s-domain design to z is where the bodies are buried:

  • Exact pole mapping only via ZOH or matched methods. z = e^(sT) maps poles exactly but there is no clean substitution for a whole transfer function; the standard practical route is the zero-order-hold equivalent, which also books the hold's roughly half-sample delay — about 18° of phase at a 10 Hz crossover, 100 Hz rate. Ignore it and your continuous margins were fiction.
  • Tustin warps frequency. The bilinear substitution s = (2/T)·(z−1)/(z+1) squeezes the entire jω axis onto one trip around the circle, so frequencies compress toward Nyquist: a 100 Hz corner discretized at 1 kHz lands at 96.9 Hz. Prewarping with ω_a = (2/T)·tan(ω_d·T/2) puts one chosen frequency back where it belongs. Filters designed at a corner beyond about a tenth of the sample rate need it.
  • Coefficient quantization moves poles. In fixed-point hardware, a pole at 0.995 defined by rounded coefficients can walk across the unit circle and turn a filter into an oscillator. High-order IIR filters are built as cascaded second-order sections for this reason, not for elegance.
  • The region of convergence is not pedantry. z/(z−a) describes a decaying causal signal only when |z| > |a|; the same algebra with a different region describes a completely different (anticausal) signal. Tables silently assume causal; keep that assumption in view when the algebra hands you a pole outside the circle.
  • The mistake people make is treating z⁻¹ as if it were 1/s. It is not an integrator; it is a delay. The discrete integrator is T/(1 − z⁻¹) (backward Euler, the usual PID accumulator), T·z⁻¹/(1 − z⁻¹) (forward Euler), or their Tustin cousin (T/2)·(1 + z⁻¹)/(1 − z⁻¹), and swapping one for another in an accumulating PID term changes your low-frequency gain and your windup behavior. The second-place mistake is designing in s, discretizing at a leisurely sample rate, and never re-checking margins in z — at fs above thirty times the crossover you usually get away with it, at ten times you usually don't.

History

The machinery is older than the application by two centuries. Abraham de Moivre (1667–1754) introduced generating functions around 1730 — in the era of his Miscellanea Analytica — to solve linear recurrence problems in probability [1][5][6]. Attach a power of a dummy variable to each term of a sequence and manipulate the sum as one object: that is the z-transform in period costume, and Laplace, who later gave generating functions their name, used the idea extensively [1][5]. Engineers rediscovered a piece of mathematics the probability people had been using since powdered wigs.

The application arrived with radar. Witold Hurewicz (1904–1956), a topologist by trade, spent 1944–45 at the MIT Radiation Laboratory doing classified work on servomechanisms [4]. Fire-control radars delivered target data as a train of pulses, not a continuous voltage, and the loop closing on that data needed difference equations, not differential ones. In 1947 Hurewicz published the transform treatment of such sampled sequences, giving engineers a tractable handle on pulsed-data control [1][3].

The name came from Columbia. John R. Ragazzini and Lotfi A. Zadeh — Zadeh then an assistant professor, decades before fuzzy logic made him famous — published "The analysis of sampled-data systems" in the AIEE Transactions in 1952 and called the tool the z-transform [1][2][3]. Ragazzini's sampled-data group was a talent pipeline: Eliahu Jury took his Sc.D. there in 1953 and went on to develop the advanced (modified) z-transform, which handles delays that are not whole multiples of the sample period, and the Jury stability test, the discrete counterpart of Routh–Hurwitz [1][7][8]. From de Moivre's card games to Hurewicz's radar to Jury's stability arrays took 225 years; from there to the digital controller on every modern test stand took about twenty.

Related tools

Sources

  1. https://en.wikipedia.org/wiki/Z-transform
  2. https://ui.adsabs.harvard.edu/abs/1952TAIAI..71..225R/abstract
  3. https://languagelog.ldc.upenn.edu/nll/?p=52878
  4. https://mathshistory.st-andrews.ac.uk/Biographies/Hurewicz/
  5. https://en.wikipedia.org/wiki/Generating_function
  6. https://mathshistory.st-andrews.ac.uk/Biographies/De_Moivre/
  7. https://en.wikipedia.org/wiki/Eliahu_I._Jury
  8. https://en.wikipedia.org/wiki/Advanced_z-transform

Written by HE in our own words from the cited sources — engineering judgment included, your stamp still required. All entries →

★ The Reference Shelf

Reading is free. The shelf is for cardholders.

Your library card is an email address: pin it to your shelf, print the card, take the FE/PE quick-reference pack, read the Huntsville history. The shelf remembers what you reach for.

Already on the list? Enter with your subscribed email →