explainer
Step response characteristics: measure rise, overshoot, and settling
Read step response characteristics from an exact second-order model. Compare rise time, overshoot, settling time, and steady error without mistaking the end of a plot for the final value.
What you will learn
- Measure 10–90% rise time and overshoot relative to the final response.
- Distinguish first band entry from settling for all later times.
- Separate damping, natural frequency, and gain effects.
Before you start
A robot can reach its target quickly, pass it, and spend longer settling. Those events answer different questions. This lesson gives each event a precise measurement and lets you check it on the same response.
Measure step response characteristics with clear definitions
A unit step changes the reference from 0 to 1 at time zero. We start with zero output and zero output rate. The response shows how the system moves after that sudden request.
Use these conventions throughout:
| Measurement | Definition for this lesson |
|---|---|
| Rise time | First 90% crossing time minus first 10% crossing time |
| Overshoot | Peak excess above the final value, as a percentage of that final value |
| Peak time | Time of the first, largest overshoot peak |
| 2% settling time | Earliest time after which the response always stays within 2% of its final value |
| Steady tracking error | Reference minus the limiting output |
The percentages use the change from the initial output to the final output. Our initial output is zero and our final value is positive. MathWorks documents these rise and settling conventions; always state the thresholds when comparing measurements.
Set the model and its final value
Use a linear second-order transfer function with no finite zeros:
T(s) = gωₙ² / (s² + 2ζωₙs + ωₙ²)
y″ + 2ζωₙy′ + ωₙ²y = gωₙ² for t ≥ 0
y(0) = 0, y′(0) = 0
Here g is the final-value gain, ωₙ is natural frequency in rad/s, and ζ is the dimensionless damping ratio. Input and output use normalized, dimensionless units. A physical model needs the matching input and output scales.
The lab keeps g, ωₙ, and ζ positive. Every selected model is stable, and its unit-step output approaches g. The steady tracking error is therefore 1 − g.
For g = 0.5, the response approaches 0.5 even though the reference stays at 1. Its 2% settling band is [0.49, 0.51]. Reaching that band says something about the transient; it does not remove the remaining tracking error.
Read the three damping cases
The poles follow from the denominator. Their location gives three cases in this model:
| Damping ratio | Poles | Unit-step shape |
|---|---|---|
| 0 < ζ < 1 | −ζωₙ ± jωₙ√(1 − ζ²) | Decaying oscillation about g |
| ζ = 1 | Repeated pole −ωₙ | Monotone rise toward g |
| ζ > 1 | −ωₙ(ζ ± √(ζ² − 1)) | Monotone rise with two decay rates |
MIT's second-order systems lecture connects these cases to the response. The oscillation frequency ωd = ωₙ√(1 − ζ²) differs from ωₙ.
For the underdamped case, define x = ωₙt and w = √(1 − ζ²). The exact output is:
y/g = 1 − exp(−ζx)[cos(wx) + (ζ/w)sin(wx)]
At critical damping, y/g = 1 − (1 + x)exp(−x). For overdamping, define a = ζ − √(ζ² − 1) and b = ζ + √(ζ² − 1). Then y/g = 1 − [b exp(−ax) − a exp(−bx)]/(b − a).
These formulas assume the stated zero initial conditions and constant parameters. Zeros, delays, saturation, and additional modes can change the shape. A single damping ratio does not describe every robot response.
Find the first 10% and 90% crossings
Find the earliest t₁₀ with y(t₁₀) = 0.1g. Then find the earliest t₉₀ with y(t₉₀) = 0.9g. Their difference is the 10–90% rise time.
With g = 1, ωₙ = 2 rad/s, and ζ = 0.5, continuous root solving gives t₁₀ = 0.244115 s and t₉₀ = 1.062901 s. The rise time is 0.818786 s. It measures an interval, so it differs from the time of the 90% crossing.
For this model, the first rise is monotone until the underdamped peak. Critical and overdamped responses stay monotone. These facts let us bracket each crossing and refine it by bisection without relying on the plotted sample spacing.
Some references use 0–100% rise time for underdamped systems. That is a different convention. This lesson keeps 10–90% for every damping case.
Measure overshoot and peak time
For 0 < ζ < 1, differentiating the response places its first peak at ωdt = π. Successive extrema shrink, so that first peak is the largest:
tₚ = π / [ωₙ√(1 − ζ²)]
Mₚ = 100 exp[−ζπ/√(1 − ζ²)]
yₚ = g(1 + Mₚ/100)
The default gives tₚ = π/√3 = 1.813799 s. Its overshoot is 16.303353%, so its peak output is 1.163034. MIT's response-characteristics notes derive the same overshoot relation.
Critical and overdamped cases have zero overshoot here. They approach g from below for all finite positive times, so they have no finite peak time. The lab reports that explicitly.
Changing positive g scales the peak and final value together. It leaves percent overshoot unchanged. Changing ωₙ changes the timing while ζ holds the percent overshoot fixed.
Find the last entry into the settling band
The 2% condition is |y(t) − g| ≤ 0.02g. Settling time requires that condition for every later time. An oscillating response can enter the band, leave it, and return.
The default first enters near 1.176745 s. It later reaches the 16.3% overshoot peak, then dips below the lower band edge. Its final inward crossing occurs at 4.038174 s.
The lab verifies that final crossing using the exact curve. In dimensionless time, underdamped extrema occur at xₖ = kπ/w, and their absolute normalized error is exp(−ζkπ/w). Find the last extremum whose error exceeds 0.02, then solve for the next inward band crossing.
Every later extremum fits inside the band. The curve moves monotonically between those extrema, which establishes the condition for the whole remaining tail. For critical and overdamped responses, the single 98% crossing supplies the settling time.
The measurements use continuous formulas and numerical root refinement. Plot samples only draw the curve. Six displayed decimal places describe this ideal model's calculation, not the accuracy of physical measurements.
Separate settling bounds from estimates
For an underdamped response, its error envelope gives a sufficient settling bound:
|1 − y/g| ≤ exp(−ζωₙt)/√(1 − ζ²)
t_envelope = −ln[0.02√(1 − ζ²)] / (ζωₙ)
For the default, this bound is 4.055864 s, slightly later than the actual settling time. The envelope ignores oscillation phase, so it can be conservative.
The common estimate 4/(ζωₙ) gives 4.000000 s here. It approximates the envelope expression most naturally at low damping, where √(1 − ζ²) is near 1. MIT distinguishes that approximation from the full envelope calculation.
The estimate can fall before the true settling time, as this example shows. Treat it as a rough comparison value. The lab uses the separate critical or overdamped solution when ζ ≥ 1.
Change gain, speed, and damping
The lab draws the exact response over 12 seconds. Replay selects a point on that curve without running a timer. The shaded band follows g; the reference line stays at 1.
At the default two-second mark, y = 1.153123. The curve has already passed its peak and is falling. It still lies above the final value's 2% band.
Try these comparisons:
- Select half-size final response. The curve scales by 0.5, but rise time and percent overshoot stay unchanged. Steady tracking error becomes 0.5.
- Select higher natural frequency. Raising ωₙ from 2 to 3 compresses every time metric by 2/3. Percent overshoot stays 16.303353%.
- Select critical damping. Overshoot becomes zero, rise time becomes 1.678954 s, and settling time becomes 2.916961 s.
- Select overdamped response. At the same ωₙ = 2, settling takes 7.438962 s. More damping does not guarantee a shorter settling time.
Keep the visible window separate from the limit
Select settling beyond the plot: ωₙ = 0.5 and ζ = 2. At 12 s, the output is only 0.784154. The model still approaches 1.
Its 90% crossing occurs at 17.742839 s, and its settling time is 29.755847 s. The lab reports these model-derived times and marks them as outside the visible window. The last plotted value cannot substitute for the known final value.
MathWorks warns that sampled response data needs an explicit final value when the last sample is unsuitable. Real measurements also involve noise and a finite observation period. A measured trace can establish what happened during that period; a justified model supports claims about the future.
Check stability criteria before using settling metrics. All examples here are stable by construction. Their finite plots illustrate response speed; stability here follows from the model's poles.
PID tuning uses response requirements to compare controller gains. Its experiment checks sampled overshoot, end error, and control effort while reporting model stability separately.
Reproduce the measurements in Python
This standard-library example evaluates the formulas and finds crossings by bisection. It checks future underdamped extrema before choosing the settling crossing. The lab uses equivalent forms that retain precision near critical damping.
from math import atan2, cos, exp, pi, sin, sqrt
def response(zeta, x):
if zeta < 1:
w = sqrt(1 - zeta*zeta)
return 1 - exp(-zeta*x) * (cos(w*x) + zeta*sin(w*x)/w)
if zeta == 1:
return 1 - (1 + x)*exp(-x)
q = sqrt(zeta*zeta - 1)
a, b = zeta - q, zeta + q
return 1 - (b*exp(-a*x) - a*exp(-b*x))/(b - a)
def crossing(function, low, high):
sign = function(low)
for _ in range(80):
middle = (low + high)/2
if function(middle)*sign > 0:
low = middle
else:
high = middle
return (low + high)/2
def first(zeta, fraction):
high = pi/sqrt(1 - zeta*zeta) if zeta < 1 else 1
while response(zeta, high) < fraction:
high *= 2
return crossing(lambda x: response(zeta, x) - fraction, 0, high)
def metrics(gain, wn, zeta):
rise = (first(zeta, 0.9) - first(zeta, 0.1))/wn
overshoot = 0.0
if zeta < 1:
w = sqrt(1 - zeta*zeta)
overshoot = 100*exp(-zeta*pi/w)
k = 0
while exp(-zeta*(k + 1)*pi/w) > 0.02:
k += 1
low = k*pi/w
high = ((k + 1)*pi - atan2(w, zeta))/w
settling = crossing(
lambda x: abs(1 - response(zeta, x)) - 0.02,
low, high
)/wn
else:
settling = first(zeta, 0.98)/wn
return gain*response(zeta, 2*wn), rise, overshoot, settling
cases = [
("default", 1, 2, 0.5),
("critical", 1, 2, 1),
("overdamped", 1, 2, 2),
("slow tail", 1, 0.5, 2),
("half gain", 0.5, 2, 0.5),
("faster", 1, 3, 0.5),
]
for label, gain, wn, zeta in cases:
y, rise, overshoot, settling = metrics(gain, wn, zeta)
print(f"{label}: y(2)={y:.6f}, rise={rise:.6f}, "
f"overshoot={overshoot:.6f}%, settling={settling:.6f}")
Expected output:
default: y(2)=1.153123, rise=0.818786, overshoot=16.303353%, settling=4.038174
critical: y(2)=0.908422, rise=1.678954, overshoot=0.000000%, settling=2.916961
overdamped: y(2)=0.631123, rise=4.114618, overshoot=0.000000%, settling=7.438962
slow tail: y(2)=0.177737, rise=16.458470, overshoot=0.000000%, settling=29.755847
half gain: y(2)=0.576561, rise=0.818786, overshoot=16.303353%, settling=4.038174
faster: y(2)=1.002289, rise=0.545858, overshoot=16.303353%, settling=2.692116
Try it yourself
Exercise 1: scale the output without changing its shape
Keep ωₙ = 2 rad/s and ζ = 0.5, but set g = 1.5. Find the final value, 2% band, steady tracking error, peak output, and percent overshoot. Do the time metrics change?
Check your answer: The final value is 1.5, and its band is [1.47, 1.53]. The steady tracking error is −0.5. The peak is 1.5 × 1.163033535 = 1.744550, while percent overshoot stays 16.303353%.
The time metrics stay unchanged because every percentage threshold scales with g. The unit reference remains 1, so settling about 1.5 leaves a negative tracking error.
Exercise 2: compress time and check the settling estimate
Keep g = 1 and ζ = 0.5, then raise ωₙ from 2 to 3 rad/s. Use time scaling to find the new peak time and settling time. Compare the settling time with 4/(ζωₙ).
Check your answer: Every time scales by 2/3. Peak time becomes 1.209200 s, and settling time becomes 2.692116 s. The rough estimate gives 2.666667 s.
The estimate falls about 0.025449 s before the true final band crossing. Percent overshoot remains 16.303353%; changing frequency alone does not change it.
Sources and further study
- MathWorks, stepinfo defines rise and settling thresholds and explains final-value handling for sampled data.
- MIT 2.004, Fall 2007, Lecture 7 develops the second-order model, damping cases, and underdamped step response.
- MIT 2.004, Spring 2008, Lecture 21 derives overshoot and the settling envelope, including the common approximation.
Continue with feedback control to see how a controller uses measured error. When comparing two designs, write down the permitted overshoot, settling band, and tracking error before choosing which response serves the task.