Skip to the lesson
FixTheRobot Explore Robotics / Guidance, Navigation and Control / M3 Classical Feedback Control / M3-T1

Guidance, Navigation and Control · Theory · M3

M3-T1 — Transfer Functions, Poles and Zeros

A transfer function is a differential equation with the calculus taken out. Its poles say how the vehicle moves by itself, and where you put them is the design.

  • Lesson 1 of 7
  • Intermediate
  • Module 3: Classical Feedback Control
  • Theory
  • About 16 minutes to read

Hopper's pitch axis diverges with a pole at +0.7 per second. A feedback law moves that pole, and with another one it can be moved anywhere in the left half-plane. This lesson introduces the tool that makes the idea computable. The Laplace variable turns a differential equation into an algebraic one, the transfer function. Its poles and zeros then give, without simulating anything, the speed, damping and shape of the response. By the end you will have placed the poles of Hopper's pitch loop for a given overshoot and settling time, and checked the result against a simulation.

Learning objectives

After this lesson, you should be able to:

  • Write the transfer function of a linear model from its differential equation.
  • Read the poles and zeros of a transfer function and say what each does to the response.
  • Place the poles of a second-order loop to meet an overshoot and a settling time, and compute the feedback gains.
  • Say what a left-half-plane and a right-half-plane zero do to a step response.

The intuition

From module 2 you have a model of Hopper's pitch axis, θ¨=λ2θ+b δ\ddot{\theta} = \lambda^2\theta + b\,\delta, a linear differential equation. Differential equations are awkward to combine: put a controller and an actuator in series with the plant, and the equation grows with every block. The Laplace transform removes the awkwardness. It replaces the derivative by a multiplication, and a chain of blocks becomes a product.

Exponentials go through unchanged

The key fact is about one family of inputs, the exponentials este^{st}. Feed a linear system with constant coefficients an input este^{st} and its steady response is the same exponential scaled by a number, G(s) estG(s)\,e^{st}. That number, as a function of ss, is the transfer function. Because the derivative of este^{st} is s ests\,e^{st}, you find G(s)G(s) by writing ss wherever the equation has a derivative. Sines and cosines are exponentials with s=jωs = j\omega, which is why the same function gives the frequency response of the next lesson.

Poles: how the vehicle moves by itself

The poles are the values of ss at which the transfer function becomes infinite. Equivalently, they are the exponents pp for which epte^{pt} can exist with no input at all: the natural motions of the vehicle. A pole at p=+0.7p = +0.7 is a motion that grows as e0.7te^{0.7t}, which is Hopper's pitch divergence. A pole at p=−2.8+2.86jp = -2.8 + 2.86j is a decaying oscillation.

Poles of the pitch plant and of the pitch loop in the s-planeThe complex plane with the real part of s on the horizontal axis and the imaginary part on the vertical axis. Two orange crosses mark the open-loop poles of Hopper at plus and minus 0.7 on the real axis; the one on the right is in the unstable half plane. Two blue crosses mark the closed-loop poles at minus 2.8 plus and minus 2.86 j, both in the left half plane. A dashed arc of radius 4 passes through them, and a dashed line from the origin to each makes the angle whose cosine is the damping ratio 0.7.-6-5-4-3-2-1012-4.2-2.8-1.401.42.84.2real part of s (1/s)imaginary part (rad/s) +0.7 (grows)−0.7 closed loop: −2.8 ± 2.86 j ζ = cos(angle) = 0.7radius ωₙ = 4 rad/s Left half plane:decaysRight half plane:grows Distance from theorigin: naturalfrequency Distance from theimaginary axis:decay rate
The poles of Hopper's pitch plant (orange) and of the pitch loop with PD feedback (blue), in the complex plane of s. Distance to the left sets how fast a mode dies, the height sets how fast it oscillates, and the angle sets the damping.

Reading the picture gives three rules.

  • Real part: decay rate. A pole at −σ-\sigma dies as e−σte^{-\sigma t}. The further left, the faster. A pole in the right half-plane grows.
  • Imaginary part: oscillation. A pair at −σ±jωd-\sigma \pm j\omega_d oscillates at ωd\omega_d.
  • Angle from the negative real axis: damping. The cosine of that angle is the damping ratio ζ\zeta. Poles on the negative real axis have ζ=1\zeta = 1, poles on the imaginary axis have ζ=0\zeta = 0.

Zeros: what the response is built from

