Control Systems
Luenberger State Observer: Reconstructing Unmeasured States from Outputs
Put a single tachometer on a DC motor and you can measure shaft speed 10,000 times a second — but the rotor flux, the load torque, and the shaft position you actually need for tight control are nowhere on the wiring diagram. A Luenberger observer closes that gap: it runs a real-time software copy of the plant, drives it with the same inputs, and continuously nudges the copy with the one signal you can measure until every internal state — measured or not — converges to the truth, often within 10–50 milliseconds.
Formally, the Luenberger observer is a deterministic state estimator for linear time-invariant systems. Given a plant ẋ = Ax + Bu with a measurable output y = Cx, it produces an estimate x̂ whose error e = x − x̂ decays to zero at a rate you choose, provided the pair (A, C) is observable. It was introduced by David G. Luenberger in 1964 and remains the textbook foundation of modern state-space control.
- TypeDeterministic linear state estimator
- Invented byDavid G. Luenberger, 1964 (IEEE Trans. Mil. Electron.)
- Governing equationx̂̇ = Ax̂ + Bu + L(y − Cx̂)
- Error dynamicsė = (A − LC)e
- Exists if(A, C) observable / detectable
- Used inMotor drives, robotics, aerospace, sensorless FOC
Interactive visualization
Press play, or step through manually. The visualization is yours to drive — try it before reading on.
Watch the 60-second explainer
A condensed visual walkthrough — narrated, captioned, under a minute.
What It Is and Where It Is Used
A Luenberger observer is a dynamic system that runs alongside a plant in software (or analog hardware) and outputs an estimate x̂ of the plant's full internal state vector x. You need it because modern control laws — LQR, pole placement, model-predictive control — assume you can feed back every state, yet real hardware instruments only a handful of them. A robot arm may have encoders on the joints but not on joint velocities or motor currents; an aircraft measures pitch angle but not the aerodynamic states that produce it.
- Sensorless motor drives: field-oriented control estimates rotor flux and position from measured stator currents and voltages, eliminating a costly, failure-prone resolver.
- Robotics: reconstructs joint velocities and load torques from position encoders alone.
- Aerospace and automotive: estimates sideslip, angle of attack, or battery state-of-charge that no cheap sensor reports directly.
Because it is deterministic and computationally light — a few matrix multiplies per sample — the Luenberger observer runs comfortably inside a 10–100 kHz control loop on an ordinary microcontroller or DSP.
How It Works: The Innovation-Corrected Model
The observer is a copy of the plant model plus a correction term. The plant is ẋ = Ax + Bu, y = Cx. The observer runs:
x̂̇ = A·x̂ + B·u + L·(y − C·x̂)
Here x̂ is the estimated state, u is the same input applied to the plant, and y is the measured output. The bracketed term (y − Cx̂) is the innovation or output-prediction error — the mismatch between what the sensor reads and what the model predicts it should read. L is the n×p observer gain matrix that converts that scalar/vector mismatch into a correction spread across all n states.
Subtracting the observer from the plant gives the estimation error e = x − x̂, whose dynamics are:
ė = (A − LC)·e
The input u, the B matrix, and the plant state have all cancelled — the error evolves autonomously. If L is chosen so that (A − LC) is Hurwitz (all eigenvalues in the left half-plane), then e → 0 for any initial mismatch, and x̂ tracks the true x regardless of where the estimate started.
Key Quantities and a Worked Design
The design freedom is entirely in placing the eigenvalues of (A − LC). By duality, designing L for (A, C) is identical to designing a state-feedback gain for the dual pair (Aᵀ, Cᵀ): L = (place(Aᵀ, Cᵀ, poles))ᵀ. For single-output systems, Ackermann's formula gives L in one shot: L = φ(A)·𝒪⁻¹·[0 … 0 1]ᵀ, where 𝒪 is the observability matrix [C; CA; …; CAⁿ⁻¹] and φ(s) is the desired observer characteristic polynomial.
Example. Take a double integrator (position/velocity): A = [[0,1],[0,0]], C = [1, 0], measuring only position. Choose observer poles at s = −20 ± 20j (settling ≈ 4/20 = 0.2 s, natural frequency ≈ 28 rad/s). Matching φ(s) = s² + 40s + 800 to det(sI − (A − LC)) yields:
- L = [40, 800]ᵀ — so l₁ = 40 s⁻¹ corrects position and l₂ = 800 s⁻² reconstructs the unmeasured velocity.
Rule of thumb: place observer poles 2–6× faster than the closed-loop control poles so the estimate settles before the controller acts on it.
Designing and Operating It in Practice
A practical observer design follows a fixed recipe:
- Check observability first. Compute rank of 𝒪 = [C; CA; …; CAⁿ⁻¹]. If rank < n, some states are invisible from y and no L exists — you need detectability at minimum (unobservable modes already stable).
- Pick observer poles. Faster is more responsive but louder: doubling the observer bandwidth roughly doubles the amplification of sensor noise, because L scales with pole magnitude.
- Solve for L via pole placement, Ackermann (single-output), or the dual Riccati route.
- Discretize. Real loops run in discrete time, so implement x̂[k+1] = A_d·x̂[k] + B_d·u[k] + L_d·(y[k] − C·x̂[k]); keep the observer sample rate ≥ 10× the fastest observer pole to avoid aliasing.
The separation principle is what makes this tractable: you may design the controller gain K and the observer gain L completely independently. The combined closed-loop eigenvalues are exactly the union of the controller eigenvalues (of A − BK) and the observer eigenvalues (of A − LC) — they never interact.
Comparison to Kalman Filters and Reduced-Order Observers
The Luenberger observer's structure is identical to a steady-state Kalman filter — both are model-plus-correction estimators of the form x̂̇ = Ax̂ + Bu + L(y − Cx̂). The difference is how L is chosen. The Luenberger observer places poles by hand for a deterministic, noise-free model; the Kalman filter computes the optimal L (the Kalman gain) by solving a Riccati equation that trades process-noise covariance Q against measurement-noise covariance R. When Q and R are known, the Kalman gain is provably minimum-variance; when they are not, hand-tuned Luenberger poles are simpler and perfectly adequate.
- Reduced-order (minimal) observer: if p outputs are measured cleanly, those states need no estimation, so you build an observer of order n − p only for the hidden states — saving computation but forfeiting the noise-averaging that a full-order observer applies to measured channels.
- Sliding-mode / extended observers: handle nonlinearity or unknown inputs that the linear Luenberger form cannot.
All descend from the same 1966 Luenberger framework of identity, reduced-order, and functional observers.
Failure Modes, Trade-offs, and Significance
Observers fail in predictable ways:
- Model mismatch. The observer trusts A, B, C. If the real plant's parameters drift — motor resistance rising 40% as it heats, an unmodeled resonance — the estimate carries a steady bias the innovation cannot fully correct.
- Noise amplification. Aggressive (fast) poles make L large, so measurement noise on y is injected hard into x̂. The classic trade-off: convergence speed versus noise rejection. A Kalman filter formalizes this balance; a Luenberger design manages it by pole choice.
- Loss of observability at certain operating points (e.g., a sensorless PMSM drive near zero speed, where back-EMF vanishes) can make the error dynamics undamped and the estimate diverge.
Its historical significance is hard to overstate: by proving that state feedback and state estimation could be designed separately yet combined without penalty, Luenberger's work made full state-space control practical for systems with limited instrumentation — the enabling idea behind sensorless drives, inertial navigation, and virtually every modern embedded controller that acts on states it cannot directly see.
| Property | Full-order Luenberger | Reduced-order Luenberger | Kalman filter |
|---|---|---|---|
| States estimated | All n states | n − p unmeasured states | All n states |
| Handles noise | No (deterministic) | No (deterministic) | Yes (optimal, stochastic) |
| Gain L computed from | Pole placement / Ackermann | Pole placement on reduced system | Riccati equation (Q, R) |
| Order of estimator | n | n − p | n |
| Design inputs | Desired observer poles | Desired observer poles | Noise covariances Q, R |
| Typical use | Deterministic LTI control | Save computation, clean sensors | Noisy sensors, sensor fusion |
Frequently asked questions
What is the difference between a Luenberger observer and a Kalman filter?
Both share the identical structure x̂̇ = Ax̂ + Bu + L(y − Cx̂); the only difference is how the gain L is chosen. A Luenberger observer places the error-dynamics poles by hand for a deterministic, noise-free model. A Kalman filter computes the optimal L by solving a Riccati equation using process- and measurement-noise covariances Q and R, minimizing estimation variance under noise.
When does a Luenberger observer exist?
It exists whenever you can make (A − LC) stable by choosing L. Arbitrary pole placement requires the pair (A, C) to be fully observable — the observability matrix [C; CA; …; CAⁿ⁻¹] must have rank n. If only some modes are visible, you still get a working observer as long as the system is detectable, meaning any unobservable modes are already stable.
How fast should the observer poles be relative to the controller?
A standard rule of thumb places observer poles 2–6× faster (further into the left half-plane) than the dominant closed-loop control poles, so the state estimate converges before the controller relies on it. Making them too fast, however, inflates the gain L and amplifies sensor noise, so the practical sweet spot balances convergence speed against noise rejection.
What is the separation principle and why does it matter?
The separation principle states that for an LTI system you can design the state-feedback controller gain K and the observer gain L completely independently. The eigenvalues of the combined observer-plus-controller closed loop are exactly the union of the eigenvalues of (A − BK) and (A − LC). This decoupling is what makes observer-based control tractable — you never have to solve one huge coupled design problem.
What is a reduced-order observer and when do you use it?
If your system has n states and p of them are measured directly and cleanly, you do not need to estimate those p states. A reduced-order (minimal) observer of order n − p estimates only the hidden states, cutting computation. The trade-off is that you lose the noise-averaging a full-order observer applies to the measured channels, so it is best when the measured outputs are already low-noise.
How is the observer gain L actually computed?
Most commonly by duality: designing L for (A, C) is mathematically identical to designing a state-feedback gain for the transposed pair (Aᵀ, Cᵀ), so L = place(Aᵀ, Cᵀ, poles)ᵀ. For single-output systems, Ackermann's formula gives L = φ(A)·𝒪⁻¹·[0 … 0 1]ᵀ in one step, where 𝒪 is the observability matrix and φ(s) is the desired characteristic polynomial.