Digital & Discrete-Time Control
The sampling theorem and the aliasing pathology
The usual story is that digital control begins with a single, easily-stated, and routinely-violated injunction: sample fast enough. Shannon's sampling theorem states that a signal bandlimited to \(B\) Hz can be reconstructed exactly from samples taken at rate \(f_s > 2B\) [fn:: The strict inequality is the mathematician's tic; engineers write \(f_s \geq 2B\) and live with the equality edge case, which is technically recoverable only for signals whose energy at \(B\) vanishes — a condition no physical signal satisfies, which is itself a quiet argument against treating the theorem as actionable instead of aspirational.]. The frequency \(2B\) is the Nyquist rate; the frequency \(f_s/2\) is the Nyquist frequency (or foldover frequency). These are routinely conflated in textbooks and even in working engineers' prose, which is harmless until it isn't — the rate is a property of the signal, the frequency a property of the sampler, and confusing them inverts the design question from "how fast must I sample?" to "what can I get away with?", which is the wrong question to be answering when a controller's stability margin depends on the answer [fn:: The conflation is surprisingly old. Nyquist's 1928 telegraphy paper never states a sampling theorem; Shannon's 1949 theorem cites Kotelnikov (1933) and Whittaker (1915). Naming the rate after Nyquist is a back-formation that stuck because "the Shannon rate" lacked euphony. This is a meta-failure of attribution that propagated precisely because the theorem's content mattered more to working engineers than its provenance.].
Aliasing is the fundamental digital control pathology because it is the one error that cannot be undone downstream. Quantization noise can be averaged; computational delay can be modelled; finite wordlength effects can be budgeted. But a signal component at \(f_s/2 + \Delta\) Hz, having folded down to \(f_s/2 - \Delta\) Hz, is indistinguishable from a genuine low-frequency component to every subsequent block in the control loop — the controller will dutifully act on it and, in a feedback path, amplify it. The remedy is anti-alias prefiltering: an analog low-pass filter before the sampler, with cutoff below \(f_s/2\), because once the sampler has folded the spectrum, no digital filter can separate the aliases. Dimensionally, this is straightforward: the filter must attenuate by the desired margin at the first foldover frequency, so its roll-off (dB/decade) times the distance (decades) between cutoff and \(f_s/2\) must exceed the required attenuation. A second-order Butterworth at 20 Hz gives ~12 dB/decade; if you sample at 100 Hz (\(f_s/2 = 50\) Hz), the half-decade of separation yields ~6 dB, which is woefully inadequate — the usual consequence is that the anti-alias filter's order, not the sample rate, sets the effective bandwidth, which is why "just sample faster" is not a substitute for "filter properly".
The steelman of the no-prefilter position is that if the plant and the disturbance environment are genuinely bandlimited below \(f_s/2\) — for instance, a thermal plant with a 60 s time constant sampled at 1 Hz, where the disturbance spectrum is dominated by ambient temperature drift at mHz — then the anti-alias filter is dead weight. The steelman is correct in that case and wrong in general, because the controller's own action generates high-frequency content: a step in the setpoint, a saturation event, a nonlinear friction breakaway, all produce broadband content that the sensor will see and the sampler will fold if there is no prefilter. The safe assumption is that the loop contains at least one source of broadband content, and the prefilter is cheap insurance against it; the rare cases where it is genuinely unnecessary are not worth the diagnostic burden of proving, which is why the default is to include it even when the analysis suggests it could be omitted.
The z-transform as discrete Laplace
The Laplace transform turns convolution into multiplication and differentiation into multiplication by \(s\); the z-transform does the same for sequences, turning the convolution sum into a product and the unit delay into multiplication by \(z^{-1}\). The two are connected by the sampling operation itself: an impulse-sampled signal \(x^*(t) = \sum_k x(kT)\delta(t - kT)\) has Laplace transform \(X^*(s) = \sum_k x(kT) e^{-skT}\), and defining \(z \triangleq e^{sT}\) collapses this to \(X(z) = \sum_k x(kT) z^{-k}\). This is not an analogy; it is a literal change of variables on the sampled transform, and it inherits the s-plane geometry in a warped but exact form.
The mapping \(z = e^{sT}\) sends the s-plane's left half-plane (\(\Re(s) < 0\)) to the interior of the unit circle (\(|z| < 1\)) in the z-plane, because \(|z| = |e^{sT}| = e^{\Re(s)T}\), which is less than one exactly when \(\Re(s) < 0\). The imaginary axis maps to the unit circle itself; the right half-plane maps to the exterior. A pole at \(s = -\sigma + j\omega\) becomes a pole at \(z = e^{-\sigma T} e^{j\omega T}\), spiralling toward the origin as \(\sigma\) grows and wrapping around every \(2\pi/T\) in \(\omega\) — which is the geometric face of aliasing: the entire strip \(-\pi/T < \omega < \pi/T\) maps onto the full circle, and every higher strip maps onto the same circle [fn:: This is why the z-plane "looks like" the s-plane only locally. A stable pole near the imaginary axis at high frequency and a stable pole near the axis at low frequency can map to nearby points in the z-plane; distinguishing them requires knowing T, which the z-transform has absorbed. The transform is lossy about frequency in a way the s-transform is not, and this is the root reason digital control has a sample-rate sensitivity that analog control does not.].
A consequence worth dwelling on is that the z-plane has no natural notion of "fast" and "slow" poles — only of "near the unit circle" and "near the origin". A pole at \(z = 0.99\) at \(T = 0.001\) s corresponds to an s-plane pole at \(s = -10\), a 100 ms time constant; the same \(z = 0.99\) at \(T = 1\) s corresponds to \(s = -0.01\), a 100 s time constant. The discrete pole's location is sample-rate-ambiguous, and this ambiguity is the source of the recurring bug in which a controller tuned at one sample rate is ported to another and behaves completely differently — the z-plane coefficients look identical but the underlying analog dynamics do not. The discipline that prevents this is to carry the sample rate alongside every z-domain transfer function and to re-derive the coefficients whenever the rate changes, which is obvious in principle and routinely skipped in practice because the coefficients are the visible artifact and the rate is a footnote.
The inverse mapping, \(s = \frac{1}{T}\ln z\), is multivalued — the logarithm picks up an additive \(j 2\pi/T k\) for every integer \(k\) — which is the formal statement of why the mapping is many-to-one. Every method that recovers s-plane information from z-plane measurements (system identification, frequency-domain analysis) must pick a branch, and the natural branch (\(k = 0\), the principal strip) is the one that assumes no aliasing — which is exactly the assumption the sampler makes, and exactly the assumption that fails when the anti-alias filter is inadequate.
Difference equations and the pulse transfer function
A discrete-time LTI system described by a difference equation \[ y[k] + a_1 y[k-1] + \cdots + a_n y[k-n] = b_0 u[k] + \cdots + b_m u[k-m] \] has transfer function \(G(z) = \frac{b_0 + b_1 z^{-1} + \cdots + b_m z^{-m}}{1 + a_1 z^{-1} + \cdots + a_n z^{-n}}\), the pulse transfer function. The term is unhelpfully redundant — there is no other kind of z-domain transfer function — but it gestures at the fact that the input is treated as a sequence of impulses, not a continuous signal, and that the physical input is almost never actually impulsive. In a real digital control loop the DAC holds each output value constant over the sample interval via a zero-order hold (ZOH), and the cascade "ZOH + continuous plant \(G_p(s)\) + sampler" has the combined pulse transfer \[ G(z) = \left(1 - z^{-1}\right)\,\mathcal{Z}\!\left\{\mathcal{L}^{-1}\!\left[\frac{G_p(s)}{s}\right]\right\}. \] The leading \((1 - z^{-1})\) factor is the ZOH's signature: it cancels the step's DC pole, and it is the reason a ZOH-equivalent discretization of an integrator \(1/s\) yields \(T/(z-1)\) instead of the naive \(T/z\) — the hold's area accumulation, not its peak, is what the plant sees [fn:: The ZOH is "honest" in the sense that it matches the actual piecewise-constant actuation of real DACs. Every other discretization method is an approximation of this cascade; Tustin is preferred in practice because it is cheap, preserves stability, and is bidirectional (has an inverse), but it does not reproduce the exact intersample behavior that the ZOH-equivalent does. This is a recurring tension: the method you can prove things about is not the method your hardware implements.].
A first-order hold (FOH) — linear interpolation between samples — is sometimes proposed as a more honest model of the actuator's actual behavior, and it yields a different pulse transfer function with an extra \((1 + z^{-1})/2\) factor. In practice almost no real DAC interpolates between samples; the ZOH is the model that matches the hardware, and the FOH is a mathematical curiosity that appears in textbooks because it is the next term in a Taylor expansion of the hold's spectrum and because it sometimes gives cleaner closed-form results. The pedagogical asymmetry — ZOH is the default, FOH is mentioned and dismissed — reflects the engineering asymmetry: the world is full of ZOHs and almost empty of FOHs, and the curriculum has noticed.
Discretization methods: a small bestiary
Given an analog controller \(C(s)\) we want a discrete \(C(z)\) that behaves "close enough". The candidate methods form a near-total order of trustworthiness, worst to best:
Forward Euler maps \(s \mapsto (z-1)/T\). It is almost never safe: a stable s-plane pole at \(-\sigma\) maps to \(z = 1 - \sigma T\), which exits the unit circle for \(\sigma T > 2\) — i.e., for any reasonably fast analog pole at any reasonable sample rate. The method is didactic, a warning, not a tool.
Backward Euler maps \(s \mapsto (z-1)/(Tz)\). A stable pole at \(-\sigma\) maps to \(z = 1/(1 + \sigma T)\), which is always inside the unit circle — so backward Euler is unconditionally stable-preserving, but at the cost of frequency warping: it compresses the entire jω axis onto a circle of radius 1/2 centered at 1/2, so high-frequency analog behavior is dragged toward DC. For controllers whose action is near DC this is fine; for resonant notch filters it is ruinous.
Tustin's method (bilinear transform) maps \(s \mapsto \frac{2}{T}\frac{z-1}{z+1}\). It sends the jω axis to the unit circle exactly, so stability is preserved, and the warping is a one-parameter monotone distortion (the tangent-type frequency prewarping). Tustin is the standard because it is the cheapest method that does not lie about stability; one prewarps a critical frequency \(\omega_c\) by replacing \(T\) with \(\frac{2}{\omega_c}\tan\!\left(\frac{\omega_c T}{2}\right)\) and the controller matches the analog prototype at \(\omega_c\) while drifting elsewhere [fn:: Tustin's method is sometimes called the "bilinear" transform for its fractional-linear form; the name is due to a 1947 IRE paper by Tustin on d.c. machine simulation. It is, mathematically, the trapezoidal rule for integration, which is why the method is the simplest A-stable numerical integration scheme — a connection that, when noticed, makes the stability-preservation property feel less like luck and more like inevitability.].
Pole-zero matching places each s-plane pole at \(z = e^{sT}\) and each finite s-plane zero likewise, adding a zero at \(z = -1\) to match the excess poles, and scales for DC gain. It is the cheapest physically faithful method — it preserves the frequency response at the mapped locations exactly — but it requires manual bookkeeping for the gain and the excess-pole zero, which is tedious enough that most practitioners reach for Tustin unless they are discretizing resonant controllers where pole-zero matching's exact pole placement matters.
There is a fifth candidate that is rarely mentioned in the control curriculum but is the default in signal processing: impulse-invariant discretization, which samples the analog impulse response directly so that \(h[k] = h(kT)\). It is exact for the impulse response and preserves the relative spacing of poles in frequency, but it suffers aliasing whenever the analog response is not bandlimited — which a controller's response never is, since controllers are designed to act, and action lives at high frequency. Impulse-invariance is the right tool for filter design and the wrong tool for control design, and the reason it appears in DSP textbooks but not control textbooks is that the failure mode — aliasing of the control action — is silent in filters (it just changes the passband) but catastrophic in loops (it destabilizes them). This is one of those fork-in-the-road divergences where two fields share a technique and part ways over what counts as a failure.
A note on the meta-level: the proliferation of discretization methods is itself a symptom of an unsolved problem. There is no discretization that is exact in the sense of preserving the closed-loop behavior of the analog system for arbitrary inputs; there are only discretizations that are exact for a specific input class (impulse, step) or that preserve a specific property (stability, DC gain, a single critical frequency). Choosing among them is a design decision that trades off which property you care about, and the existence of a default (Tustin) papers over the fact that the choice is genuine — which is fine for the practitioner and misleading for the student [fn:: The same pattern recurs across engineering: a default method is chosen because most practitioners most of the time care about the same property, and the existence of the default lets the curriculum defer the choice-theoretic discussion. This is efficient and slightly dishonest, and the dishonesty is paid for by the occasional engineer who applies Tustin to a resonant controller and is puzzled by the notch's disappearance.].
Stability in the z-plane: Jury and Schur-Cohn
The analog stability criterion — all poles in the open left half-plane — becomes, under \(z = e^{sT}\), all poles inside the open unit circle. This is the discrete stability criterion, and it is strictly harder to apply than Routh-Hurwitz because "inside the unit circle" is a region with a boundary that is not a coordinate line. Jury's test is the discrete analogue of Routh-Hurwitz: given the characteristic polynomial \(P(z) = a_n z^n + \cdots + a_0\) with \(a_n > 0\), one constructs a triangular table of transformed coefficients and checks a sequence of positivity conditions; failure of any one implies an unstable root. It is a perfectly serviceable test for low-order systems but its table grows cubically in size and the conditions proliferate, which is why for orders above ~4 engineers abandon the algebraic test for direct root-finding or the root locus in z.
The Schur-Cohn test is the more elegant and less practical sibling: it asks whether a symmetric matrix constructed from the polynomial's coefficients (a Toeplitz-plus-Hankel form) is positive definite, and is equivalent to all roots being inside the unit circle. Schur-Cohn is the theorem one cites; Jury's table is the algorithm one runs. The pedagogical gap between the two is itself a small meta-observation: textbooks present Jury because it is computable by hand for small orders, but the reason Jury works is Schur-Cohn, which is too linear-algebra-heavy for the typical undergraduate control course — so the explanation is deferred and the recipe is foregrounded, which is the same didactic compromise that gave us Routh-Hurwitz without Hurwitz's determinantal motivation.
There is a subtlety worth flagging: stability in the z-plane is asymptotic stability of the difference equation, which is necessary but not sufficient for the stability of the underlying sampled-data system. A discrete controller whose poles lie inside the unit circle can still produce an intersample response that oscillates — the so-called hidden oscillations or ripple — because the z-transform sees only the sample instants and is blind to the intersample behavior. This is the deep reason that "discrete stability is not continuous stability": the sampler discards information by construction, and a proof that uses only the samples cannot recover what was discarded. The remedy is either to sample fast enough that intersample ripple is bounded by the sample-step size (a heuristic, not a guarantee) or to analyze the sampled-data system in the lifted domain, where the inter-sample signal is represented explicitly — but the lifted analysis is heavy enough that it is almost never done in industrial practice, which is another way of saying that real digital controllers are stable in a weaker sense than their analog cousins and the gap is papered over by fast sampling.
A meta-observation on the tests themselves: Jury and Schur-Cohn are both necessary and sufficient for asymptotic stability of the difference equation, and yet both are used less in practice than the frequency-response tests (Bode, Nyquist) that they purport to replace. The reason is that the algebraic tests give a binary verdict (stable / unstable) and no margin, while the frequency-response tests give a distance from the instability boundary (gain margin, phase margin) that is directly actionable for redesign. The algebraic tests are answers; the frequency tests are diagnostics, and engineers prefer diagnostics to answers because answers are too late. The discrete-frequency-domain (w-plane) tests inherit this advantage from the analog frequency-domain tests, which is a second reason the w-plane trick persists despite its inelegance.
Digital PID: positional, incremental, and the derivative kick
The analog PID \(u(t) = K_p\!\left[e(t) + \frac{1}{T_i}\!\int\! e\,d\tau + T_d \frac{de}{dt}\right]\) admits two natural discretizations. The positional form computes the absolute control effort directly: \[ u[k] = K_p\!\left[e[k] + \frac{T}{T_i}\sum_{j=0}^{k} e[j] + \frac{T_d}{T}(e[k] - e[k-1])\right], \] which requires the full integral sum and is vulnerable to windup and to reset on mode switches. The incremental (velocity) form computes \(\Delta u[k] = u[k] - u[k-1]\), which eliminates the explicit integral sum and makes windup protection nearly free (one simply clamps \(\Delta u\)), at the cost of needing the previous output.
The derivative kick is the pathological spike in \(u[k]\) when the setpoint steps: \(e[k]\) jumps and the discrete derivative \((e[k] - e[k-1])/T\) sees a one-sample ramp of magnitude \(\Delta r / T\), which for a unit setpoint change at \(T = 0.01\) s is a derivative term of \(100\), i.e., a 100× amplification of the setpoint step. The standard fix — derivativ-on-measurement instead of derivative-on-error — replaces \(de/dt\) with \(-dy/dt\), removing the setpoint from the derivative term entirely. This is a fix that is nearly free in software and essentially impossible in analog, which is one of the few unambiguous advantages of digital PID.
The derivative term also requires filtering in any practical digital implementation, for two reasons: (i) the unfiltered discrete derivative amplifies measurement noise by \(1/T\), and at small \(T\) this is catastrophic; (ii) the analog PID's derivative term is in practice always rolled off with a first-order filter at some \(\omega_d = N/T_d\) (typically \(N \in [3, 20]\)), and the digital version should match this. The standard is to Tustin-transform the analog filtered derivative \(T_d s / (1 + (T_d/N)s)\), which yields a discrete second-order section that is stable by construction — a small but real instance of "design analog, discretize with Tustin" being the practical doctrine.
There is a third reason specific to digital PID that the analog literature does not flag: the discrete derivative is a two-sample difference, and as such it has a frequency response that rises to a peak at the Nyquist frequency and then rolls off, instead of rising monotonically as the analog derivative does. The peak is at \(\omega = \pi/T\), the Nyquist frequency, exactly where the controller has no business acting — and the unfiltered digital derivative will cheerfully amplify any noise that aliases into that region, which the analog derivative filter is meant to suppress but which the digital version suppresses only if the Tustin-transformed filter is actually applied. The temptation to "save the multiply" by skipping the filter is real on a constrained processor, and the consequence is a controller that looks correct at DC and oscillates at the sample rate, which is one of the more frustrating failure modes to debug because the oscillation is invisible in the slow-sampled telemetry and obvious only in a fast oscilloscope on the actuator.
Sample rate selection: a heuristic, not a theorem
The folklore is "sample at least 10× the desired closed-loop bandwidth". This is roughly true but is a heuristic, not a theorem: it derives from a confluence of three independent effects — (i) the phase lag introduced by the sampler-ZOH-DAC chain is roughly \(\omega T/2\) at the plant input, which at 10× bandwidth is \(0.2\) rad of excess phase, marginally tolerable; (ii) Tustin warping at 1/10 of the sample rate is small, \(\tan(\pi/10) \approx 0.32\) vs. \(\pi/10 \approx 0.31\), about 3%; (iii) the anti-alias filter's transition band has a decade to roll off. Each of these is a ~5–10% effect, and their sum is what makes "10×" feel right. Push to 5× and the ZOH phase lag is 0.4 rad (~23°), the warping is ~12%, and the anti-alias transition has half a decade — all three effects bite simultaneously, which is why 5× is the boundary at which experienced engineers start to worry [fn:: The 10× figure has no single origin; Aström & Wittenmark cite it as a rule of thumb, Franklin-Powell-Workman cite 20× for the "good" regime and 10× for the "acceptable" one. The disagreement between 10× and 20× in the literature is itself informative: the higher figure assumes you care about closed-loop transient fidelity, the lower assumes you care only about stability margins, and most production controllers fall somewhere between — which is to say, the heuristic encodes the designer's priorities more than it does a physical constraint.].
Push too fast and the costs invert: at \(T \to 0\) the discrete derivative term scales as \(1/T\) and becomes a noise amplifier; the coefficient quantization of the integral term scales as \(T\), which at microsecond sample periods overflows fixed-point accumulators; and the computation budget — which is finite — is consumed by samples that carry no new information. There is a sweet spot, and it is wider than the folklore suggests but narrower than the "sample as fast as the ADC allows" reflex would imply. The steelman of "sample as fast as possible" is that fast sampling makes the digital controller behave like an analog one and simplifies analysis; the steelman is correct up to the point where wordlength and noise become the binding constraints, at which point it stops being correct abruptly.
There is also a lower bound that is less discussed: the controller must be fast enough to see the dynamics it is meant to control. A sample rate slower than the fastest significant mode of the plant is not merely suboptimal but unobservable — the controller cannot distinguish a fast disturbance from no disturbance, and a fast unstable mode from a stable one. The 10× rule implicitly assumes the closed-loop bandwidth and the fastest plant mode are comparable; when they are not (a slow controller on a plant with a high-frequency structural resonance), the relevant ratio is to the resonance, not the bandwidth, and the anti-alias filter must be designed against the resonance instead of against the control bandwidth — a confusion that has caused more than one servo to excite a structural mode it could not see.
A further subtlety is that the "10×" is a ratio of frequencies, and bandwidth is conventionally quoted at \(-3\) dB, which for a first-order loop is a factor of \(\sqrt{2}\) below the crossover, which is itself a factor of ~2 below the gain margin frequency. The cumulative factors mean that "10× the \(-3\) dB bandwidth" and "10× the crossover" and "10× the gain-margin frequency" are three different sample rates differing by a factor of ~3, and the folklore is silent on which one is meant — which is another way in which the heuristic encodes a designer's implicit choice and is not, despite its numerical precision, a theorem.
Quantization and wordlength: the other digital tax
Sampling is half the digital tax; quantization is the other half, and it is the one the control curriculum most consistently underplays. A \(b\)-bit ADC with full-scale \(V_{FS}\) has quantization step \(\Delta = V_{FS}/2^b\) and quantization noise variance \(\Delta^2/12\), uniformly distributed — a model that is good enough for analysis and bad enough to mislead, because real ADCs have harmonic distortion, drift, and temperature-dependent offset that dominate the ideal quantization floor at all but the highest bit depths. For control purposes the binding constraint is not the noise floor but the limit cycle: a closed loop with a quantized actuator and a quantized sensor can settle into a low-amplitude oscillation that no linear analysis predicts, because the linear analysis assumes infinite resolution and the limit cycle is a genuinely nonlinear phenomenon [fn:: The classical reference is Åström (1993) on "granularity limit cycles"; the phenomenon is well known to anyone who has tuned a position servo and watched it buzz at a few counts of encoder resolution. The limit cycle amplitude is set by the actuator LSB, and the period is set by the loop gain — neither of which the linear theory predicts, which is a quiet argument that linear control theory is a worse model for digital control than its analog scope already suggested.].
The mitigation is dither: adding noise of order one LSB before quantization linearizes the quantizer in the statistical sense and turns limit cycles into noisy-but-bounded error. This is counterintuitive — adding noise to improve control — and it is one of the few digital control tricks with no analog counterpart, because the analog signal is already continuous and the quantizer is the only thing that breaks continuity. The cost is a small increase in the noise floor; the benefit is the elimination of limit cycles below the dither amplitude, which is usually a good trade and almost never a free one.
The steelman of "use only as many bits as you need" is that each extra bit halves the noise floor at the cost of doubled bandwidth and doubled processing — a real trade on a constrained platform. The steelman breaks down at the actuator: an actuator LSB that is comparable to the controller's desired resolution makes the loop unanalyzable by linear methods, and the fix (dither) restores analyzability at the cost of wearing the actuator. This is the kind of trade that is invisible to the theorist, who models the quantizer as additive white noise, and painfully visible to the engineer, who has to explain to the mechanical team why their valve is chattering.
A separate wordlength concern is the coefficient quantization, distinct from signal quantization. A controller designed in double precision and ported to a fixed-point processor sees its pole locations shift because the coefficients \(a_i, b_i\) are rounded to the processor's wordlength, and for a sharply-peaked controller the pole shift can be large enough to cross the unit circle — a stable controller becomes unstable in porting. The remedy is to design with the target wordlength in mind from the start, which most control courses do not teach because the assignment hardware runs in floating point and the discrepancy only surfaces when a student's controller is deployed on a real embedded target. This is one of the recurring gaps between control theory as taught and control engineering as practiced, and it is a gap that widens as the cost of floating-point compute falls and the temptation to deploy fixed-point controllers in cost-sensitive products remains.
The discrete root locus and the cost of visualization
The root locus in the z-plane is the same construction as in the s-plane — the locus of closed-loop poles as a scalar gain varies — but the geometry is harder to read because the stability boundary is a circle instead of a line. The s-plane locus has a privileged direction: moving left is good, moving right is bad, and the gain at which a branch crosses the imaginary axis is the gain margin. The z-plane locus has a privileged region (inside the unit circle) but no privileged direction, so "which way is worse" depends on where the branch is — a pole moving radially outward is always degrading, but a pole moving tangentially can be degrading or improving depending on its angle, because the damping ratio is encoded in the angle to the origin, not in the radial distance [fn:: The damping ratio of a complex z-plane pole at \(z = r e^{j\theta}\) is \(\xi = -\ln r / \sqrt{(\ln r)^2 + \theta^2}\), a formula no one remembers and which is why most engineers plot the locus on top of constant-\(\xi\) contours (log-spirals) instead of computing it. The s-plane's straight-line constant-\(\xi\) rays are easier on the eye and the memory, which is a small but real reason analog root-locus is taught more confidently than digital.].
The practical consequence is that the discrete root locus is a less effective design tool than its analog cousin, and digital control designers lean more heavily on direct pole placement, on LQR/LQG synthesis in state space, or on Bode-loop-shaping in the w-plane (a bilinearly-transformed z that restores the s-plane's left-right geometry). The w-plane trick — \(z \mapsto \frac{2}{T}\frac{z-1}{z+1}\), the inverse of Tustin — is a small betrayal of the z-transform's elegance, and a tacit admission that the analog visual vocabulary is too useful to abandon.
Realization and numerical conditioning
A transfer function \(G(z)\) is one representation of a controller; the realization — the choice of state variables and the corresponding \((A, B, C, D)\) matrices — is another, and the choice matters more in the digital world than the analog one because finite-precision arithmetic makes some realizations numerically pathological. The direct form realization, which uses the coefficients of \(G(z)\) directly as the state-space entries, is the obvious choice and the worst: for a high-order controller the direct-form \(A\) matrix becomes ill-conditioned because the coefficients of a sharply-peaked polynomial are large and alternating, and rounding them to a fixed-point representation moves the poles substantially. The cascade form, which factors \(G(z)\) into first- and second-order sections and realizes each separately, is the standard remedy: each section has a well-conditioned representation, the pole locations are preserved under rounding to within the section's wordlength, and the cascade is cheap to compute.
The parallel form, which expands \(G(z)\) in partial fractions and sums the sections, is equally well-conditioned and has the advantage that each section's gain is independent — useful for tuning. The choice between cascade and parallel is mostly aesthetic; both are far better than direct form, and both are routinely ignored in student projects because the difference only appears at orders above ~4 or at fixed-point precisions below ~16 bits, neither of which the standard assignment exercises [fn:: The discrepancy between the textbook-friendly direct form and the practice-friendly cascade form is a general pattern: textbooks favor the representation that makes the algebra shortest, practitioners favor the one that survives rounding, and the curriculum teaches the algebraic form first because it is teachable, not because it is right. This is the same reason Routh-Hurwitz is taught before the root locus, and it has the same downstream cost: students graduate knowing the method that is easiest to grade and rediscover the method that actually works on the job.].
The deeper observation is that the transfer function is not the controller. The transfer function is a mathematical object; the controller is a piece of code running on a particular processor with a particular wordlength and a particular scheduling jitter, and two realizations that are algebraically identical can have wildly different behavior on hardware. This is the part of digital control that is least reducible to a theorem and most reducible to experience, and it is the part that the analog-trained engineer most often underestimates — the analog op-amp circuit is the same circuit regardless of how you draw it, but the digital controller is a different controller depending on how you factor it.
Multi-rate and the slow-fast decomposition
A subtlety that the single-rate treatment hides is that real digital control systems are almost never single-rate. The sensor, the controller, and the actuator run at rates set by their respective hardware constraints: an IMU may sample at 1 kHz, a flight controller loop at 100 Hz, an actuator servo at 50 Hz, and a telemetry downlink at 10 Hz. Treating this as a single-rate system at the slowest rate is conservative and wastes the fast sensor; treating it as single-rate at the fastest rate demands the controller run at the fast rate and wastes compute. The honest treatment is multi-rate, in which each block runs at its own rate and the inter-block signals are resampled (with rate-change filters that themselves must be anti-aliased), and the analysis is carried out in the lifted domain, where one "super-period" of the slowest rate is unfolded into a higher-dimensional single-rate system [fn:: The lifted representation is due to Kranc (1957) and refined by Coffey & Williams (1966); it is elegant and almost never used in industry, where multi-rate loops are tuned empirically with the slowest rate as the binding constraint. The gap between the technique that exists and the technique that is practiced is wider in multi-rate control than in almost any other corner of the field, and the reason is that the lifted system's dimension is the product of the block rates, which becomes intractable as soon as the ratio is non-trivial.].
The pragmatic compromise is the slow-fast decomposition: design the fast inner loop (e.g., a current or rate loop) as a single-rate system at its native rate, treat its closed loop as a fast actuator for the slow outer loop, and design the outer loop at the slow rate against the inner loop's sampled response. This works when the inner loop is much faster than the outer (the usual 10× rule again, now applied between loops instead of to a single loop), and it fails when the loops are not well-separated — which is the same condition under which the single-rate treatment also fails, so the decomposition is a refinement instead of a restriction of the single-rate analysis.
Worked example: PID for a thermal plant at two sample rates
Consider a first-order thermal plant \(G_p(s) = \frac{1}{60s + 1}\) (units: kelvin per watt, seconds), i.e., a 60 s time-constant heater-thermal-mass system. Design an analog PID by Ziegler-Nichols-like tuning to \(K_p = 6\), \(T_i = 120\) s, \(T_d = 15\) s, with derivative filter \(N = 10\). Discretize via Tustin at two sample rates and compare the closed-loop response to a unit setpoint step. The plant is deliberately slow — a thermal instead of a servo — because the point of the example is to show that the discretization distortion depends on the ratio of the sample rate to the plant's time constant, not on the sample rate in absolute terms, and a slow plant tolerates a slow sample rate with visible but tolerable degradation.
At \(T = 0.1\) s, the prewarp at the closed-loop bandwidth (~0.05 rad/s) is negligible: \(\tan(0.05 \cdot 0.05)/0.05 \approx 1.00004\). The Tustin-mapped integrator \(T_i s \mapsto \frac{2 T_i}{T}\frac{z-1}{z+1} = 2400 \frac{z-1}{z+1}\); the filtered derivative maps to a second-order section with poles near \(z = e^{-T/1.5} \approx 0.9355\). The closed-loop step response tracks the analog prototype within ~1% across the rise, settles in ~80 s, with no visible sample-rate artifacts.
At \(T = 1\) s the integrator gain becomes \(\frac{2 T_i}{T} = 240\); the derivative pole moves to \(z = e^{-1/1.5} \approx 0.513\); the ZOH phase lag at the crossover (~0.05 rad/s) is \(0.05 \cdot 1 / 2 = 0.025\) rad, still small. The closed-loop response is recognizably the same shape, but the settling time stretches to ~95 s and there is a visible one-sample staircase on the rising edge. The control is still stable and the performance degradation is a few percent — which is the point: for a plant with a 60 s time constant, even a 1 s sample rate is "fast" relative to the dynamics, and the 10× rule (which would demand \(T < 2\) s) is satisfied at both rates with room to spare.
A dimensional check on the numbers, since PID tuning is unusually prone to unit errors: \(K_p = 6\) is dimensionless (error in K, output in W, so K/W); \(T_i = 120\) s has units of time and appears only as \(T/T_i\) which is dimensionless; \(T_d = 15\) s likewise appears as \(T_d/T\), dimensionless. The Tustin-mapped integrator gain \(2 T_i / T = 2400\) at \(T = 0.1\) s carries units of seconds, and the integral term \(K_p \cdot (T/T_i) \cdot \sum e[j]\) is \(6 \cdot (0.1/120) \cdot (\text{K} \cdot \text{samples})\), which is watts provided we remember that the "samples" carry the unit of the accumulator's running count — a unit that is normally elided and becomes a bug exactly when someone changes the sample rate without rescaling the integral coefficient [fn:: The unit-of-the-accumulator is the silent killer of digital PID ports across platforms. A controller tuned on a 1 kHz target and recompiled for a 100 Hz target without rescaling \(K_i = K_p T / T_i\) will be 10× too aggressive, and the bug manifests as oscillation instead of a clean error, which makes it easy to misattribute to tuning instead of to the port. This is one of the few cases where carrying units through the discretization would have caught the error and where the convention of treating the integral sum as dimensionless actively hides it.].
The pathology appears only when the same controller is pushed to \(T = 10\) s: the ZOH lag at crossover is now 0.25 rad, the derivative pole is at \(z = e^{-10/1.5} \approx 0.0012\) (essentially gone), the integrator gain is \(24\), and the closed loop develops a visible oscillation at ~0.04 Hz — the controller is now acting on stale information and overcorrecting. This is the cliff the heuristic is meant to keep you away from, and the cliff is at roughly the 10× point, exactly as advertised — which is the strongest evidence that the heuristic is calibrated to a real physical boundary, not merely a convention.
A note on what the worked example does not show: the discretization here is of an analog PID via Tustin, which is the engineering-default workflow. The alternative — designing the discrete controller directly in the z-plane, placing poles at desired \(z\)-locations without an analog intermediate — is theoretically cleaner and is the method state-space and LQR-style synthesis favor. In practice, the analog-first workflow dominates because the analog design vocabulary (Bode plots, loop shaping, Nichols charts) is richer and more intuitive than the z-plane vocabulary, and the discretization step is cheap enough that the workflow's overhead is justified by the design-time savings. This is a case where the theoretically-pure method lost to the practically-convenient one, and the loss is, on the whole, deserved: the analog design tools are better, and the discretization distortion is controllable, so the workflow is a good trade — which is rare enough to be worth noting.
A coda on the digital-analog division
The cleanest single-sentence summary of digital control is that it is analog control plus a sampler and a hold, and everything difficult follows from that addition. The sampler introduces aliasing; the hold introduces phase lag; together they introduce a sample-rate sensitivity that has no analog counterpart, and they require a sampling theorem, a z-transform, a Jury test, and a sample-rate heuristic that analog control does not need. The temptation, to which the curriculum partly succumbs, is to treat digital control as a generalization of analog control — but it is more accurate to treat it as a restriction: a digital controller is an analog controller constrained to act on sampled data, and the constraint is the source of every distinctive pathology. The methods (Tustin, ZOH, prewarping) are the engineer's compensations for the constraint, and they work well enough that the constraint is invisible most of the time — which is the highest compliment one can pay an engineering compensation, and also the reason its occasional failures come as surprises.
The deeper lesson, if there is one, is that the analog-digital boundary is not a fact about the controller but a fact about the implementation medium, and the same control law can be expressed in either. The interesting question is therefore not "analog or digital?" but "given the implementation medium I have, which compensations does it require, and which pathologies does it introduce?" — and the answer is different enough that the two literatures, though they share most of their mathematics, have developed distinct instincts, distinct folklore, and distinct failure modes. The student who learns only one of them is competent in half of control engineering; the student who learns both notices that the analog half is the cleaner theory and the digital half is the messier practice, and that the mess is where the actual controllers live.
A final caveat: this note has stressed the pathologies because they are what makes digital control distinctive, but the distinctive part is a minority of the practice. Most of a digital controller's behavior is analog behavior in a digital costume — the loop shaping, the gain and phase margins, the sensitivity functions, the disturbance rejection are inherited wholesale from the analog theory, and the digital-specific corrections (Tustin, prewarping, anti-alias) are second-order adjustments to a first-order analog design. A reader who concludes from this note that digital control is mostly pathologies has overcorrected; the truth is that it is mostly analog control with a small, tractable, and well-understood set of extra concerns, and the concerns are worth knowing precisely because they are the part that surprises the analog-trained engineer.
Related
- Control Theory: Signals & Laplace
- PID Control: Theory & Tuning
- Stability: Routh-Hurwitz
- State-Space Representation
- Frequency Response: Bode & Nyquist
- Frequency Response: Bode & NyquistElectronics
- Optimal Control: LQR, Riccati, and the Kalman FilterElectronics
- PID Control: Theory, Tuning & ImplementationElectronics
- Transfer Functions & Block DiagramsElectronics