A zero is a value of ss at which the transfer function vanishes. Zeros do not decide stability, but they shape the response. A zero in the left half-plane makes the output react more strongly to changes in the input, adding overshoot. A zero in the right half-plane makes the response start in the wrong direction before correcting, an effect called undershoot that the worked example shows and that limits what any controller can do (M3-T6: Limits of Performance: Delay, Right-Half-Plane Zeros and the Bode Integral).

Design means choosing poles

This is how Hopper's pitch loop is designed. Choose where the closed-loop poles should be (fast enough, damped enough), and compute the feedback gains that put them there. The loop of this lesson has two poles and two gains, a one-to-one match, so every placement is reachable.

A transfer function turns a differential equation into algebra. Its poles are the natural motions of the system, and a feedback design is a choice of where they go.

Definitions

Laplace variable ss
A complex number. Replacing d/dtd/dt by ss in a linear equation with zero initial conditions turns the equation into an algebraic one.
Transfer function G(s)G(s)
The ratio of the output to the input, as a function of ss: G(s)=N(s)/D(s)G(s) = N(s)/D(s), a ratio of two polynomials.
Poles and zeros
The roots of the denominator D(s)D(s) (poles) and of the numerator N(s)N(s) (zeros). D(s)=0D(s) = 0 is the characteristic equation.
Natural frequency ωn\omega_n and damping ratio ζ\zeta
The two numbers that describe a pair of complex poles: its distance from the origin and the cosine of its angle from the negative real axis.
DC gain
The value of G(0)G(0): the steady output per unit of steady input.

For Hopper's pitch axis, replacing each derivative by ss in θ¨=λ2θ+bδ\ddot\theta = \lambda^2\theta + b\delta gives the plant from gimbal angle to pitch:

The pitch plant
Θ(s)=G(s) Δ(s),G(s)=bs2−λ2\Theta(s) = G(s)\,\Delta(s), \qquad G(s) = \frac{b}{s^2 - \lambda^2}
Θ\Theta and Δ\Delta are the transforms of the pitch and the gimbal angle. The poles are s=±λ=±0.7s = \pm\lambda = \pm 0.7. There is no zero.

A pair of complex poles is described by a natural frequency and a damping ratio. The standard second-order system, and the location of its poles, are:

Standard second-order system
T(s)=ωn2s2+2ζωns+ωn2,p=−ζωn±j ωn1−ζ2T(s) = \frac{\omega_n^2}{s^2 + 2\zeta\omega_n s + \omega_n^2}, \qquad p = -\zeta\omega_n \pm j\,\omega_n\sqrt{1 - \zeta^2}
The poles lie on a circle of radius ωn\omega_n about the origin, at the angle arccos⁡ζ\arccos\zeta from the negative real axis, as in the figure.

Its step response has an overshoot and a settling time that depend on the damping and the natural frequency:

Overshoot and 2% settling time
Mp=exp⁡ ⁣(−πζ1−ζ2),ts≈4ζ ωnM_p = \exp\!\left(-\frac{\pi\zeta}{\sqrt{1 - \zeta^2}}\right), \qquad t_s \approx \frac{4}{\zeta\,\omega_n}
MpM_p is the peak above the final value as a fraction of it, and tst_s the time after which the response stays within 2% of the final value. The overshoot depends on ζ\zeta alone.

Derivation: the pitch plant, the closed loop, and the specifications from the poles

Everything above follows from a few lines. First the transfer function, then the loop, then the formulas for the response.

  1. θ(t)=Θ est, δ(t)=Δ est  ⇒  θ¨=s2Θ est\theta(t) = \Theta\,e^{st},\ \delta(t) = \Delta\,e^{st} \;\Rightarrow\; \ddot\theta = s^2\Theta\,e^{st}

    Try an exponential input and an exponential output at the same ss, with constant amplitudes Δ\Delta and Θ\Theta. Each derivative brings down a factor ss.

  2. s2Θ=λ2Θ+bΔ  ⇒  ΘΔ=bs2−λ2s^2\Theta = \lambda^2\Theta + b\Delta \;\Rightarrow\; \frac{\Theta}{\Delta} = \frac{b}{s^2 - \lambda^2}

    Substitute into the pitch equation and divide out the common factor este^{st}. The ratio of the amplitudes is the transfer function.

  3. δ=Kp(θref−θ)−Kd θ˙  ⇒  s2Θ=λ2Θ+b(Kp(Θref−Θ)−Kd s Θ)\delta = K_p(\theta_{\text{ref}} - \theta) - K_d\,\dot\theta \;\Rightarrow\; s^2\Theta = \lambda^2\Theta + b\bigl(K_p(\Theta_{\text{ref}} - \Theta) - K_d\,s\,\Theta\bigr)

    Close the loop with a controller that pushes on the pitch error and brakes on the pitch rate (a PD law with the derivative taken on the measured rate). Substitute it for the gimbal angle.

  4. (s2+bKd s+(bKp−λ2)) Θ=bKp Θref\bigl(s^2 + b K_d\,s + (b K_p - \lambda^2)\bigr)\,\Theta = b K_p\,\Theta_{\text{ref}}

    Collect the terms in Θ\Theta. The left side is the characteristic polynomial of the loop, and the right side gives the numerator of the transfer function from reference to pitch.

  5. ωn2=bKp−λ2,2ζωn=bKd\omega_n^2 = b K_p - \lambda^2, \qquad 2\zeta\omega_n = b K_d

    Match the characteristic polynomial to s2+2ζωns+ωn2s^2 + 2\zeta\omega_n s + \omega_n^2. Two gains and two unknowns: for any ωn\omega_n and ζ\zeta there is exactly one pair of gains: Kp=(ωn2+λ2)/bK_p = (\omega_n^2 + \lambda^2)/b and Kd=2ζωn/bK_d = 2\zeta\omega_n/b.

