Chapter 13: Frequency Response, Nyquist Stability Criterion, and Bode Plots
- Page ID
- 123789
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\dsum}{\displaystyle\sum\limits} \)
\( \newcommand{\dint}{\displaystyle\int\limits} \)
\( \newcommand{\dlim}{\displaystyle\lim\limits} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Frequency Response and the Nyquist Stability Criterion
Frequency response is a powerful method to analyze and design control systems based on how they react to sinusoidal inputs. Unlike time-domain methods, which involve solving differential equations, frequency-domain analysis characterizes system behavior using magnitude and phase across frequencies. This method underpins many of the most robust and scalable modern control strategies.
Sinusoidal Steady-State Behavior
For any linear time-invariant (LTI) system, a sinusoidal input of frequency \( \omega \) will produce a sinusoidal output of the same frequency, but scaled in amplitude and phase-shifted. Mathematically:
\[
u(t) = A \cos(\omega t) \quad \Rightarrow \quad y(t) = |G(j\omega)| A \cos(\omega t + \angle G(j\omega))
\]
This output structure allows us to define the frequency response function:
\[
\boxed{G(j\omega) = |G(j\omega)| e^{j \angle G(j\omega)}}
\]
Here:
- \( |G(j\omega)| \): gain or magnitude response
- \( \angle G(j\omega) \): phase response (typically in degrees or radians)
This substitution arises from evaluating the Laplace-domain transfer function at \( s = j\omega \), transforming the problem into an algebraic computation.
Physical Insight: Mass-on-Sheet Example
Imagine a small coin (mass) resting on a sheet of paper that moves sinusoidally side to side.
- At low frequencies: the coin moves nearly identically with the paper. The system tracks the input well.
\[
|G(j\omega)| \approx 1, \quad \angle G(j\omega) \approx 0^\circ
\]
- At high frequencies: inertia dominates. The coin barely moves while the paper vibrates beneath it.
\[
|G(j\omega)| \ll 1, \quad \angle G(j\omega) \to -90^\circ \text{ (or more)}
\]
This setup shows that the frequency response captures not only gain attenuation but also the phase lag introduced by system dynamics.
Frequency Response from Transfer Functions
Given a transfer function:
\[
G(s) = \frac{N(s)}{D(s)}
\]
its frequency response is:
\[
G(j\omega) = \frac{N(j\omega)}{D(j\omega)} = \frac{|N(j\omega)| e^{j \angle N(j\omega)}}{|D(j\omega)| e^{j \angle D(j\omega)}}
= |G(j\omega)| e^{j \angle G(j\omega)}
\]
In this form, we can easily compute the gain and phase at each frequency. This is the basis for constructing Bode and Nyquist plots.
Bode Plots
The Bode plot consists of two separate plots versus \( \log_{10}(\omega) \):
1. Magnitude Plot:
\[
20 \log_{10} |G(j\omega)|
\]
2. Phase Plot:
\[
\angle G(j\omega) \quad (\text{in degrees})
\]
Each elementary component of \( G(s) \)—poles, zeros, gain, integrators—has a well-known log-magnitude and phase contribution. The product of transfer function terms becomes the sum in log scale:
\[
\log_{10}(ab) = \log_{10}(a) + \log_{10}(b)
\]
This is why Bode plots use logarithmic magnitude and linear phase: they simplify system composition to visual addition.
Seven Elementary Transfer Functions
All rational transfer functions can be constructed from combinations of these elementary blocks:
1. Constant gain \( K \)
2. Pure integrator: \( \frac{1}{s} \)
3. First-order pole: \( \frac{1}{s + a} \)
4. First-order zero: \( s + a \)
5. Second-order term:
\[
\frac{\omega_n^2}{s^2 + 2\zeta \omega_n s + \omega_n^2}
\]
6. Differentiator: \( s \)
7. Time delay: \( e^{-sT} \) (phase-only effect)
Bode plots for complex systems are built by superposing the Bode plots of these building blocks.
Nyquist Plot
The Nyquist plot is a parametric plot of \( G(j\omega) \) in the complex plane as \( \omega \in [0, \infty) \). It displays the real and imaginary parts of the frequency response:
\[
G(j\omega) = \text{Re}(\omega) + j \cdot \text{Im}(\omega)
\]
This plot encodes both gain and phase simultaneously and plays a central role in stability analysis.
Construction methods:
- Method 1: Sketch from Bode plot
- Sweep frequency from \( \omega = 0^+ \to \infty \)
- Record gain and phase at sample points
- Mirror the plot across the real axis for \( \omega < 0 \)
- Indicate arrows (direction of increasing frequency)
- Method 2: Parametric plot of \( G(j\omega) \)
\[
\omega \mapsto \left( \text{Re}[G(j\omega)], \text{Im}[G(j\omega)] \right)
\]
This method is often implemented numerically or using symbolic tools like Mathematica.
Worked Bode and Nyquist Plot Examples
Example 1: First-Order Low-Pass Filter
Let:
\[
G(s) = \frac{1}{s + 1}
\]
Frequency Response:
\[
G(j\omega) = \frac{1}{j\omega + 1} = \frac{1}{\sqrt{\omega^2 + 1}} \angle -\tan^{-1}(\omega)
\]
Bode Plot:
- Magnitude: \( 20 \log_{10} \left( \frac{1}{\sqrt{\omega^2 + 1}} \right) \)
- Phase: \( -\tan^{-1}(\omega) \)
- At \( \omega = 1 \): -3 dB, phase = -45°

Nyquist Plot:
- Starts at \( G(0) = 1 \)
- Arcs toward the origin in the fourth quadrant
- Never crosses or encircles -1

Example 2: Second-Order System with Resonance
Let:
\[
G(s) = \frac{s(s + 3)}{s^2 + s + 9}
\]
Frequency Response:
\[
G(j\omega) = \frac{j\omega(j\omega + 3)}{(j\omega)^2 + j\omega + 9}
\]
Use symbolic tools or software to evaluate magnitude and phase across frequencies.
Key Observations:
- Resonant peak near \( \omega = 3 \)
- Magnitude plot shows a dip followed by a peak
- Phase starts near \( +90^\circ \), decreases, and drops toward \( -90^\circ \)

Nyquist Plot:
- Begins at origin
- Swirls outward due to the numerator zero at \( s = -3 \)
- Shows high-frequency behavior consistent with a second-order system

Example 3: Lead Controller Behavior
Let:
\[
G(s) = \frac{s + 1}{s + 10}
\]
Frequency Response:
\[
G(j\omega) = \frac{j\omega + 1}{j\omega + 10}
\]
Magnitude:
\[
|G(j\omega)| = \frac{\sqrt{\omega^2 + 1}}{\sqrt{\omega^2 + 100}} \Rightarrow \text{High-frequency gain} \to 1/10 = -20\,\text{dB}
\]
Phase:
\[
\angle G(j\omega) = \tan^{-1}(\omega) - \tan^{-1}(\omega/10) \Rightarrow \text{Positive phase bump — typical of lead compensation}
\]

Nyquist Plot:
- Arc in the right-half plane (phase lead)
- Ends closer to the real axis
- Useful for bending root locus toward the left

Nyquist Stability Criterion
The Nyquist criterion is a frequency-domain test that links the stability of a closed-loop system to the open-loop transfer function.
Let:
\[
L(s) = C(s)P(s) \quad \Rightarrow \quad T(s) = \frac{L(s)}{1 + L(s)}
\]
The closed-loop poles are the roots of \( 1 + L(s) = 0 \).
Nyquist Criterion:
\[
Z = P - N
\]
Where:
- \( Z \): number of closed-loop poles in the right-half plane (unstable)
- \( P \): number of open-loop poles in the RHP
- \( N \): number of counter-clockwise encirclements of the point \( -1 + j0 \) by the Nyquist plot of \( L(j\omega) \)
Interpretation:
- For stability, we want \( Z = 0 \Rightarrow N = P \)
- If \( L(s) \) has no RHP poles (\( P = 0 \)), then stability requires no encirclements of \( -1 \)
This criterion is a consequence of the argument principle in complex analysis, mapping the number of encirclements of a critical point to the number of zeros of a function inside a contour.
Important Considerations: Poles at the Origin
When \( L(s) \) has poles on the imaginary axis (e.g., integrators at \( s = 0 \)), the Nyquist contour must be indented to avoid singularities. In practice:
- The contour detours around the origin in the complex plane
- We analyze \( \lim_{\omega \to 0^+} L(j\omega) \)
- The mapping of the contour near the origin contributes a large arc in the complex plane
If the pole at the origin is stable (i.e., not causing exponential growth), then it does not increase \( P \), but it does affect the Nyquist plot's shape and must be handled carefully.
Worked Example 1: Nyquist Stability Analysis
Let:
\[
L(s) = \frac{k(s + 2)}{s(s^2 + s + 3)}
\]
Step 1: Open-loop Pole and Zero Locations
- One integrator pole at \( s = 0 \)
- Two complex poles from \( s^2 + s + 3 \):
\[
s = \frac{-1 \pm \sqrt{1 - 12}}{2} = \frac{-1 \pm j\sqrt{11}}{2}
\]
- One zero at \( s = -2 \)
This means:
\[
P = 0 \quad \text{(no open-loop RHP poles)}
\]
Step 2: Nyquist Stability Criterion
We check:
\[
Z = P - N \quad \Rightarrow \quad Z = -N
\]
To ensure stability, we want \( Z = 0 \Rightarrow N = 0 \), i.e., no encirclements of \( -1 \).
Step 3: Find Critical Frequency
We solve numerically for the frequency \( \omega_{\text{crit}} \) where:
\[
\angle L(j\omega) = -180^\circ
\]
This occurs at:
\[
\boxed{\omega_{\text{crit}} \approx 2.44 \ \text{rad/s}}
\]
Step 4: Compute Gain at That Frequency
Evaluate:
\[
|L(j\omega_{\text{crit}})| \approx 0.337
\quad \Rightarrow \quad
\boxed{k_{\text{crit}} \approx \frac{1}{0.337} = 2.97}
\]
Conclusion:
- For stability: \( \boxed{k < 2.97} \)
- For \( k > 2.97 \), the Nyquist plot encircles \( -1 \Rightarrow Z = 1 \Rightarrow \) closed-loop unstable
- For \( k = 2.97 \), the system is marginally stable


Worked Example 2: Nyquist Analysis with RHP Pole
Let:
\[
L(s) = \frac{k(s + 1)}{s - 2}
\]
Step 1: Pole-Zero Structure
- One zero at \( s = -1 \)
- One pole at \( s = +2 \quad \Rightarrow \boxed{P = 1} \)
This system has an <b>open-loop unstable pole</b> at \( s = +2 \), so we must ensure:
\[
Z = P - N = 1 - N \Rightarrow \boxed{N = 1} \text{ (for closed-loop stability)}
\]
In other words, we require the Nyquist plot of \( L(j\omega) \) to make <b>one counterclockwise encirclement of \( -1 \)</b> for the closed-loop system to be stable.
Step 2: Frequency Response
\[
L(j\omega) = \frac{k(j\omega + 1)}{j\omega - 2}
\]
Compute the magnitude and phase:
\[
|L(j\omega)| = \frac{k \cdot \sqrt{\omega^2 + 1}}{\sqrt{\omega^2 + 4}}
\]
\[
\angle L(j\omega) = \tan^{-1}(\omega) - \pi - \tan^{-1}\left( \frac{\omega}{-2} \right)
\]
Step 3: Critical Frequency for Instability
At \( \omega = 0 \), the phase is exactly \( -180^\circ \), and:
\[
L(j0) = \frac{k(1)}{-2} = -\frac{k}{2}
\Rightarrow |L(j0)| = \frac{k}{2}
\]
Set \( |L(j0)| = 1 \Rightarrow \boxed{k_{\text{crit}} = 2} \)
Step 4: Interpretation
Since the system has a RHP pole at \( s = 2 \), the Nyquist criterion requires:
\[
\boxed{\text{One CCW encirclement of } -1}
\]
That means:
- For \( k < 2 \), the Nyquist plot does <b>not</b> encircle \( -1 \) \( \Rightarrow \) closed-loop unstable
- For \( k = 2 \), the Nyquist plot <b>touches</b> \( -1 \) \( \Rightarrow \) marginally stable
- For \( k > 2 \), the plot <b>encircles</b> \( -1 \) once \( \Rightarrow \) closed-loop stable


Conclusion:
- Open-loop instability (\( P = 1 \)) requires one CCW encirclement of \( -1 \)
- Closed-loop stability is possible, but only if gain is tuned: \( \boxed{k > 2} \)
- Nyquist and Bode gain/phase margin analysis helps determine safe bounds on \( k \)
Conclusion
- Root locus and frequency response tools like Nyquist plots and Bode plots are critical to understanding system stability and performance.
- Bode plots provide insight into gain and phase margins, bandwidth, and resonance behavior.
- Nyquist plots visualize the response in the complex plane and help determine closed-loop stability even for systems with open-loop unstable poles.
- Nyquist stability criterion states:
\[
Z = P - N
\]
where:
- \( Z \): number of unstable closed-loop poles
- \( P \): number of open-loop poles in the right-half plane
- \( N \): number of counter-clockwise encirclements of \( -1 \) by the Nyquist plot
- For a system to be stable, we want \( Z = 0 \), which implies:
- If \( P = 0 \), then \( N = 0 \) (no encirclements of -1)
- If \( P = 1 \), then \( N = 1 \) (one counter-clockwise encirclement of -1)
Design Guidelines
- Use Bode plots to evaluate gain and phase margins.
- Use Nyquist plots to assess closed-loop stability and validate against the Nyquist criterion.
- Tune controller gain to achieve desired margins while ensuring system stability:
- Avoid crossing the -1 point in the Nyquist plot without satisfying the Nyquist condition.
- Use frequency response plots to choose gains that avoid excessive phase lag or resonant peaking.