Skip to main content

Steady-State Errors and Sensitivity

Steady-state error measures the accuracy left after transients have died out. In Nise's sequence it follows stability because final error is meaningful only for stable closed-loop systems. A design that tracks accurately while unstable is not a design; it is an invalid calculation.

The chapter's main message is that low-frequency loop structure determines tracking accuracy. System type, static error constants, disturbance location, nonunity feedback, and parameter sensitivity all describe what remains after the fast behavior is gone. These ideas explain why integral action is so valuable and why gain alone often creates trade-offs with transient response.

A feedback loop block diagram shows an output signal returned to the input through a controller path.

Figure: Feedback loop block diagram in control theory. Image: Wikimedia Commons, Inductiveload, public domain.

Definitions

For a unity negative-feedback system with forward transfer function G(s)G(s),

E(s)=R(s)1+G(s).E(s)=\frac{R(s)}{1+G(s)}.

The steady-state error is

ess=limte(t).e_{ss}=\lim_{t\to\infty}e(t).

When the closed-loop system is stable and the final value theorem applies,

ess=lims0sE(s).e_{ss}=\lim_{s\to0}sE(s).

The system type is the number of pure integrators in the forward path G(s)G(s) for unity feedback. Equivalently, it is the number of poles at the origin in G(s)G(s) after cancellations that are physically justified. Static error constants are

Kp=lims0G(s),K_p=\lim_{s\to0}G(s), Kv=lims0sG(s),K_v=\lim_{s\to0}sG(s),

and

Ka=lims0s2G(s).K_a=\lim_{s\to0}s^2G(s).

For step, ramp, and parabolic inputs, the steady-state errors are:

InputR(s)R(s)Error constantesse_{ss}
unit step1/s1/sKpK_p1/(1+Kp)1/(1+K_p)
unit ramp1/s21/s^2KvK_v1/Kv1/K_v
unit parabola1/s31/s^3KaK_a1/Ka1/K_a

The sensitivity of a transfer function TT to a parameter aa is

STa=T/Ta/a=aTTa.S_T^a=\frac{\partial T/T}{\partial a/a} =\frac{a}{T}\frac{\partial T}{\partial a}.

Key results

For unity feedback, system type determines which polynomial inputs can be tracked with zero error:

TypeStep errorRamp errorParabolic error
0finiteinfiniteinfinite
1zerofiniteinfinite
2zerozerofinite

This table is a structural result. Increasing gain changes the finite constants but does not change type. To turn a finite ramp error into zero ramp error, the loop needs another integrator or equivalent low-frequency behavior, not merely a larger finite gain.

For nonunity feedback, the actual error signal at the summing junction is

E(s)=R(s)H(s)C(s).E(s)=R(s)-H(s)C(s).

If the desired physical tracking error is R(s)C(s)R(s)-C(s), the block diagram may need to be rearranged into an equivalent unity-feedback form before applying static error constants. This is a frequent source of wrong answers.

Disturbance error depends on where the disturbance enters. A disturbance added at the plant input is filtered differently from a disturbance added at the output. Feedback reduces disturbances most effectively where loop gain is large, but actuator saturation, sensor noise, and stability margins limit how large loop gain can be.

For a standard closed-loop transfer function

T(s)=G(s)1+G(s)H(s),T(s)=\frac{G(s)}{1+G(s)H(s)},

large loop gain reduces sensitivity to forward-path gain variations. If H=1H=1, sensitivity of TT to GG is

STG=11+G.S_T^G=\frac{1}{1+G}.

This is one of the central reasons feedback is used.

The final value theorem has a hidden stability requirement. It is not enough to take lims0sE(s)\lim_{s\to0}sE(s) algebraically. All poles of sE(s)sE(s) must be in the open left half-plane for the limit to equal the time-domain final value. If the closed-loop system is unstable, the computed "steady-state error" may be a finite number even though the actual signal diverges. This is why Nise places stability before steady-state error in the sequence.

System type should be read after the loop has been put into the proper unity-feedback form. A sensor gain H(s)H(s) changes the relationship between the summing-junction error and the physical tracking error. If H(0)1H(0)\ne1, the output may settle to a scaled version of the reference even when the summing-junction error goes to zero. In instrumentation problems, calibration can be as important as controller type.

Integral action is powerful because it forces the controller to keep changing its output while a persistent error remains. In a stable loop, a nonzero constant error would make the integral term grow, so the only possible steady state is one where the error is driven to zero. The same mechanism can become harmful under actuator saturation: the integral term may grow while the actuator cannot respond, leading to overshoot when it finally desaturates.

Disturbance rejection has a frequency dimension. Static error constants describe low-frequency or polynomial inputs. A sinusoidal disturbance at high frequency is governed by the disturbance-to-output transfer function evaluated at that frequency. Raising low-frequency loop gain may improve constant load rejection while doing little for high-frequency sensor noise. A complete design therefore checks both steady-state constants and frequency-domain sensitivity functions.

