HomeArticlesControl Systems Theory

The Bode Plot: Reading Stability Off a Frequency Sweep

Why logarithms turn a cascade of poles and zeros into a sum of straight lines — and how gain margin and phase margin fall out of the same curve.

mysimulator teamUpdated June 2026≈ 9 min read▶ Open the simulation

Turning multiplication into addition

A transfer function G(s) is usually a product and a ratio of simple factors — poles, zeros, a constant gain. Multiplying frequency responses together is annoying; adding them is easy. Hendrik Bode's insight in the 1930s at Bell Labs was to plot everything on a logarithmic scale, because log(|G₁ · G₂|) = log|G₁| + log|G₂|. Take the magnitude in decibels, |G(jω)|dB = 20·log₁₀|G(jω)|, plot it against log ω, and the response of a complicated cascade of poles and zeros becomes the sum of simple straight-line contributions you can sketch by hand.

live demo · magnitude and phase of G(jω) sweeping frequency● LIVE

What each factor contributes

Every first-order factor in G(s) adds one predictable asymptotic slope and one predictable phase swing, centred on its own corner frequency ωc = 1/τ:

pole  1/(1 + s/ωc)  → magnitude flat, then falls at -20 dB/decade past ωc
                        phase 0° → -90°, centred (-45°) at ω = ωc
zero  (1 + s/ωc)     → magnitude flat, then rises at +20 dB/decade past ωc
                        phase 0° → +90°, centred (+45°) at ω = ωc
integrator  1/s      → magnitude falls at -20 dB/decade at ALL frequencies
                        phase pinned at -90° everywhere
gain  K              → shifts the whole magnitude curve up/down, no phase effect

A pair of complex-conjugate poles (a second-order underdamped factor) contributes -40 dB/decade past its natural frequency ωn, with a phase swing of 0° to -180°; if the damping ratio ζ is small, the magnitude curve peaks sharply just before it rolls off — the resonant bump you see on any lightly-damped mechanical or electrical system. Sketch each factor's straight-line asymptote, add them all up, and you get the Bode approximation — correct everywhere except within about a decade of each corner frequency, where the true curve rounds off by roughly 3 dB at a real pole/zero corner instead of forming a sharp angle.

Reading stability straight off the plot

Two frequencies matter more than the rest of the curve. The gain crossover frequency ωgc is where |G(jω)|dB = 0 dB — the loop gain is exactly 1. The phase crossover frequency ωpc is where the phase hits -180° — the point where negative feedback flips to positive. From those two points you read the two classic stability margins directly off the axes:

gain margin  GM  = 0 - |G(j·ω_pc)|_dB      (dB of extra gain before -180° hits 0 dB)
phase margin PM  = 180° + phase(G(j·ω_gc))  (degrees of extra phase lag before instability)

Both margins answer the same underlying question — how far is this loop from satisfying the Nyquist instability condition |G(jω)| = 1 at phase -180°? — from two different directions. A rule of thumb used across control engineering: phase margin above roughly 45° (and gain margin above about 6 dB) gives a step response with mild, well-damped overshoot; push PM down toward 0° and the closed loop rings harder and harder until it oscillates continuously right at the stability boundary.

Why the phase curve is the one that surprises people

Magnitude asymptotes are intuitive — more poles, faster roll-off. Phase is where non-minimum-phase behaviour hides: a right-half-plane zero or a pure time delay adds phase lag without changing the magnitude curve at all. A delay e-sT has |e-jωT| = 1 for every frequency — invisible on the magnitude plot — but its phase is -ωT radians, growing without bound as frequency rises. That is exactly why control systems with significant transport delay (a chemical process, a network-controlled robot) can look perfectly stable on the magnitude curve and still have almost no phase margin left once the delay's phase lag is added in.

Bode vs Nyquist vs root locus

All three tools read the same characteristic equation, 1 + G(s)H(s) = 0, from different angles. The Nyquist plot traces G(jω) in the complex plane and counts encirclements of -1, which is the only one of the three that stays rigorous for systems with open-loop right-half-plane poles. The root locus tracks the closed-loop pole locations directly as a gain K varies, which the Bode plot cannot show at all — Bode only ever describes the open-loop frequency response. Bode's advantage is that it is the easiest of the three to sketch from a transfer function by hand, the easiest to measure experimentally (sweep a sine wave into the real plant and record amplitude and phase, no model required), and the one that maps most directly onto the everyday design language of gain margin, phase margin and bandwidth.

Frequently asked questions

What is a "good" phase margin?

Roughly 45° to 60° is the conventional sweet spot: enough damping that step responses settle with modest overshoot, without sacrificing so much loop gain that disturbance rejection and bandwidth suffer. Below about 30° the closed loop starts to ring visibly; above 90° the system is usually being controlled too conservatively.

Why decibels and a logarithmic frequency axis?

Because a transfer function is a product of simple factors, and logarithms turn that product into a sum. On a log-magnitude, log-frequency plot, every pole and zero contributes an independent straight-line asymptote that you can add up by eye, which is what makes Bode plots sketchable by hand and readable at a glance across many decades of frequency.

What's the difference between a Bode plot and a Nyquist plot?

A Bode plot shows magnitude and phase as two separate curves against frequency; a Nyquist plot shows the same complex number G(jω) traced as one curve in the complex plane, parameterised by frequency. Bode is easier to sketch and measure; Nyquist is the mathematically complete stability test, because it correctly handles the rare case of an unstable open-loop plant, where reading gain and phase margin off a Bode plot alone can be misleading.

Try it live

Everything above runs in your browser — open Bode Plot and change the parameters while it is running. Nothing is installed, nothing is uploaded, the whole model lives in one tab.

▶ Open Bode Plot simulation

What did you find?

Add reproduction steps (optional)