explainer
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.
What you will learn
- Define a half-power closed-loop bandwidth relative to DC gain.
- Distinguish tracking bandwidth from the loop gain crossover frequency.
- Calculate sinusoidal response amplitude, phase lag, and torque demand.
- Explain the physical effects a one-pole bandwidth calculation omits.
Before you start
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
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
- MathWorks, bandwidth: a configurable magnitude drop relative to DC, with a literal −3 dB default. This lesson uses the exact half-power threshold.
- MathWorks, Frequency-Domain Characteristics of a SISO Model: separate definitions of bandwidth and crossover frequencies.
- MathWorks, Digital Servo Control of a Hard-Disk Drive: flexible modes, delay, digital implementation, and variation in resonances.
- University of Michigan CTMS, Digital Controller Design: sampled signals and a zero-order-hold model. Its sampling guideline does not establish a universal stability guarantee.
- MathWorks, Robust Control of Active Suspension: actuator bandwidth, sensor noise, and frequency-dependent performance requirements.
Continue with controller discretization to check what happens when feedback updates at discrete times.