Control engineering · Zacher/Reuter, Regelungstechnik für Ingenieure, 17. Aufl. 2024, Kap. 5 und Abschn. 6.3

Bode plot calculator: magnitude, phase, phase margin and gain margin

Draw the open-loop Bode plot from plant and controller, read crossover frequency, phase margin φ_R and gain margin A_R and judge stability by the simplified Nyquist criterion – including dead time.

G(s)Zacher/Reuter 2024
01

Plant and controller

G₀(s) = 10 · [16·s + 0.8] / [2000·s^2 + 20·s] · e^(−10 s · s)

All views update immediately. Times in the selected unit, angular frequencies in rad/s (= 1/s).

02

Key figures

K_PR = 10

Stability limit at K_PR,krit ≈ 14.8886 · range 0.044744.6658

Closed loop
stable
ω_dGain crossover: |G₀(jω_d)| = 1 (0 dB).
0.0908 rad/s
φ_RdPhase margin φ_Rd = φ₀(ω_d) + 180° (Zacher/Reuter eq. 6.65). Recommended 40…70°.
15.4°
ω_πPhase crossover: φ₀(ω_π) = −180°; T_crit = 2π/ω_π.
0.1275 rad/s · T_krit = 49.263 s
A_RGain margin A_R = 1/|G₀(jω_π)| as factor and in dB; K_crit = K·A_R.
1.489 = 3.5 dB
Bode plot of the open loop G₀(jω)
10⁻³10⁻²10⁻¹1-50 dB0 dB50 dB100 dB-450°-360°-270°-180°-90°0°Magnitude |G₀(jω)| in dBPhase φ₀(ω) in °ω [rad/s]−180°ω_dφ_R = 15.4°ω_πA_R = 3.5 dB
Move the pointer over the plot to read ω, magnitude and phase.

Top: magnitude in dB, bottom: phase. Marked: gain crossover ω_d with phase margin and phase crossover ω_π with gain margin. The magnitude shifts in parallel with K, the phase stays.

Linked views – same loop, same gain
Method

What is calculated?

With s = jω the transfer function becomes the frequency response G₀(jω). The Bode plot shows its magnitude in decibels (20·log|G₀|) and its phase angle φ₀ against logarithmically scaled angular frequency (Zacher/Reuter sec. 2.4.4 and ch. 5). Because magnitudes of series elements multiply, their dB values and phases add – which is what makes the plot so practical. The calculator computes the phase factor by factor from poles, zeros, integrators (−90° per pole at the origin) and dead time (−ω·Tt), so no 360° jumps occur. At the crossover frequency ω_d, |G₀| = 1 (0 dB); the distance of the phase from −180° is the phase margin φ_Rd = φ₀(ω_d) + 180° (eq. 6.65). At the frequency ω_π with φ₀ = −180°, the gain margin A_R = 1/|G₀(jω_π)| is the factor by which the gain may still increase. By the simplified Nyquist criterion (eq. 6.64) the closed loop is stable if φ₀(ω_d) > −180° – provided G₀ has no right-half-plane poles and at most a double pole at the origin.

Equations

|G₀(jω)|_dB = 20·lg|G₀(jω)|

φ₀(ω) = Σ arg(jω − s_N) − Σ arg(jω − s_P) − ω·Tt

ω_d: |G₀(jω_d)| = 1; φ_Rd = φ₀(ω_d) + 180° (Gl. 6.65)

ω_π: φ₀(ω_π) = −180°; A_R = 1/|G₀(jω_π)|, A_R,dB = −|G₀(jω_π)|_dB

K_krit = K · A_R

Limits

Assumptions and typical mistakes

Linear model, unity feedback, ideal controllers without actuator limits. The simplified Nyquist criterion assumes n_r = 0 and n_i ≤ 2; with several crossover frequencies the calculator evaluates the highest and flags the ambiguity. With dead time the verdict relies on the crossing rule only.

Confusing frequency f in Hz with angular frequency ω = 2πf. Reading the phase margin at an arbitrary frequency instead of exactly at ω_d. A large gain margin alone does not guarantee good damping if the phase margin is small.

Which method when?

Without dead time you can check stability equivalently via Hurwitz (coefficients), closed-loop poles or Bode/Nyquist. With dead time Hurwitz fails – then Bode and Nyquist are the right tools (Zacher/Reuter sec. 6.2). The Bode plot shows the influence of individual elements most clearly, the Nyquist plot the encirclement of the critical point.

Marked points

What the marked positions in the plot mean – and why they matter

Background for all points: a signal travels through controller and plant and is fed back with inverted sign at the comparator (negative feedback). If it returns after one trip with unchanged magnitude (|G₀| = 1) and a phase rotated by −180°, the negative feedback cancels that rotation – the signal sustains itself. All marked positions measure the distance from exactly this situation.

