Control bandwidth: tracking speed and physical limits

Calculate closed-loop bandwidth relative to DC gain, then compare sinusoidal tracking with the torque it requires. Separate bandwidth from loop crossover and account for resonance, delay, sampling, and noise.

By 12 min read

A joint can follow a slowly changing speed command and fall behind when the same command oscillates faster. Control bandwidth gives one measure of that loss of response. The motor's available torque determines whether the predicted motion can happen at all.

You will calculate both quantities for a simple speed loop, then identify the extra physics that limits bandwidth on a robot.

Define bandwidth relative to DC gain

Let T(s) map a reference to its measured output in a stable closed loop. For the low-pass response in this lesson, define the half-power bandwidth Ωbw as the frequency where the response magnitude drops to 1/√2 of its value at zero frequency:

|T(jΩbw)| = |T(0)| / √2

The magnitude ratio is 0.707107, or −3.010300 dB. Engineers commonly call this the −3 dB bandwidth. State the convention when comparing numbers: MathWorks' bandwidth function uses a literal −3 dB drop by default and allows a different threshold. That default gives a slightly different cutoff from exact half power.

“Half power” refers to the square of the normalized amplitude ratio. It does not assert that the motor uses half its electrical power. Also, the reference level is T(0). A loop with DC gain 0.75 has magnitude 0.75/√2 = 0.530330 at its half-power bandwidth.

Use rad/s for angular frequency Ω and Hz for ordinary frequency f, with Ω = 2πf. The transfer-functions lesson explains evaluation at the complex frequency s = jΩ.

Start with a proportional speed loop

Use a horizontal joint with inertia J = 0.5 kg m² and viscous drag B = 1 N m s/rad. The measured angular speed is ω, desired speed is r, and motor torque is τ:

Jω̇ + Bω = τ
τ = K(r − ω)
Jω̇ + (B + K)ω = Kr

K has units N m s/rad. Assume exact measurement, continuous computation, and immediate, unlimited torque. Gravity, dry friction, flexibility, delay, and actuator dynamics are absent.

The closed-loop transfer function follows directly:

T(s) = K / (Js + B + K)
T(0) = K / (B + K)
Ωbw = (B + K) / J

For every available K > 0, the pole −(B + K)/J lies in the left half-plane. Raising K increases bandwidth and DC tracking gain in this particular model. At K = 3, T(0) = 0.75, Ωbw = 8 rad/s, and f bw = 1.273240 Hz.

The corresponding time constant is 1/Ωbw = 0.125 s. A step's 10–90% rise time, measured relative to its final value, is ln(9)/Ωbw = 0.274653 s. This relationship belongs to a first-order response. The step-response lesson covers why extra poles and oscillation change that interpretation.

Calculate sinusoidal attenuation and phase lag

Use r(t) = A sin(Ωt), where A is the reference speed amplitude in rad/s. After the startup transient dies away, the linear loop produces another sinusoid at the same frequency:

ω(t) = A|T(jΩ)| sin(Ωt + φ)
|T(jΩ)| = K / √[(B + K)² + (JΩ)²]
φ = −atan[JΩ / (B + K)]

At K = 3 and Ω = 8, the magnitude is 0.530330 and phase is −45°. A reference amplitude A = 1 rad/s therefore produces a predicted speed amplitude of 0.530330 rad/s. Relative to DC, the amplitude has fallen by the half-power factor. Relative to the reference itself, the amplitude is much smaller because the proportional loop already has a DC tracking error.

The lab plots the established periodic response. At the left edge, ω can already be negative while r = 0. Starting the motor from rest would add a decaying transient and change the initial torque demand.

Separate bandwidth from loop crossover

The loop transfer function L(s) = KG(s) describes one trip around the open loop, with plant G(s) = 1/(Js + B). Its gain crossover Ωgc satisfies |L(jΩgc)| = 1:

Ωgc = √(K² − B²) / J, for K > B

K = B gives unity gain only at DC. K < B gives no unity-gain crossing. The closed-loop bandwidth still exists in both cases because the closed-loop response decreases relative to its own positive DC gain.

At K = 3, Ωgc = √8/0.5 = 5.656854 rad/s, while Ωbw = 8 rad/s. They answer different questions. MathWorks' frequency-domain characteristics documentation defines crossover and bandwidth separately. Use Bode plots and loop shaping to connect loop crossover to phase and stability margins.

Compare motion and effort in the lab

Frequency, tracking, and effort

How much motion can the loop follow?

Change the reference frequency and feedback gain. Compare the predicted motion with the torque that exact tracking would require.

3.00
8.00
1.00
3.00

J ω′ + B ω = τ, with J = 0.5 kg m², B = 1 N m s/rad, and τ = K(r - ω). The reference is r = A sin(Ωt). Measurement is exact, and torque responds immediately. All displayed curves use the unlimited continuous-time model.