Sensitivity is local. The expression STa=(a/T)(T/a)S_T^a=(a/T)(\partial T/\partial a) predicts small fractional changes around a nominal parameter value. It does not guarantee performance under large parameter jumps, nonlinear component changes, or structural model errors. Still, it is a useful first robustness measure because it identifies which physical parameters most strongly affect a specification and where feedback reduces or amplifies that dependence.

The input class must be specified when stating an error requirement. "Zero steady-state error" to a step is much easier than zero error to a ramp, and zero error to a ramp is easier than zero error to a parabolic command. In motion systems, these correspond roughly to position, constant-velocity, and constant-acceleration commands. The same controller can be excellent for setpoint regulation and poor for trajectory tracking.

Error constants also assume polynomial inputs of unit size. If the ramp has slope AA, then the ramp input is A/s2A/s^2 and the steady-state error is A/KvA/K_v. If a parabolic input has a different acceleration coefficient, scale the formula accordingly. Always keep the command magnitude with the calculation rather than quoting only the unit-input result.

Visual

Design actionError benefitCommon cost
Increase proportional gainlowers finite steady-state errormore overshoot, less margin
Add integral actionincreases system typeslower response or oscillation risk
Add lag compensatorboosts low-frequency gainadds slow pole-zero pair
Improve sensor calibrationreduces nonunity scaling errorhardware cost
Feedforward known commandreduces predictable errorweak against unmodeled disturbances

Worked example 1: system type and static error constants

Problem: A unity-feedback system has

G(s)=20(s+2)s(s+5).G(s)=\frac{20(s+2)}{s(s+5)}.

Find the system type and steady-state errors for unit step and unit ramp inputs.

Method:

  1. Count pure integrators in G(s)G(s). There is one pole at the origin, so the system is Type 1.

  2. Step error uses

Kp=lims0G(s).K_p=\lim_{s\to0}G(s).

Since G(s)G(s) contains 1/s1/s,

Kp=.K_p=\infty.

Thus

ess,step=11+Kp=0.e_{ss,\text{step}}=\frac{1}{1+K_p}=0.
  1. Ramp error uses
Kv=lims0sG(s).K_v=\lim_{s\to0}sG(s).

Compute:

Kv=lims0s20(s+2)s(s+5)=lims020(s+2)s+5.K_v=\lim_{s\to0}s\frac{20(s+2)}{s(s+5)} =\lim_{s\to0}\frac{20(s+2)}{s+5}.

Evaluate:

Kv=20(2)5=8.K_v=\frac{20(2)}{5}=8.
  1. Ramp error is
ess,ramp=1Kv=18=0.125.e_{ss,\text{ramp}}=\frac{1}{K_v}=\frac{1}{8}=0.125.

Checked answer: Type 1, zero step error, ramp error 0.1250.125.

Worked example 2: sensitivity reduction by feedback

Problem: A closed-loop unity-feedback system has forward path G=50G=50 at low frequency. Estimate the sensitivity of closed-loop gain T=G/(1+G)T=G/(1+G) to a fractional change in GG. If GG increases by 10%10\%, approximately how much does TT change?

Method:

  1. Use the sensitivity formula:
STG=11+G.S_T^G=\frac{1}{1+G}.
  1. Substitute G=50G=50:
STG=151=0.0196.S_T^G=\frac{1}{51}=0.0196.
  1. A 10%10\% change in GG means
ΔGG=0.10.\frac{\Delta G}{G}=0.10.
  1. Approximate fractional change in TT:
ΔTTSTGΔGG=0.0196(0.10)=0.00196.\frac{\Delta T}{T}\approx S_T^G\frac{\Delta G}{G} =0.0196(0.10)=0.00196.
  1. Convert to percent:
0.00196×100%=0.196%.0.00196\times100\%=0.196\%.

Checked answer: the closed-loop gain changes by only about 0.2%0.2\% for a 10%10\% forward-path gain change, assuming the low-frequency gain model applies.

Code

import sympy as sp

s = sp.symbols("s")
G = 20 * (s + 2) / (s * (s + 5))

Kp = sp.limit(G, s, 0)
Kv = sp.limit(s * G, s, 0)
Ka = sp.limit(s**2 * G, s, 0)

print("Kp:", Kp)
print("Kv:", Kv)
print("Ka:", Ka)
print("step error:", sp.simplify(1 / (1 + Kp)))
print("ramp error:", sp.simplify(1 / Kv))

G0 = 50
sensitivity = 1 / (1 + G0)
print("closed-loop sensitivity:", sensitivity)

Common pitfalls

  • Applying the final value theorem before verifying closed-loop stability.
  • Counting system type from the closed-loop transfer function instead of the unity-feedback forward path.
  • Cancelling an integrator casually. A pole-zero cancellation at the origin changes steady-state error conclusions and may be physically impossible.
  • Using unity-feedback formulas on nonunity-feedback diagrams without rearranging or interpreting the actual error.
  • Forgetting disturbance location. There is no single disturbance rejection formula for every injection point.
  • Solving for low steady-state error by gain alone when the specification really requires a higher system type.

Connections