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.

By 12 min read

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:

MeasurementDefinition for this lesson
Rise timeFirst 90% crossing time minus first 10% crossing time
OvershootPeak excess above the final value, as a percentage of that final value
Peak timeTime of the first, largest overshoot peak
2% settling timeEarliest time after which the response always stays within 2% of its final value
Steady tracking errorReference 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 ratioPolesUnit-step shape
0 < ζ < 1−ζωₙ ± jωₙ√(1 − ζ²)Decaying oscillation about g
ζ = 1Repeated 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.

Read the whole transient

When does the response settle?

Change the gain, natural frequency, and damping ratio. Compare the final response with the fixed unit reference.

1.00
2.00
0.50
2.00

The unit step starts at 0 s with zero output and zero output rate. All selected models are stable. Input and output use normalized, dimensionless units.

Output yReference 1Final value g2% band about g10% and 90% crossings
Step response with underdamped motionThe exact output starts at zero and approaches 1.000000. A dashed reference stays at one. The shaded band spans 0.980000 to 1.020000. Circles identify the first ten and ninety percent crossings when visible. The square marks replay time 2.00 seconds. The dotted vertical settling line appears only when its model-derived time lies within twelve seconds.0.000.751.500612Output yTime (s)
The dotted vertical line marks the final entry into the 2% band when visible. With g = 1, the final-value line overlaps the reference. Numerical metrics use the continuous curve and its remaining tail.
Current output y
1.153123
Final value g
1.000000
Steady tracking error 1 - g
0.000000
10% time (s)
0.244115
90% time (s)
1.062901
10-90% rise time (s)
0.818786
Overshoot (%)
16.303353
Peak time (s)
1.813799
2% settling time (s)
4.038174
4/(zeta wn) estimate (s)
4.000000
Damping regime
Underdamped

The model stays within its final-value band for all times after 4.038174 s.

The 4/(zeta wn) value is a rough estimate, not a guaranteed settling bound. The full exponential envelope guarantees containment by 4.055864 s.

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:

  1. 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.
  2. Select higher natural frequency. Raising ωₙ from 2 to 3 compresses every time metric by 2/3. Percent overshoot stays 16.303353%.
  3. Select critical damping. Overshoot becomes zero, rise time becomes 1.678954 s, and settling time becomes 2.916961 s.
  4. 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

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.