Control SystemsInternubiquitous

Complementary Sensitivity T(s) = L(s)/(1+L(s))

Complementary sensitivity T(s) = L(s)/(1+L(s)) explained: how it predicts tracking speed, overshoot, bandwidth, and the T+S=1 design trade-off.

9 min readAhmet Zahid ArıcanUpdated 30 Oct 2026
Complementary Sensitivity T(s): Tracking & Stability
Contents & prerequisites

Why complementary sensitivity matters in feedback control

Complementary sensitivity T(s) tells you, at every frequency, how faithfully your closed-loop output will follow a reference command. It is defined as T(s) = L(s) / (1 + L(s)), where L(s) is the loop gain — the product of your controller, plant, and any feedback sensor transfer functions. If T(s) ≈ 1 at a given frequency, the system tracks a sinusoidal command at that frequency almost perfectly. If T(s) rolls off toward 0, the system can't keep up, and the output lags or ignores the input entirely.

What T(s) tells you about reference tracking performance

T(s) is the transfer function from reference input R(s) to output Y(s): Y(s)/R(s) = T(s). It answers one concrete question — for a given commanded motion or setpoint change, how much of it actually reaches the output, and with what delay? A servo loop with T(s) flat at 0 dB out to 200 Hz will track a 150 Hz dither command with negligible attenuation; the same loop with T(s) down 6 dB at 150 Hz will visibly lag and shrink that motion.

How T(s) and sensitivity S(s) partition the closed-loop response

T(s) and sensitivity S(s) = 1/(1+L(s)) split the closed-loop system into two complementary views of the same loop gain L(s). T(s) governs reference tracking and noise sensitivity; S(s) governs disturbance rejection and steady-state error. They are two windows onto one feedback structure, not two independent design objects — tightening one necessarily loosens the other at any given frequency.

Why T(s) + S(s) = 1 constrains design trade-offs

T(s) + S(s) = 1 at every frequency, algebraically, because L/(1+L) + 1/(1+L) = (1+L)/(1+L) = 1. This identity is the single most important constraint in classical feedback design: you cannot make both T(s) and S(s) small at the same frequency. Where T(s) is near 1 (good tracking, good noise amplification risk), S(s) is near 0 (good disturbance rejection). Where T(s) rolls off, S(s) rises toward 1, meaning disturbances and steady-state errors pass through unattenuated. Every loop-shaping decision is really a decision about where to put this crossover.

Deriving T(s) from the standard feedback loop

Closed-loop transfer function from reference to output

Start from the standard unity-feedback block diagram: reference R(s) enters a summing junction, the error E(s) = R(s) − Y(s) drives controller C(s), whose output drives plant G(s), producing Y(s), which feeds back to the summing junction. Define loop gain L(s) = C(s)G(s). Then:

Y(s) = L(s) * E(s) = L(s) * (R(s) - Y(s))
Y(s) + L(s)Y(s) = L(s)R(s)
Y(s) * (1 + L(s)) = L(s) * R(s)
Y(s)/R(s) = L(s) / (1 + L(s)) = T(s)

That last line is the entire derivation. No approximations, no assumptions about L(s)'s order or whether it contains integrators — just algebra on the block diagram.

Role of loop gain L(s) in the numerator and denominator

L(s) appears in both the numerator and denominator of T(s), which is why T(s)'s behavior is counterintuitive at a glance. At frequencies where |L(jω)| ≫ 1, T(jω) ≈ L(jω)/L(jω) = 1 — tracking is essentially perfect regardless of the exact shape of L(s). At frequencies where |L(jω)| ≪ 1, T(jω) ≈ L(jω) — tracking degrades in direct proportion to how small the loop gain has become. The transition between these two regimes happens near the loop's crossover frequency, where |L(jω)| = 1.

Relationship to the characteristic equation 1 + L(s)

The denominator of T(s), 1 + L(s), is the closed-loop characteristic equation — its roots are the closed-loop poles. This is the same denominator that appears in S(s), which is why T(s) and S(s) share identical poles and differ only in numerator. If 1 + L(s) = 0 has roots in the right half-plane, the closed loop is unstable regardless of what T(s)'s magnitude plot looks like at any single frequency — magnitude plots alone don't certify stability, pole locations do.

How T(s) determines steady-state and transient tracking

DC gain and low-frequency tracking accuracy

T(0), the DC gain of T(s), sets steady-state tracking accuracy for step commands. If your loop contains an integrator (a pure 1/s term in L(s)), T(0) = 1 exactly, and step commands are tracked with zero steady-state error. Without an integrator, T(0) < 1, and a constant offset persists — this is the same steady-state error (Ess) discussed in terms of system type and error constants in Performance Specs: %OS, Ts, Tr, Tp, Ess; T(s) is simply the frequency-domain lens on that same number.

Bandwidth limits: where T(s) rolls off below unity

Tracking bandwidth is conventionally defined as the frequency where |T(jω)| drops to −3 dB (0.707 of its DC value). Above that frequency, the loop physically cannot keep up with reference changes — a sine-wave command above bandwidth comes out attenuated and phase-lagged at the output. If your application requires tracking a 50 Hz sawtooth profile, your T(s) bandwidth needs to extend comfortably past the sawtooth's dominant harmonics, not just its fundamental.

Phase lag and overshoot in step response

Phase lag in T(jω) near crossover shows up directly as time delay and overshoot in the step response. A second-order approximation of T(s) with damping ratio ζ and natural frequency ωn produces the familiar relationships between phase margin, percent overshoot, and settling time — the same %OS and Ts metrics covered in the performance-specs article above. Low phase margin (large phase lag at crossover) correlates with large overshoot; this is why T(s)'s phase, not just magnitude, matters for judging transient quality.