The half-power cutoff is |T(jΩ)| / T(0) = 1/√2, or -3.010300 dB relative to DC. It is commonly called the -3 dB bandwidth. This loop has one stable pole for every available gain.

Speed referencePredicted speed
Sinusoidal reference and predicted speed in steady stateTwo steady-state periods at 8.000000 radians per second. Reference amplitude is 1.000000 radians per second. Predicted response amplitude is 0.530330 radians per second. This assumes periodic operation established before the plotted window.-1.501.50.000.791.57Speed (rad/s)Time (s)
The loop is already in periodic steady state. Its initial speed need not be zero. Curves join exact samples at 160 points per period; scales adjust, and every setting displays two periods.
Predicted motor torqueRequired for exact trackingTorque limits
Predicted motor torque and exact-tracking torqueThe unlimited model's motor torque amplitude is 2.186607 newton meters. Exact reference tracking would require 4.123106 newton meters. Dashed horizontal lines mark the stated symmetric limit of 3.000000 newton meters. The model does not clip commands.-5050.000.791.57Torque (N m)Time (s)
Blue sustains the model's attenuated motion; orange would sustain the reference exactly. These torques correspond to different motions; each acts alone in its own calculation. Crossing a dashed limit invalidates the corresponding unlimited prediction for that actuator.
Half-power bandwidth (rad/s)
8.000000
Bandwidth (Hz)
1.273240
DC tracking gain
0.750000
Probe / bandwidth
1.000000
Transfer gain relative to DC
0.707107
Transfer phase (degrees)
-45.000000
Predicted speed amplitude (rad/s)
0.530330
Predicted torque amplitude (N m)
2.186607
Exact-tracking torque amplitude (N m)
4.123106
Loop gain crossover (rad/s)
5.656854
Linear-response torque check
Within torque limit
Exact-tracking torque check
Exceeds torque limit

The predicted steady sinusoid stays within the stated torque bound. Exact reference tracking would exceed the torque bound.

These checks cover only steady-state torque magnitude. They do not establish startup, speed, power, thermal, or torque-rate feasibility. Resonance, delay, sampling, and measurement noise are outside this model. Changing the torque limit changes the checks and dashed lines, not the curves. Readouts round to six decimal places.

Start at the cutoff preset. The response reaches about half the requested amplitude and lags by 45°. Choose Slow reference to reduce the phase lag, then Higher feedback gain to improve tracking at the original frequency.

Watch the motor torque: the higher gain predicts 3.349104 N m amplitude, above the 3 N m bound. The lab keeps the unlimited linear response visible and flags the violation. Changing the limit changes the comparison lines and checks; it does not run a saturated controller.

Choose Zero reference amplitude to make both traces zero. The transfer function retains its gain and phase properties, even though a zero input carries no observable phase. Each plot covers two periods, so its duration changes with frequency.

Check torque and speed before demanding faster motion

For exact tracking, substitute the reference into the physical plant equation. The required torque combines a velocity term and an acceleration term:

τexact(t) = JAΩ cos(Ωt) + BA sin(Ωt)
τexact,amp = A√[B² + (JΩ)²]

At A = 1 and Ω = 8, that is √17 = 4.123106 N m. The default proportional loop follows a smaller, delayed motion. Sustaining that predicted motion requires only 2.186607 N m:

τpredicted,amp = A|T(jΩ)|√[B² + (JΩ)²]

A 3 N m actuator can satisfy this steady sinusoid's predicted torque demand while failing the exact-tracking requirement. Passing the exact-reference torque check also does not make a proportional controller track perfectly. The check concerns the physical effort, while the controller determines the motion.

Check speed and acceleration too: exact tracking requires speed amplitude A and acceleration amplitude AΩ. Motor voltage, power, temperature, and torque-rate limits can impose additional constraints; available torque can depend on speed. The lab's constant symmetric torque bound omits these effects. Actuator dynamics introduces command-to-torque lag, while feedforward control calculates effort from a planned trajectory.

Account for structural resonance and model error

A rigid inertia-and-drag model contains no elastic mode. A flexible shaft, belt, or arm can introduce resonant peaks and extra phase lag near frequencies that a higher-gain loop tries to control. The one-pole stability result cannot establish the stability of that larger system.

Measure or model those modes before increasing bandwidth. In MathWorks' digital disk-drive servo example, the plant includes four flexible resonances and delay; the design checks variation in modal frequency and damping. The example shows why a servo's dynamics matter beyond its rigid-body motion.

There is no universal safe fraction of a resonant frequency that applies to every controller and mechanism. Resonance damping, sensor and actuator locations, filters, and model uncertainty change the loop. Work through joint flexibility and model uncertainty to add those effects explicitly.

Include delay and sampling in the control model