0 dB line (|G₀| = 1)
At 0 dB the open loop neither amplifies nor attenuates a sine signal: whatever enters comes back with the same amplitude after one trip through controller and plant. Above the line (|G₀| > 1) a signal grows with every trip, below it shrinks. That is why stability is decided only where the magnitude curve lies above the 0 dB line.
Gain crossover ω_d
The frequency at which the magnitude curve crosses the 0 dB line. It separates the range where the loop still amplifies signals from the range where it attenuates them – and is also a measure of control speed (rise time ≈ 1.5…2/ω_d). The phase must be checked here.
−180° line
A phase shift of −180° exactly inverts a sine signal. The loop, however, uses negative feedback, so the fed-back signal is subtracted with inverted sign anyway – together this restores the original sign: the signal reinforces itself. When −180° coincides with |G₀| ≥ 1 the loop builds up (self-excitation, sustained oscillation, instability).
Phase margin φ_R (bar at ω_d)
How far the phase at ω_d is still from −180° – i.e. how much additional delay (dead time, another sensor filter, computation time) the loop tolerates before it oscillates. A small margin means strong overshoot and slow decay, a negative margin instability.
Phase crossover ω_π and gain margin A_R
The frequency at which the phase reaches −180°. If the loop becomes unstable it oscillates at exactly this frequency (ω_crit, period 2π/ω_π). The distance of the magnitude curve from the 0 dB line here is the gain margin: the factor by which the gain may still be raised before the stability limit is reached – K_crit = K·A_R.
Bends at the corner frequencies 1/T
Each time constant (pole) bends the magnitude down by 20 dB/decade at ω = 1/T and pulls the phase down by 90°; a zero (e.g. Tn of the PI controller, Tv of the D action) does the opposite. This shows which element consumes the margin and where a D term could recover it.
Understanding the diagrams

What the five diagrams show and what they are used for

All views arise from the same transfer function G₀(s) and the same gain. They show the same system from different angles – time domain, frequency domain and s-plane – and lead to the same stability statement. The highlighted diagram is the main plot of this page; the others are linked below.

Pole–zero map (s-plane)

What it shows: The complex s-plane with real part σ (horizontal, in 1/s) and imaginary part jω (vertical). Crosses are the poles of the open loop G₀(s), circles its zeros, filled dots the closed-loop poles at the current gain. The left half plane is shaded green.

Used for: Quick judgement of how a system responds to an excitation: each pole stands for a natural-motion term e^(σt)·cos(ωt). Poles left of the axis decay (stable), right of it grow (unstable), on the axis oscillate permanently. Distance from the axis sets the decay time, the angle to the negative real axis the damping.

How to read it: The further left a pole, the faster its share decays (T = 1/|σ|). The larger the imaginary part, the higher the oscillation frequency. A pole pair on a straight line through the origin has constant damping D = cos of the angle to the negative real axis – 45° corresponds to D ≈ 0.7. The closed loop is stable when all filled dots lie on the left.

Open the calculator with this main plot

Bode plotthis page

What it shows: Two curves over logarithmically scaled angular frequency ω: the magnitude |G₀(jω)| in decibels (20·log) on top, the phase angle φ₀ in degrees below. Both describe how strongly and with what delay the open loop transmits a sinusoidal signal of frequency ω.

Used for: Stability proof and controller design in the frequency domain: at the crossover ω_d (0 dB) you read the phase margin, at the phase crossover ω_π (−180°) the gain margin. Because series elements simply add in dB and degrees, you immediately see which element (time constant, integrator, dead time, D action) consumes or supplies margin.

How to read it: Bends in the magnitude lie at the corner frequencies 1/T; each pole lowers the slope by 20 dB/decade and the phase by 90°, each zero raises both, dead time only rotates the phase. A gain change shifts the magnitude in parallel – the phase stays. Stable (simplified Nyquist criterion): phase at ω_d above −180°. Rules of thumb: φ_R 40…70°, A_R ≈ 6…12 dB.

Nyquist plot

What it shows: The frequency response G₀(jω) as a curve in the complex plane: one point with real and imaginary part for each frequency ω; ω runs along the curve from 0 to ∞. The critical point (−1, j0) and the unit circle |G₀| = 1 are drawn in.

Used for: The most general stability criterion – it also holds with dead time and for unstable plants where Hurwitz fails. It also shows intuitively why gain (curve is stretched) and dead time (curve curls inward) tip the loop over.

How to read it: For stable plants with at most a double pole at the origin: the curve must leave the critical point −1 on its left. The intersection with the negative real axis shows the gain margin (distance to −1), the intersection with the unit circle the phase margin (angle to the negative real axis). With integrators the curve starts at infinity (−90° per integrator); the calculator shows the region around −1.

Open the calculator with this main plot

Root locus