Where the specifications come from

  1. envelope=e−ζωnt\text{envelope} = e^{-\zeta\omega_n t}

    The response of a pair of poles at −ζωn±jωd-\zeta\omega_n \pm j\omega_d is a sinusoid under this decaying envelope. The real part of the pole alone sets the decay.

  2. e−ζωnts=0.02  ⇒  ts=ln⁡50ζωn≈4ζωne^{-\zeta\omega_n t_s} = 0.02 \;\Rightarrow\; t_s = \frac{\ln 50}{\zeta\omega_n} \approx \frac{4}{\zeta\omega_n}

    The time at which the envelope has fallen to 2%. For ζωn=2.8\zeta\omega_n = 2.8 it is 1.4 s.

  3. Mp=e−πζ/1−ζ2M_p = e^{-\pi\zeta/\sqrt{1-\zeta^2}}

    The first peak of the step response of the standard system occurs half a damped period after the start, at which time the envelope has fallen by exactly this factor. The overshoot depends on the damping alone, so on the angle of the poles and nothing else.

Place the poles, and the response follows: their distance from the imaginary axis sets how fast the response settles, and their angle sets how much it overshoots.

A worked example

Design the pitch loop of Hopper at liftoff (b=19.62b = 19.62, λ=0.7\lambda = 0.7) for a natural frequency of 4 rad/s, the pitch-angle bandwidth of M1-T2: Nested Loops and Separation of Timescales, and a damping ratio of 0.7.

  1. Open loop. The plant poles are at ±0.7\pm 0.7. The one at +0.7 is the divergence of the pitch axis.
  2. Gains. Kd=2×0.7×4/19.62=0.2854K_d = 2 \times 0.7 \times 4/19.62 = 0.2854 and Kp=(16+0.49)/19.62=0.8405K_p = (16 + 0.49)/19.62 = 0.8405. The λ2\lambda^2 in KpK_p is the price of the unstable pole: part of the proportional gain only cancels the divergence.
  3. Closed-loop poles. The characteristic polynomial is s2+5.6 s+16s^2 + 5.6\,s + 16, with roots −2.8±2.857j-2.8 \pm 2.857j, the blue crosses of the figure.
  4. Predict. The overshoot is e−π⋅0.7/0.51=4.6%e^{-\pi\cdot 0.7/\sqrt{0.51}} = 4.6\% and the settling time 4/(0.7×4)=1.434/(0.7\times 4) = 1.43 s.
  5. Simulate. A step of the pitch reference gives an overshoot of 4.6%, as predicted, a 10 to 90% rise time of 0.53 s and a settling time of 1.49 s (the formula is an approximation, which is why it is 4% off). The steady value is 1.031, not 1: the DC gain bKp/(bKp−λ2)bK_p/(bK_p - \lambda^2) is above 1 because the loop spends part of its stiffness holding the unstable axis in place. Module 4 adds integral action to remove it.
  6. Zeros. The last three lines show what a zero does to the standard system s2+2.8s+4s^2 + 2.8s + 4. With no zero the peak is 1.046. A zero at −2 raises it to 1.112. A zero at +2 gives a peak of 1.057 and a dip to −0.249 first: the output goes the wrong way before it goes the right way.
import math
import gnckit as g