Peaking in magnitude: resonance and instability indicators

A bump in |T(jω)| above 0 dB — peaking — indicates underdamped, resonant closed-loop poles. A small peak (1–2 dB) is often acceptable and even desirable for faster response; a large peak (6 dB or more) signals the loop is operating close to its stability boundary and will ring visibly on any step or disturbance.

Reading T(s) magnitude and phase on a Bode plot

Unity-gain crossover and tracking bandwidth

On a Bode magnitude plot of T(jω), find where the curve crosses −3 dB; that frequency is your practical tracking bandwidth. Everything commanded below it tracks with modest attenuation; everything above it is effectively filtered out by the closed loop, whether you intended that or not.

Magnitude peaking M_t and its connection to stability margins

M_t, the peak value of |T(jω)| in dB, correlates inversely with phase margin: lower phase margin produces higher M_t. As a rough classical-control rule of thumb, phase margin above 45° typically keeps M_t under about 2.3 dB; phase margin below 30° often pushes M_t past 4–6 dB. Exact numbers depend on L(s)'s full shape, so treat this as a sanity check, not a design equation — verify against the actual Bode or Nyquist plot of your loop.

Phase lag at crossover frequency

Phase lag at the T(s) crossover frequency directly predicts response delay: a system with 90° of phase lag at its −3 dB point will show noticeably more sluggish tracking of fast transients than one with 45° lag at the same magnitude crossover, even though their bandwidth numbers look identical on paper.

T(s) vs. S(s): the fundamental trade-off in control design

Cannot simultaneously minimize both tracking and disturbance rejection

You cannot drive both |T(jω)| and |S(jω)| toward zero at the same frequency because they sum to 1. Every control design is a negotiation over which frequency band gets good tracking (T near 1) and which gets good disturbance rejection and low noise sensitivity (S near 1, T near 0).

High T(s) at low frequency improves command following

Keeping |T(jω)| ≈ 1 at low frequency — say, below 10 Hz for a typical position servo — ensures slow commands and setpoint changes are tracked accurately with minimal steady-state error.

Low T(s) at high frequency reduces noise amplification

Rolling |T(jω)| off at high frequency — above a few hundred Hz for many electromechanical loops — attenuates sensor noise and quantization artifacts that would otherwise pass straight through to the actuator command, causing audible buzz or wasted actuator effort.

Practical frequency-dependent weighting strategies

Frequency bandDesired T(s)Desired S(s)Typical concern
Below bandwidth≈ 1 (0 dB)≈ 0command tracking, steady-state error
Near crossovertransition, watch peakingtransitionstability margin, overshoot
Above bandwidthroll off (−20 dB/dec or steeper)≈ 1sensor noise, actuator wear

Stability constraints on T(s) magnitude and peaking

How T(s) peaking relates to damping and overshoot

For a dominant complex-pole-pair approximation, T(s) peak magnitude M_t relates to damping ratio ζ roughly as M_t ≈ 1/(2ζ√(1−ζ²)) for ζ < 0.707. Below ζ ≈ 0.4, peaking becomes pronounced and step-response overshoot climbs past 20–25%, consistent with the %OS figures in the performance-specs reference.

Safe M_t bounds for robust stability

Most industrial servo and power-converter designs target M_t between 1 dB and 3 dB, corresponding roughly to phase margins of 45°–65°. Pushing M_t past 6 dB trades a small amount of extra bandwidth for a loop that rings audibly on load steps and tolerates very little additional delay (from sensor filtering, computation, or added mass) before going unstable.

Why excessive peaking signals proximity to instability

High M_t means the closed-loop poles sit close to the imaginary axis in the s-plane; any further gain increase, added delay, or plant variation can push them across it. Treat a growing T(s) peak during tuning as an early-warning indicator, not a cosmetic detail — it is often the first visible symptom of a loop heading toward instability, well before the Nyquist or root-locus plot shows the pole crossing.

Practical design: shaping T(s) for your application

Loop-shaping methods to achieve desired tracking bandwidth

Shape L(s) directly — T(s) follows from it. Add integral gain to push T(0) to exactly 1 for zero steady-state error; add a lead compensator or PD term to extend crossover frequency and bandwidth; add a low-pass filter or lag term beyond crossover to force T(s) to roll off and suppress noise amplification without disturbing the low-frequency tracking region.

Balancing tracking speed against sensor noise and actuator limits

Pushing T(s) bandwidth higher always costs something: either actuator effort (faster response demands more torque or current swing) or noise immunity (a wider tracking band passes more raw sensor noise straight through to the output). Check your encoder or ADC noise floor against the required T(s) bandwidth before committing to an aggressive crossover frequency — a 16-bit position sensor with 2 LSB of jitter will inject that jitter directly into the command path if bandwidth is set too high.

Tuning controllers to flatten or peak T(s) deliberately

A flat T(s) (M_t near 0 dB, no peak) gives a clean, non-oscillatory step response at the cost of some settling speed; a deliberately peaked T(s) (M_t near 2–3 dB) trades a small overshoot for faster rise time, useful when speed matters more than smoothness. Pick the target based on the %OS and Tr specifications your application actually requires — not on making the Bode plot look tidy.

Learning

Sign in to track your progress.

Evidence

Public projects engineers linked to Complementary Sensitivity T(s) = L(s)/(1+L(s)).

Add evidence

No engineer has linked a project to this topic yet. Built something that proves it? Add the project and tag it with control-systems-complementary-sensitivity-ts-ls1ls — it then shows here and on your public profile.