What it shows: The paths along which the closed-loop poles travel in the s-plane as the gain K is raised from 0 to ∞. They start at the open-loop poles (×) and end in its zeros (○) or run to infinity along the asymptotes. Breakaway points and imaginary-axis crossings are marked.

Used for: Controller design by pole placement: choose K so the dominant pole pair has the desired damping and speed, and see at once from which gain the loop becomes unstable (K_crit). It also shows whether an additional D term (zero) pulls the branches to the left.

How to read it: Points near the crosses belong to small K, distant ones to large K; the marker shows the position at the selected gain. Where two branches meet on the real axis (breakaway point), oscillation begins. Where a branch crosses the imaginary axis lies the stability limit with the sustained-oscillation frequency ω_crit. If n − m ≥ 3 branches go to infinity, the loop inevitably becomes unstable at large K.

Open the calculator with this main plot

Step response

What it shows: The time course of the controlled variable x(t) after the setpoint is switched from 0 to 1 at time 0 (closed loop) – optionally the open-loop response to a step of the manipulated variable. Dashed: steady-state value, shaded: ±2 % tolerance band.

Used for: The most intuitive assessment of control performance and the proof of requirements: overshoot, rise time, settling time and steady-state error can be read directly and compared with specifications. All other diagrams are ultimately tools for shaping this curve.

How to read it: Overshoot: first maximum above the steady-state value (16 % at D = 0.5, 4.3 % at D = 0.707, 0 % aperiodic). Rise time: 10 % → 90 %. Settling time: from when the curve stays inside the band. If the curve ends below the setpoint, integral action is missing (steady-state error). Growing oscillations mean instability – the same statement as poles right of the axis or a negative phase margin.

Open the calculator with this main plot

Inputs

What you enter – and where the values come from

Plant type
Selects the plant form: 'lags' for P, I or PT plants built from individual time constants (the common case of Zacher/Reuter ch. 3), 'oscillatory PT2' for a denominator 1 + 2·D·T₀·s + T₀²·s² (spring–mass systems, RLC circuits) and 'polynomial' for arbitrary numerator/denominator coefficients when the transfer function is already expanded.
Plant gain K_S
Static gain of the plant: change of the controlled variable per unit of manipulated variable at steady state (dimensionless or e.g. K/% for temperature control). For integrating plants K_S is the integral gain K_IS in 1/s. Obtained from a step test (final value ÷ step size) or modelling; typically 0.1 to 10, must be > 0.
Integrators
Number of free integrators (poles at s = 0) of the plant: 0 for self-regulating plants (temperature, pressure), 1 for non-self-regulating plants (level, position with a velocity actuator), 2 for double integrators (position with a force actuator). Each integrator shifts the phase by −90°.
Time constants T₁, T₂, T₃
Lag time constants of the (1 + s·T) denominator factors in the selected time unit. 0 means 'not present'. From a step response (63 % time for PT1, see the PT1 time-constant calculator) or component data (RC, mass/damping). Order does not matter; typical values range from milliseconds (electronics) to minutes (thermal processes).
Numerator time constant Tz
Optional (1 + s·Tz) factor in the numerator, i.e. a zero at s = −1/Tz. It appears in plants with lead behaviour (e.g. sensors with a high-pass share). 0 = no zero.
Natural time T₀ and damping ratio D
Parameters of the oscillatory PT2 element per Zacher/Reuter sec. 3.5: T₀ = 1/ω₀ is the reciprocal of the undamped natural angular frequency, D the dimensionless damping ratio. D < 1 gives complex conjugate poles (oscillation), D ≥ 1 two real poles. From a decay test (see the logarithmic-decrement calculator) or component data.
Numerator/denominator polynomial
Coefficients in ascending powers of s, separated by comma or space: '1, 3, 2' means 1 + 3·s + 2·s². The numerator degree must not exceed the denominator degree. Use this form for transfer functions that are already computed or exported from simulation tools.
Dead time Tt
Transport delay e^(−s·Tt): the output reacts only after Tt to an input change (conveyor, pipeline, sampling). It leaves the magnitude unchanged but rotates the phase by −ω·Tt (in radians) and is therefore the main enemy of stability. 0 = no dead time. A root locus is only possible without dead time.
Controller type
'no controller' analyses the plant alone (G₀ = G_S). P, PI, PD and PID follow the additive form G_R(s) = K_PR·(1 + 1/(s·Tn) + s·Tv) of Zacher/Reuter sec. 4.3 with an ideal derivative term. Integral action removes the steady-state error; derivative action adds phase lead.
Controller gain K_PR
Proportional gain of the controller, dimensionless or in manipulated units per controlled unit. The slider below the results varies exactly this value (K_S without controller), so poles, curves and step response move live. Must be > 0.
Reset time Tn
Time after which the integral share has caught up with the proportional share for a constant error (Zacher/Reuter sec. 4.3.3). Small Tn = strong integration but less phase margin. PI/PID only.
Derivative time Tv
Weighting of the error rate in the derivative share (Zacher/Reuter sec. 4.3.5). Adds phase lead near ω = 1/Tv. The calculator uses an ideal derivative without a filter; real controllers need an additional filter time constant. PD/PID only, ≥ 0.
Time unit
Unit of all time constants and the dead time (ms, s, min, h). Internally everything is computed in seconds; angular frequencies are shown in rad/s.
Results