b, lam = 19.62, 0.7                     # Hopper at liftoff: pitch authority (rad/s^2 per rad) and divergence rate (1/s)
wn, zeta = 4.0, 0.7                     # chosen closed-loop natural frequency (rad/s) and damping ratio
plant = g.TF([b], [1, 0, -lam ** 2])    # pitch angle from gimbal angle: theta'' = lam^2 theta + b delta
print('open-loop poles', [round(p.real, 3) for p in plant.poles()], '(one grows like e^(0.7 t))')

Kd = 2 * zeta * wn / b                  # match s^2 + b Kd s + (b Kp - lam^2) to s^2 + 2 zeta wn s + wn^2
Kp = (wn ** 2 + lam ** 2) / b
cl = g.TF([b * Kp], [1, b * Kd, b * Kp - lam ** 2])
poles = [complex(round(p.real, 3), round(p.imag, 3)) for p in cl.poles()]
print(f'Kp = {Kp:.4f}, Kd = {Kd:.4f}, closed-loop poles {poles}')

ts, ys = g.step_response(cl, 6.0, 0.001)
final = ys[-1]
t10 = next(t for t, y in zip(ts, ys) if y >= 0.1 * final)
t90 = next(t for t, y in zip(ts, ys) if y >= 0.9 * final)
settle = max(t for t, y in zip(ts, ys) if abs(y - final) > 0.02 * final)
print(f'DC gain {cl.dcgain():.4f}, overshoot {100 * (max(ys) / final - 1):.1f}% (formula {100 * math.exp(-math.pi * zeta / math.sqrt(1 - zeta ** 2)):.1f}%)')
print(f'10-90% rise time {t90 - t10:.2f} s, 2% settling time {settle:.2f} s (formula 4/(zeta wn) = {4 / (zeta * wn):.2f} s)')

print('effect of a zero on s^2 + 2.8 s + 4 (step response):')
for name, num in (('no zero', [4]), ('zero at -2', [2, 4]), ('zero at +2', [-2, 4])):
    ts, ys = g.step_response(g.TF(num, [1, 2.8, 4]), 8.0, 0.001)
    print(f'  {name:11s} peak {max(ys):.3f}, lowest {min(ys):6.3f}')
open-loop poles [-0.7, 0.7] (one grows like e^(0.7 t))
Kp = 0.8405, Kd = 0.2854, closed-loop poles [(-2.8-2.857j), (-2.8+2.857j)]
DC gain 1.0306, overshoot 4.6% (formula 4.6%)
10-90% rise time 0.53 s, 2% settling time 1.49 s (formula 4/(zeta wn) = 1.43 s)
effect of a zero on s^2 + 2.8 s + 4 (step response):
  no zero     peak 1.046, lowest  0.000
  zero at -2  peak 1.112, lowest  0.000
  zero at +2  peak 1.057, lowest -0.249
step_response solves the closed loop exactly between samples; the formulas are those of the definitions.

In robotics

Pole placement for a second-order loop is the first thing every control engineer does with a new axis, and the specifications are written in the same terms.

  • Handling qualities. Aircraft requirements specify the frequency and damping of the short-period mode, for example short-period damping ratios of roughly 0.3 to 1.3 for the best level of flying qualities. These are exactly ωn\omega_n and ζ\zeta. Module 10 uses them.
  • Attitude loops. Multirotor and spacecraft attitude loops are designed for a damping ratio around 0.7 (a good compromise between speed and overshoot) and a bandwidth set by the actuator and the sensor, as in M1-T2: Nested Loops and Separation of Timescales. UAV M5-T5: Attitude control gives the cascade form of the same design.
  • Pointing requirements. A telescope that must settle within a given time and overshoot by no more than a given amount translates directly into a damping ratio and a natural frequency, and from them into gains.
  • Zeros in practice. A response that starts in the wrong direction is not exotic. Many aircraft show a right-half-plane zero in the transfer function from elevator to normal acceleration: the tail pushes down first (a loss of lift) before the nose rises. The pilot sees it as a momentary sink, and the autopilot designer as a limit on bandwidth.
  • Tools. python-control computes poles, zeros and step responses with poles, zeros and step_response, and gnckit has the same functions so that the worked examples run in the browser. They are checked against each other in the library's tests.

The linear model that this lesson assumes was found in M2-T4: Trim and Linearization. All the formulas here are exact for a pure second-order loop without zeros, like this one. Real loops have extra poles (a servo, a filter) and zeros (a derivative on the error instead of the rate), and the formulas are then approximations that the margins of the next lessons replace.

Common misconceptions

“Poles only tell you whether the system is stable.”