A pure delay Td contributes a factor e^(−sTd). At frequency Ω, its magnitude is one and its phase is −ΩTd radians. At 8 rad/s, a 25 ms delay adds 11.459156° of lag. That phase changes the feedback loop even though the delay does not attenuate a sinusoid on its own.

A digital controller also measures at discrete times and holds commands between updates. The University of Michigan's digital-control tutorial constructs the zero-order-hold equivalent to represent this timing. Computation and communication can add further delay.

The Nyquist sampling criterion concerns reconstruction of a band-limited signal. It does not, by itself, establish acceptable closed-loop damping or stability. A fixed sample-rate-to-bandwidth ratio cannot replace analysis of the actual hold, delay, controller, and plant. The lab includes none of these timing effects; its continuous-time cutoff remains a prediction for the stated ideal model. Controller discretization calculates the poles after introducing sampled control.

Follow measurement noise into motor torque

If a speed sensor reports ω + n, the proportional controller commands K(r − ω − n). With the reference set to zero, solve the same loop equations to find the noise paths:

ω/n = −T(s)
τ/n = −K / [1 + L(s)]

At very high frequency, G(s) approaches zero, so the torque-to-noise gain approaches −K. The inertia filters the motion, but the commanded torque can still respond strongly to sensor noise. Raising K therefore changes both tracking and effort sensitivity.

A practical design needs a measured noise spectrum and an actuator model. MathWorks' active-suspension design includes sensor-noise weights and penalizes high-frequency actuator commands when choosing control bandwidth. The lab's exact sensor excludes this noise path; use the equation to identify a missing design requirement, not to infer a numerical noise tolerance.

Reproduce the bandwidth calculation in Python

This standard-library program calculates the exact steady-state amplitudes. It checks torque magnitude only, using the same unlimited first-order model as the plots.

from math import atan2, hypot, log10, pi, sqrt

J, B = 0.5, 1.0

def report(name, gain, frequency, amplitude=1.0, limit=3.0):
    dc = gain / (B + gain)
    bandwidth = (B + gain) / J
    magnitude = gain / hypot(B + gain, J * frequency)
    phase = -atan2(J * frequency, B + gain) * 180 / pi
    exact_torque = amplitude * hypot(B, J * frequency)
    predicted_torque = magnitude * exact_torque
    print(f"{name}: bw={bandwidth:.6f}, dc={dc:.6f}, "
          f"speed={amplitude * magnitude:.6f}, phase={phase:.6f}")
    print(f"  torque={predicted_torque:.6f}, exact={exact_torque:.6f}, "
          f"within={predicted_torque <= limit}/{exact_torque <= limit}")

report("cutoff", 3.0, 8.0)
report("higher gain", 8.0, 8.0)
print(f"half-power dB={20 * log10(1 / sqrt(2)):.6f}")
print(f"default loop crossover={sqrt(3.0**2 - B**2) / J:.6f}")

Output:

cutoff: bw=8.000000, dc=0.750000, speed=0.530330, phase=-45.000000
  torque=2.186607, exact=4.123106, within=True/False
higher gain: bw=18.000000, dc=0.888889, speed=0.812277, phase=-23.962489
  torque=3.349104, exact=4.123106, within=False/False
half-power dB=-3.010300
default loop crossover=5.656854

Try it yourself

Exercise 1: compare bandwidth and crossover

Keep J = 0.5 and B = 1, and choose K = 1. Calculate the DC gain, half-power bandwidth in rad/s, response amplitude and phase at that bandwidth for A = 1 rad/s, and the loop's gain crossover.

Check both frequency definitions and the response

DC gain is 1/(1 + 1) = 0.5. Half-power bandwidth is (1 + 1)/0.5 = 4 rad/s. The response amplitude there is 0.5/√2 = 0.353553 rad/s, with phase −45°. The loop magnitude equals one only at DC, so its crossover is 0 rad/s. A finite closed-loop bandwidth can coexist with no positive-frequency loop crossover.

Exercise 2: set a torque-limited reference amplitude

At K = 3 and Ω = 8 rad/s, a motor has a symmetric 3 N m torque bound. What is the largest reference speed amplitude that satisfies the exact-tracking torque magnitude requirement? What speed amplitude does this proportional loop actually predict at that reference amplitude?

Check the capacity calculation and the remaining attenuation

The exact-tracking requirement is A√17 ≤ 3, so A ≤ 3/√17 = 0.727607 rad/s. At that amplitude the proportional loop predicts speed amplitude (3/√32)(3/√17) = 0.385872 rad/s. Its own torque amplitude is 3(3/√32) = 1.590990 N m. Fitting the exact-reference torque inside the bound does not remove this controller's tracking error. This calculation omits startup and every limit except torque magnitude.

Sources and further study

Continue with controller discretization to check what happens when feedback updates at discrete times.