What each value means

Gain crossover ω_d
Angular frequency in rad/s where the magnitude curve crosses the 0 dB line. It measures loop speed: rise time ≈ 1.5…2/ω_d. If no crossing exists, |G₀| is everywhere below (controller too weak) or above 1.
Phase margin φ_Rd
Distance of the phase curve at ω_d from the −180° line in degrees. Rules of thumb per Zacher/Reuter sec. 6.3.2: 40…70° for good setpoint response, > 30° for disturbance rejection (Dubbel: φ_R > 30°). Negative values mean instability; small positive values strong overshoot.
Phase crossover ω_π
Angular frequency where the phase reaches −180°. At this frequency the loop oscillates at the stability limit (ω_crit); the period T_crit = 2π/ω_π is the critical period needed for the Ziegler–Nichols method.
Gain margin A_R
Factor (and dB value) by which the loop gain may grow until the loop becomes unstable. Multiplied by the current gain it gives K_crit. Zacher/Reuter sec. 8.3 recommends A_R ≈ 12 dB (factor 4) for well-damped behaviour.
Stability verdict
Result of the simplified Nyquist criterion (eq. 6.64) or of the general crossing form (eq. 6.61) when G₀ has unstable poles. Without dead time it is additionally checked against the closed-loop poles.
Example

Worked example from the literature

Zacher/Reuter Beispiel 6.3: mixing tank with pipeline, K_S = 0.8, T₁ = 100 s, Tt = 10 s; PI controller K_PR = 10, Tn = 20 s. The calculator gives φ_Rd ≈ 16° – stable but weakly damped. Lowering K_PR to 0.79 moves ω_d to 0.0172 s⁻¹ and raises the phase margin to about 39°, exactly as the book derives via a 22 dB drop of the magnitude curve.

Context

What this calculator is for

Frequency-domain controller design: checking margins, visualising the effect of dead time and time constants, comparing measured frequency responses with the model and finding the critical gain for empirical tuning rules. Also usable for filters, sensors and drive controllers because only G₀(s) is needed.

How to proceed

  1. Enter plant and controller; the corner frequencies 1/T appear as bends in the magnitude curve.
  2. Read ω_d and φ_Rd. If φ_Rd < 30°, lower the gain or add phase with a D term or larger Tn.
  3. Move the gain slider: the magnitude curve shifts in parallel while the phase stays – showing why K consumes the margin.
  4. Take K_crit and T_crit to the Ziegler–Nichols tuning page.
Source

Technical basis

Zacher/Reuter, Regelungstechnik für Ingenieure, 17th ed. 2024: sec. 2.4.4 Bode plot, ch. 5 Bode plots of elementary elements, sec. 6.3 Nyquist stability in the Bode plot (eq. 6.61, 6.64, 6.65), Beispiel 6.3, sec. 8.3 gain margin. Dubbel, ch. X control engineering, sec. 5.2 (phase/gain margin).

The sources support the equations and worked examples; the reference examples are recomputed in the calculator's automated tests. The calculator does not replace a simulation with the complete nonlinear plant model.

Last updated: 2026-09-20

FAQ

Frequently asked questions

What is a transfer function?

G(s) = output(s)/input(s) describes a linear time-invariant element in the Laplace domain. The denominator holds the natural dynamics (poles), the numerator the input dynamics (zeros). With s = jω it becomes the frequency response from which Bode and Nyquist plots follow.

Why does the slider change only K_PR or K_S?

Loop gain is the parameter practitioners adjust first and the only one that shifts magnitude, root locus and step response proportionally without changing the phase curve. Change all other parameters in the input fields; the display updates immediately as well.

Why is the phase not wrapped to ±180°?

The calculator sums the phases of individual poles, zeros and dead time. The phase therefore falls continuously below −180°, −360° etc. with dead time or high order, exactly as in the Bode plots of Zacher/Reuter. Only then can the crossing rule be applied correctly.

What phase margin is good?

Zacher/Reuter sec. 6.3.2: 40…70° for setpoint response, > 30° for disturbance rejection. About 60° corresponds to D ≈ 0.6 and roughly 10 % overshoot for a dominant pole pair; 37° belongs to the symmetric optimum with k = 4 (43 % overshoot).

Related calculators

More in the control-engineering cluster