They tell you everything about the free motion: how fast each mode grows or dies (the real part), how fast it oscillates (the imaginary part), and how much (the angle). Stability is only the question of whether any real part is positive.

“The closed loop should follow the reference exactly, so its DC gain is 1.”

Only if the controller contains an integrator. Here the proportional-derivative loop settles at 1.031 times the reference, because part of the gain cancels the unstable pole. The offset is the cost of an unstable plant and no integral action.

“More damping is always better.”

Above ζ=1\zeta = 1 the response is sluggish with no benefit. A damping ratio of 0.5 to 0.8 gives a fast response with modest overshoot (16% to 1.5%), and 0.7 is the usual compromise. The right value depends on how much overshoot is tolerable.

“Zeros don't matter because stability is decided by the poles.”

They do not change stability, but they change the response: a zero at −2 raised the overshoot of the standard system from 4.6% to 11.2%, and a zero at +2 made it dip to −0.25 before rising. Right-half-plane zeros also limit the bandwidth that any controller can reach.

“The overshoot and settling formulas hold for any loop.”

They are exact for the pure second-order system. A loop with an extra pole, an extra zero or a delay only approximates them, and the further the extra dynamics are from the dominant poles the better the approximation. Always check by simulation.

Key takeaways

  1. A transfer function is the differential equation with d/dtd/dt replaced by ss. A chain of blocks is a product of transfer functions.
  2. Poles are the natural motions: the real part sets the decay rate, the imaginary part the oscillation, and the angle the damping ratio ζ\zeta.
  3. The overshoot depends only on ζ\zeta: e−πζ/1−ζ2e^{-\pi\zeta/\sqrt{1-\zeta^2}}, and the 2% settling time is about 4/(ζωn)4/(\zeta\omega_n).
  4. For Hopper's pitch loop, Kp=(ωn2+λ2)/bK_p = (\omega_n^2 + \lambda^2)/b and Kd=2ζωn/bK_d = 2\zeta\omega_n/b place the poles; the λ2\lambda^2 is the price of the unstable pole.
  5. A left-half-plane zero adds overshoot, and a right-half-plane zero makes the response start in the wrong direction.
  6. Pole placement is a design for a pure second-order loop. Real loops add dynamics, and the next lessons measure how much margin that leaves.

References and further reading

Each source is marked free or paid. Free to read does not mean free to reuse: the course resources page lists every source with its licence.

Knowledge check

Three questions. Write an answer, then reveal the explanation. Your answers stay in your browser.

Question 1

At burnout Hopper's pitch authority is b = 11.77 rad/s² per rad. What gains Kp and Kd give a natural frequency of 6 rad/s and a damping ratio of 0.8 for the pitch loop?

Explanation

From the matching of the characteristic polynomial, Kd = 2ζω_n / b = 2 × 0.8 × 6 / 11.77 = 0.816 and Kp = (ωn² + λ²) / b = (36 + 0.49) / 11.77 = 3.10. The same ωn and ζ at liftoff (b = 19.62) would need Kd = 0.489 and Kp = 1.86: the gains scale with 1/b, which is the reason for gain scheduling in module 5.

Question 2

A loop has closed-loop poles at −1 ± 3j. What are its natural frequency, damping ratio, overshoot and settling time, and is it a good design for a pitch loop?

Explanation

ωn = √(1² + 3²) = 3.16 rad/s, ζ = 1/3.16 = 0.316. The overshoot is exp(−π × 0.316 / √(1 − 0.1)) = 35%, and the settling time is about 4 / (ζ ωn) = 4 / 1 = 4 s. This is a lightly damped design: the angle of the poles from the negative real axis is 72°, too close to the imaginary axis. A damping ratio of 0.7 (45°) would cut the overshoot to 5%.

Question 3

A step response first moves in the wrong direction by 25% of its final value and then rises to 1.0. What does this say about the transfer function, and what does it mean for the bandwidth of a feedback loop around it?

Explanation

The transfer function has a zero in the right half-plane (a non-minimum-phase zero): a left-half-plane zero cannot produce an initial reversal. A feedback loop around such a plant cannot be made faster than about half the zero's frequency: pushing the bandwidth higher makes the dip deeper and eventually unstable. The zero is a property of the plant, so no compensator can remove it; module 3 returns to it as a limit of performance.

What’s next

Next lesson

M3-T2 — What Feedback Buys and What It Costs

Derive the sensitivity and complementary sensitivity functions, and explain the trade between disturbance rejection, noise transmission and control effort.

Nothing below is required to finish this lesson.

Other courses on this site treat neighbouring topics from their own angle:

This course leaves the following to the pages that already teach them: