Part V

Loop-shaping Control Design

This part of the book introduces the loop-shaping design method based on the frequency response characteristics of the system. In Part II we derived transfer function and state-space models based on the linearized system. In Part III we showed that PID controllers can be used to regulate the output of second-order systems. For higher-order systems, PID can be used if the original system can be written as a cascade, or series, of second-order systems. In Part IV we showed that controllers can be derived for higher-order systems using state-space models. The state-space design method is a time-domain method that focuses on shaping the time-response of the system. In this part of the book we extend PID control using frequency domain ideas where we shape the frequency response of the system. When the transfer function is available, it provides a compact representation of the frequency response of the open-loop system. Therefore, in this part we will focus on transfer function models of the system. The methods in this part are not constrained to second-order systems and do not depend on a cascade structure. In fact, they do not even require a transfer function of the system, as long as the frequency response, or Bode plot, is known.

Chapter 18 is a review of frequency response models of linear time-invariant systems and develops intuition concerning the Bode plot of the input-output response. In Chapter 19 we show how performance specifications for reference tracking, disturbance rejection, and noise attenuation can be related to the frequency response of the open loop control-plant pair. Chapter 20 addresses stability of the closed-loop system from a frequency response point of view. Chapter 21 represents the culminating chapter in this part of the book and describes how to design the controller to achieve closed-loop stability and to satisfy design specifications on reference tracking, disturbance rejection, and noise attenuation.

15 Frequency Response of LTI Systems

15.1 Theory

15.1.1 Manipulating Complex Numbers

Any complex number \(z\) can be represented in rectangular coordinates as \[z = \Re\{z\} + j \Im\{z\},\] where \(\Re\{z\}\) is the real part of \(z\), and \(\Im\{z\}\) is the imaginary part of \(z\). Similarly, \(z\) can be represented in polar form as \[\tag{15.1} z = \left|z\right|e^{j\angle z},\] where \(\left|z\right|\) denotes the magnitude of \(z\) and \(\angle z\) denotes the angle or phase of \(z\). The relationship between the real and imaginary parts, and the magnitude and phase of \(z\), are depicted in Fig. 15.1.

Relationship between the real and imaginary parts of z, and the magnitude and phase of z.

From the geometry shown in Fig. 15.1 we can see that \[\begin{aligned} \left|z\right| &= \sqrt{\Re\{z\}^2 + \Im\{z\}^2} \\ \angle z &= \tan^{-1}\frac{\Im\{z\}}{\Re\{z\}}. \end{aligned}\] Similarly, from Euler’s relationship \[e^{j\theta} = \cos\theta + j\sin\theta,\] we have from Equation 15.1 that \[z = \left|z\right|e^{j\angle z} = \left|z\right|\cos\angle z + j \left|z\right|\sin\angle z\] which implies that \[\begin{aligned} \Re\{z\} &= \left|z\right|\cos\angle z \\ \Im\{z\} &= \left|z\right|\sin\angle z. \end{aligned}\]

The conjugate of \(z\), denoted \(\bar{z}\), is given by \[\bar{z} = \Re\{z\}-j\Im\{z\} = \left|z\right|e^{-j\angle z}.\] Note that \(z\bar{z} = \left|z\right|^2\).

Suppose that \(z_1 = \left|z_1\right|e^{j\angle z_1}\) and \(z_2=\left|z_2\right|e^{j\angle z_2}\) are two complex numbers, then \[\begin{aligned} z_1z_2 &= \left|z_1\right|e^{j\angle z_1}\left|z_2\right|e^{j\angle z_2} \\ &= \left|z_1\right|\left|z_2\right|e^{j\angle z_1}e^{j\angle z_2} \\ &= \left|z_1\right|\left|z_2\right|e^{j(\angle z_1 + \angle z_2)}, \end{aligned}\] therefore when multiplying complex numbers, their magnitudes multiply, but their phases add. Similarly, we have \[\frac{z_1}{z_2} = \frac{\left|z_1\right|e^{j\angle z_1}}{\left|z_2\right|e^{j\angle z_2}} = \frac{\left|z_1\right|}{\left|z_2\right|}\frac{e^{j\angle z_1}}{e^{j\angle z_2}} = \frac{\left|z_1\right|}{\left|z_2\right|}e^{j(\angle z_1 - \angle z_2)},\] therefore when dividing complex numbers, their magnitudes divide, but their phases subtract.

A transfer function \(H(s)\) is a complex number for any specific value of \(s\). Therefore, \(H(s)\) can be expressed in both rectangular and polar forms as \[H(s) = \Re\{H(s)\} + j\Im\{H(s)\} = \left|H(s)\right|e^{j\angle H(s)}.\] For example, if \(H(s) = \frac{1}{s+1}\), then when \(s=2+j3\) \[\begin{aligned} H(2+j3) &= \frac{1}{2+j3+1}= \frac{1}{3+j3} = \frac{1}{3+j3}\frac{3-j3}{3-j3} \\&= \frac{1}{6} - j\frac{1}{6} = \sqrt{\frac{1}{18}}e^{-j\frac{\pi}{4}}. \end{aligned}\] If \(H(s)\) has multiple poles and zeros, then the magnitude and phase of \(H(s)\) can be represented in terms of the magnitude and phase of the poles and zeros. For example, suppose that \[H(s) = \frac{K(s+z_1)(s+z_2)\dots(s+z_m)}{(s+p_1)(s+p_2)\dots(s+p_n)}.\] Since \((s+a)\) is a complex number for any \(s\), it can be written in polar form as \(s+a=\left|s+a\right|e^{j\angle(s+a)}\), therefore \[\begin{aligned} H(s) &= \frac{K(s+z_1)(s+z_2)\dots(s+z_m)}{(s+p_1)(s+p_2)\dots(s+p_n)} \\ &= \frac{\left|K\right|e^{j\angle K} \left|s+z_1\right|e^{j\angle(s+z_1)}\left|s+z_2\right|e^{j\angle(s+z_2)}\dots\left|s+z_m\right|e^{j\angle(s+z_m)}} {\left|s+p_1\right|e^{j\angle(s+p_1)}\left|s+p_2\right|e^{j\angle(s+p_2)}\dots\left|s+p_n\right|e^{j\angle(s+p_n)}} \\ &= \frac{\left|K\right|\left|s+z_1\right|\left|s+z_2\right|\dots\left|s+z_m\right|}{\left|s+p_1\right|\left|s+p_2\right|\dots\left|s+p_n\right|} \frac{e^{j\angle K} e^{j\angle(s+z_1)}e^{j\angle(s+z_2)}\dots e^{j\angle(s+z_m)}}{e^{j\angle(s+p_1)}e^{j\angle(s+p_2)}\dots e^{j\angle(s+p_n)}} \\ &= \frac{\left|K\right|\left|s+z_1\right|\left|s+z_2\right|\dots\left|s+z_m\right|}{\left|s+p_1\right|\left|s+p_2\right|\dots\left|s+p_n\right|} e^{j\left(\angle K + \sum_{i=1}^m \angle (s+z_i) - \sum_{i=1}^n \angle (s+p_i)\right)}. \end{aligned}\] Therefore \begin{align} \left|H(s)\right| &= \frac{\left|K\right|\left|s+z_1\right|\left|s+z_2\right|\dots\left|s+z_m\right|}{\left|s+p_1\right|\left|s+p_2\right|\dots\left|s+p_n\right|} \tag{15.2}\\ \angle H(s) &= \angle K + \sum_{i=1}^m \angle (s+z_i) - \sum_{i=1}^n \angle (s+p_i). \tag{15.3} \end{align}

15.1.2 Frequency Response of LTI Systems

In systems theory, the magnitude and phase representations of the transfer function \(H(s)\) are used because they have important physical meaning. In particular, suppose that \(H(s)\) represents a physical system with input \(u(t)\) and output \(y(t)\) as shown in Fig. 15.2.

LTI system represented by the transfer function H(s) with input u(t) and output y(t).

If the input to the system is given by a sinusoid of magnitude \(A\) and frequency \(\omega_0\), i.e., \[u(t) = A\sin(\omega_0t),\] then the output is given by \[\tag{15.4} y(t) = A\left|H(j\omega_0)\right|\sin(\omega_0 t + \angle H(j\omega_0)).\] Therefore, the transfer function \(H(s)\) is an elegant and compact representation of the frequency response of the system, in that the magnitude of \(H(j\omega_0)\) describes the gain of the system for input signals with frequency \(\omega_0\), and the phase of \(H(j\omega_0)\) describes the phase shift imposed by the system on input signals with frequency \(\omega_0\). For example, Fig. 15.3 shows the input-output response of an LTI system with transfer function \(H(s)=\frac{1}{s+1}\). The input signal, which is shown in grey, is \(u(t)=\sin(\omega_0 t)\) where \(\omega_0\) changes in each subplot. The output signal is shown in blue and is given by Equation 15.4. Note that in subplot (a) the time scale is different from that of the other subplots. When \(\omega_0=0.1\), \(H(j\omega_0)\approx 0.995e^{j5^\circ}\). Accordingly, in subplot (a), the output is only slightly attenuated, with very little phase shift. In contrast, when \(\omega_0=5\), \(H(j\omega_0)\approx 0.2 e^{j80^\circ}\), and in subplot (f) we see that the output is approximately 20% of the input with a phase shift approaching \(90\) degrees.

Frequency response to LTI system with transfer function H(s)=1/(s+1).

Chapter 15 interactive figure

Sinusoidal input and steady-state output

For H(s)=1/(s+1), move the input frequency. The output amplitude and phase shift are computed from H(jω), then plotted against the input signal.

Interactive Figure 15.I1. Move the input frequency to see how H(jw) changes the output amplitude and phase.

|H(jω)|
Phase shift
Interpretation

Therefore, the response of an LTI system to inputs at different frequencies can be visualized by plotting the magnitude and phase of \(H(j\omega)\) as a function of \(\omega\). The frequency response of \(H(s)=1/(s+1)\) is plotted in two different ways in Fig. 15.4. In subfigure (a) a linear scale is used for both \(\left|H(j\omega)\right|\) and \(\angle H(j\omega)\), as well as the frequency scale \(\omega\). In subfigure (b), the scale for magnitude is in dB: \(20\log\left|H(j\omega)\right|\) whereas the scale for \(\angle H(j\omega)\) is linear, however, in both cases a log scale for \(\omega\) is used on the \(x\)-axis. The plot in subfigure (b) is called a Bode plot. It should be clear from Fig. 15.4 that the Bode plot provides much more useful information than a linear plot since it more effectively reveals the behavior of the system at lower frequencies. For this reason, Bode plots are the most common method to display the frequency response of the system.

Frequency response of H(s)=1/(s+1) on a linear scale (a), and a logarithmic scale (b).

Chapter 15 interactive figure

Linear scale versus Bode scale

For H(s)=1/(s+1), move the frequency marker. The left plot uses linear magnitude and linear frequency; the right plot shows the same response as a Bode plot with dB magnitude and log frequency.

Interactive Figure 15.I2. Compare the same frequency response on a linear plot and on a Bode plot. The shaded area on the linear plot shows how low-frequency behavior is compressed when many decades are shown on a linear axis.

Selected frequency
|H(jω)|
20log10|H(jω)|
∠H(jω)
Interpretation
dB conversion reference: 0 dB → |H| = 1 -3 dB → |H| ≈ 0.707 -20 dB → |H| = 0.1 -40 dB → |H| = 0.01

Check your interpretation

Why is the Bode plot more useful here?

As a note, since the magnitude of \(H(j\omega)\) is displayed on the Bode plot as \(20\log\left|H(j\omega)\right|\) in units of dB, note that \(20\log\left|H(j\omega)\right|=0\) dB implies that \(\left|H(j\omega)\right|=1\). Similarly, \(20\log\left|H(j\omega)\right|=20\) dB implies that \(\left|H(j\omega)\right|=10\) and \(20\log\left|H(j\omega)\right|=40\) dB implies that \(\left|H(j\omega)\right|=100\). Going in the other direction, \(20\log\left|H(j\omega)\right|=-20\) dB implies that \(\left|H(j\omega)\right|=0.1\), and \(20\log\left|H(j\omega)\right|=-40\) dB implies that \(\left|H(j\omega)\right|=0.01\). In general, \[20\log\left|H(j\omega)\right|=20n\text{~dB~} \implies \left|H(j\omega)\right|=10^n.\]

15.1.3 Straight-line Approximations for Bode Plots

While the Bode plot for a system can be easily generated using the MATLAB or Python bode command, it is still useful to understand how to approximately draw a Bode plot by hand. The reason for this is that in the loop-shaping design methodology, we add elements to the control transfer function \(C(s)\) to "shape" the Bode plot of the loop gain \(P(s)C(s)\) where \(P(s)\) is the transfer function of the plant. Learning to approximately draw the Bode plot by hand will provide helpful insights into this process. Therefore, in this section we provide a brief tutorial on how to approximate the Bode plot for a transfer function \(H(s)\).

We start by putting the transfer function into Bode canonical form by factoring out the poles and zeros as follows: \[\begin{aligned} H(s) &= \frac{K(s+z_1)(s+z_2)\dots(s+z_m)}{(s+p_1)(s+p_2)\dots(s+p_n)} \\ &= \frac{Kz_1z_2\dots z_m}{p_1p_2\dots p_n}\frac{(1+s/z_1)(1+s/z_2)\dots(1+s/z_m)}{(1+s/p_1)(1+s/p_2)\dots(1+s/p_n)}. \end{aligned}\] Therefore, following Equations 15.2 and 15.3 we have \begin{align} \left|H(j\omega)\right| &= \left|\frac{Kz_1z_2\dots z_m}{p_1p_2\dots p_m}\right| \frac{\left|1+j\omega/z_1\right|\left|1+j\omega/z_2\right|\dots\left|1+j\omega/z_m\right|}{\left|1+j\omega/p_1\right|\left|1+j\omega/p_2\right|\dots\left|1+j\omega/p_n)\right|} \tag{15.5}\\ \angle H(j\omega) &= \angle \left(\frac{Kz_1z_2\dots z_m}{p_1p_2\dots p_m}\right) + \sum_{i=1}^m \angle (1+j\omega/z_i) - \sum_{i=1}^n \angle (1+j\omega/p_i). \tag{15.6} \end{align} Since \(20\log\left|AB\right|=20\log\left|A\right|+20\log\left|B\right|\), Equation 15.5 gives \begin{gather} \tag{15.7} 20\log\left|H(j\omega)\right| = 20\log \left|\frac{Kz_1z_2\dots z_m}{p_1p_2\dots p_m}\right| \\ + \sum_{i=1}^m 20\log\left|1+j\omega/z_i\right| - \sum_{i=1}^n 20\log\left|1+j\omega/p_i\right|. \end{gather}

Drawing the Bode plot for a general transfer function with real poles and zeros, can be decomposed into drawing the Bode plot for each pole and zero, and then graphically adding them to get the general Bode plot. Note first that \[20\log \left|\frac{Kz_1z_2\dots z_m}{p_1p_2\dots p_m}\right|\] is not a function of \(\omega\) and is therefore a constant line on the Bode plot. Also note that \[\angle \left(\frac{Kz_1z_2\dots z_m}{p_1p_2\dots p_m}\right)\] is also a constant and is either \(0\) degrees if \(\left(\frac{Kz_1z_2\dots z_m}{p_1p_2\dots p_m}\right)>0\), or \(180\) degrees if \(\left(\frac{Kz_1z_2\dots z_m}{p_1p_2\dots p_m}\right)<0\).

We start by drawing the Bode plot when \(H(s) = s+z\) has a single zero at \(s=-z\) and \(z>0\). The first step is to put the transfer function in Bode canonical form as \[H(j\omega) = z(1+j\frac{\omega}{z}).\] Therefore, from Equation 15.7 we have \[\begin{aligned} 20\log\left|H(j\omega)\right| &= 20\log\left|z\right| + 20\log\left|1+j\frac{\omega}{z}\right| \\&= 20\log\left|z\right| + 20\log\sqrt{1+(\omega/z)^2}. \end{aligned}\] When \(\omega/z\ll 1\) we have that \(\sqrt{1+(\omega/z)^2}\approx 1\), implying that \[20\log\left|H(j\omega)\right| \approx 20\log\left|z\right|.\] Note that since this term is not a function of \(\omega\), it is a constant value on the Bode plot. On the other hand, when \(\omega/z \gg 1\) we have that \(\sqrt{1+(\omega/z)^2}\approx \left|\omega/z\right|\), giving \[20\log\left|H(j\omega)\right| \approx 20\log\left|z\right| + 20\log\left|\omega/z\right|.\] Note that the second term is a straight line on a Bode plot that intersects the \(0\) dB axis at \(\omega=z\) and increases \(20\) dB for every factor of 10 increase in \(\omega\). Therefore, on the Bode plot, the slope of the second term is \(+20\) dB/decade. A straight-line approximation is shown in Fig. 15.5, along with the Bode plot produced by MATLAB.

Straight-line approximation for a single zero.

Note that the largest mismatch between the straight-line approximation and the actual Bode plot is at \(\omega=z\). In that case we have \[20\log\left|H(jz)\right| \approx 20\log\left|z\right| + 20\log\sqrt{2}=20\log\left|z\right| + 3~dB.\] Therefore, at the corner frequency \(z\) the Bode plot is \(3\) dB above the low frequency response.

To approximate the phase plot, note that \[\tag{15.8} \angle H(j\omega) = \angle z(1+j\omega/z) =\tan^{-1}\frac{\omega}{z}.\] When \(\omega=z\) we have that \(\tan^{-1} 1 = 45\) degrees. When \(\omega\ll z\), we have that \(\tan^{-1}(\omega/z)\approx 0\) degrees, and when \(\omega\gg z\), we have that \(\tan^{-1}(\omega/z)\approx 90\) degrees. The phase plot as calculated by MATLAB is shown in Fig. 15.5. An adequate straight-line approximation is obtained by setting the phase to zero when \(\omega<z/10\), i.e., one decade less than \(z\), and setting the phase to \(90\) degrees when \(\omega>10z\), i.e., one decade greater than \(z\), and drawing a straight line between those points so that the phase at \(z\) is \(45\) degrees. The straight-line approximation for the phase is also shown in black in Fig. 15.5.

The straight-line approximation for phase as described above assumes that \(z>0\), i.e., that the zero is in the left half of the complex plane. For right-half-plane zeros when \(z<0\), the phase as calculated in Equation 15.6 is \[\angle H(j\omega) = \angle z + \angle (1+j\omega/z) = 180^\circ - \tan^{-1}\frac{\omega}{\left|z\right|}.\] Therefore, the phase starts at \(180\) degrees and decreases by \(90\) degrees as \(\omega\) gets large rather than increases. Fig. 15.6 shows the Bode plot and its straight-line approximation when the zero is in the right half-plane. When a system has a zero in the right half-plane, it is called non-minimum phase because of the \(180\) degree phase increase at low frequencies.

Straight-line approximation for a zero in the right half of the complex plane.

Now consider drawing the Bode plot for a single pole, i.e., \(H(s) = \frac{p}{s+p}\), which has a single pole at \(s=-p\) which is in the right half-plane when \(p>0\). In Bode canonical form \(H(s)\) becomes \[H(j\omega) = \frac{1}{1+j\frac{\omega}{p}}.\] Therefore, from Equation 15.7 we have \[\begin{aligned} 20\log\left|H(j\omega)\right| &= 20\log\left|1\right| - 20\log\left|1+j\frac{\omega}{p}\right| \\&= - 20\log\sqrt{1+(\omega/p)^2}. \end{aligned}\] When \(\omega/p\ll 1\), we have that \(\sqrt{1+(\omega/p)^2}\approx 1\), implying that \[20\log\left|H(j\omega)\right| \approx 0.\] Note that since this term is not a function of \(\omega\), it is a constant value at \(0\) dB on the Bode plot. On the other hand, when \(\omega/p \gg 1\), we have that \(\sqrt{1+(\omega/p)^2}\approx \left|\omega/p\right|\), giving \[20\log\left|H(j\omega)\right| \approx -20\log\left|\omega/p\right|.\] Note that the second term is a straight line on a Bode plot that intersects the \(0\) dB axis when \(\omega=p\) and decreases at \(-20\) dB for every factor of 10 increase in \(\omega\). Therefore, on the Bode plot, the slope of the second term is \(-20\) dB/decade. A straight-line approximation is shown in Fig. 15.7, along with the Bode plot produced by MATLAB.

Straight-line approximation for a single pole.

Note that the largest mismatch between the straight-line approximation and the actual Bode is at \(\omega=p\). In that case, we have \[20\log\left|H(jp)\right| \approx -20\log\sqrt{2}=-3~dB.\] Therefore, at the corner frequency \(p\) the Bode plot is \(3\) dB below the low frequency response.

To approximate the phase plot, note that \[\tag{15.9} \angle H(j\omega) = -\angle (1+j\frac{\omega}{p}) = -\tan^{-1}\frac{\omega}{p}.\] When \(\omega=p\) we have that \(-\tan^{-1} 1 = -45\) degrees. When \(\omega\ll p\), we have that \(-\tan^{-1}(\omega/p)\approx 0\) degrees, and when \(\omega\gg p\), \(-\tan^{-1}(\omega/p)\approx -90\) degrees. The phase plot as calculated by MATLAB is shown in Fig. 15.7. An adequate straight-line approximation is obtained by setting the phase to zero when \(\omega<p/10\), i.e., one decade less than \(p\), and setting the phase to \(-90\) degrees when \(\omega>10p\), i.e., one decade greater than \(p\), and drawing a straight line between those points so that the phase at \(p\) is \(-45\) degrees. The straight-line approximation for the phase is also shown in Fig. 15.7.

The straight-line approximation for phase as described above assumes that \(p>0\), i.e., that the pole is in the left half of the complex plane. For right-half-plane poles when \(p<0\), the phase as calculated in Equation 15.6 is \[\angle H(j\omega) = -\angle (1+j\omega/p) = \tan^{-1}\frac{\omega}{\left|p\right|}.\] Therefore, the phase starts at \(0\) degrees and increases by \(90\) degrees as \(\omega\) gets large. Fig. 15.8 shows the Bode plot and its straight-line approximation when the pole is in the right half-plane. Note that stability and instability are not directly evident from the shapes of the magnitude and phase plots.

Straight-line approximation for a pole in the right half of the complex plane.

Chapter 15 interactive figure

Single pole/zero Bode builder

Choose one first-order factor and move the corner frequency. The plot compares the exact Bode response with the straight-line approximation used for hand sketches.

Interactive Figure 15.I3. Compare exact first-order magnitude and phase with their straight-line approximations.

Magnitude slope
Phase change
Corner value
Guide frequencies

Suppose now that the poles are complex. Let \[H(s)=\frac{\omega_n^2}{s^2+2\zeta\omega_ns+\omega_n^2}.\] In Bode canonical form we have \[\begin{aligned} H(j\omega) &= \frac{1}{\omega_n^2}\frac{\omega_n^2}{\frac{(j\omega)^2}{\omega_n^2} + 2\zeta\omega_n\left(\frac{j\omega}{\omega_n^2}\right) + 1}\\ &= \frac{1}{\left(1-\left(\frac{\omega}{\omega_n}\right)^2\right) + j 2\zeta\left(\frac{\omega}{\omega_n}\right)} \\ &= \frac{1}{\sqrt{\left(1-\frac{\omega^2}{\omega_n^2}\right)^2 + 4\zeta^2\frac{\omega^2}{\omega_n^2}}} e^{-j\tan^{-1}\left(\frac{2\zeta\frac{\omega}{\omega_n}}{1-\frac{\omega^2}{\omega_n^2}}\right)}. \end{aligned}\] Therefore \[\begin{aligned} \left|H(j\omega)\right| &= \frac{1}{\sqrt{\left(1-\frac{\omega^2}{\omega_n^2}\right)^2 + 4\zeta^2\frac{\omega^2}{\omega_n^2}}} \\ \angle H(j\omega) &= -\tan^{-1}\left(\frac{2\zeta\frac{\omega}{\omega_n}}{1-\frac{\omega^2}{\omega_n^2}}\right). \end{aligned}\] When \(\omega \ll \omega_n\) we have that \(20\log_{10}\left|H(j\omega)\right|\approx 20\log_{10}\left|1\right| = 0\) dB. Also, \(\angle H(j\omega)\approx -\tan^{-1}\frac{0}{1}=0\) degrees. Alternatively, when \(\omega \gg \omega_n\) we have \[\begin{aligned} 20\log_{10}\left|H(j\omega)\right| &\approx -20\log \sqrt{\left(\frac{\omega^2}{\omega_n^2}\right)^2 + 4\zeta^2\frac{\omega^2}{\omega_n^2}} \\ &\approx -20\log \sqrt{\left(\frac{\omega^2}{\omega_n^2}\right)^2} \\ &\approx -20\log \left|\frac{\omega}{\omega_n}\right|^2 \\ &= -40\log \left|\frac{\omega}{\omega_n}\right|, \end{aligned}\] which is a straight line that crosses the \(0\) dB axis at \(\omega_n\) with a slope of \(-40\) dB/decade. When \(\omega=\omega_n\) we have \(20\log_{10}\left|H(j\omega)\right| = -20\log_{10}\sqrt{4\zeta^2} = -20\log_{10}\left|2\zeta\right|\). When \(\zeta=0.707=\frac{\sqrt{2}}{2}\), then \(20\log_{10}\left|H(j\omega)\right|=-20\log_{10}1/\sqrt{2} =-3\) dB. For the angle plot, when \(\omega \ll \omega_n\) we have \(\angle H(j\omega)\approx \tan^{-1}\frac{0}{1} = 0\) degrees. When \(\omega \gg \omega_n\) we have \(\angle H(j\omega) \approx \tan^{-1}\left(2\zeta \frac{\omega_n}{\omega}\right)\approx -180\) degrees, and when \(\omega=\omega_n\) we have \(\angle H(j\omega)\approx - \tan^{-1}\frac{2\zeta}{0}=-90\) degrees.

The Bode plots for different values of \(\zeta\) are shown in Fig. 15.9.

The Bode plot for a second-order system for various values of \zeta.

Chapter 15 interactive figure

Second-Order System Bode response

Move the damping ratio and natural frequency for H(s) = ωn2 / (s2 + 2ζωns + ωn2). Low damping creates resonant peaking near ωn.

Interactive Figure 15.I4. Move ζ and ωn to see resonant peaking, phase transition, and -40 dB/dec high-frequency rolloff.

Peak magnitude
Phase at ωn
High-frequency slope

15.1.4 Example

Find the straight-line approximation for the Bode plot of the transfer function \[\tag{15.10} H(s) = \frac{20}{s(s+10)}.\] In Bode canonical form we have \[H(j\omega) = \frac{20}{10}\frac{1}{j\omega(1+j\frac{\omega}{10})}.\] Therefore \begin{gather} \tag{15.11} 20\log_{10}\left|H(j\omega)\right|= \\ 20\log_{10} 2 - 20\log_{10}\left|\omega\right| - 20\log_{10}\sqrt{1+\left(\frac{\omega}{10}\right)^2}. \end{gather} Note that the term due to the pole at zero, namely \(-20\log_{10}\left|\omega\right|\) is a straight line that intercepts the \(0\) dB line at \(\omega=1\), and has a slope of \(-20\) dB per decade. Therefore, the Bode plot for magnitude will be the graphical addition of three terms:

  1. A constant term at \(20\log_{10} 2 = 2\) dB,

  2. A straight line with slope of \(-20\) dB/decade, passing through the \(0\) dB line at \(\omega=1\), and

  3. A first order low-pass filter with a cut-off frequency at \(\omega=10\).

Similarly, the phase is given by \[\begin{aligned} \angle H(j\omega) &= \angle 2 - \angle j\omega - \angle (1+j\frac{\omega}{10}) \\ &= 0 - \tan^{-1}\frac{\omega}{0} - \tan^{-1}\frac{\omega}{10} \\ &= - 90^\circ - \tan^{-1}\frac{\omega}{10}. \end{aligned}\] The straight-line approximation and the Bode plot generated by MATLAB are shown in Fig. 15.10.

Bode plot for the transfer function given in Equation 15.10.

Chapter 15 interactive figure

Build Example 15.1.4 term by term

Turn on each factor in H(s) = 20/(s(s+10)) to see how the straight-line magnitude and phase approximations are built by graphical addition. The exact full response stays visible as a reference.

15.1.5 Example

Find the straight-line approximation for the Bode plot of the transfer function \[\tag{15.12} H(s) = \frac{8000(s+1)(s+10)}{(s+2)(s+20)(s+200)}.\] In Bode canonical form we have \[\begin{aligned} H(j\omega) &= \frac{8000\cdot 10}{2\cdot 20\cdot 200}\frac{(1+j\omega)(1+j\frac{\omega}{10})} {(1+j\frac{\omega}{2})(1+j\frac{\omega}{20})(1+j\frac{\omega}{200})} \\ &= 10\frac{(1+j\omega)(1+j\frac{\omega}{10})} {(1+j\frac{\omega}{2})(1+j\frac{\omega}{20})(1+j\frac{\omega}{200})}. \end{aligned}\] Therefore \[\begin{gathered} 20\log_{10}\left|H(j\omega)\right|= 20\log_{10} 10 + 20\log_{10}\left|1+j\omega\right| + \\ 20\log_{10}\left|1+j\frac{\omega}{10}\right| -20\log_{10}\left|1+j\frac{\omega}{2}\right| \\ -20\log_{10}\left|1+j\frac{\omega}{20}\right| -20\log_{10}\left|1+j\frac{\omega}{200}\right|. \end{gathered}\] Therefore, the Bode plot for magnitude will be the graphical addition of a constant gain, two zeros, and three poles. Similarly, the phase is given by \[\begin{gathered} \angle H(j\omega) = \angle 10 + \angle (1+j\omega) + \angle (1+j\frac{\omega}{10}) \\ - \angle (1+j\frac{\omega}{2}) - \angle (1+j\frac{\omega}{20}) - \angle (1+j\frac{\omega}{200}). \end{gathered}\] The straight-line approximation and the Bode plot generated by MATLAB are shown in Fig. 15.11.

Bode plot for the transfer function given in Equation 15.12.

Chapter 15 interactive figure

Build worked examples term by term

Use this review figure to build each worked example the same way as Example 15.1.4: choose the factors, predict the final high-frequency behavior, then compare the individual straight-line terms, their cumulative approximation, and the exact full response.

15.2.1 image Example Problem 3.1.18

Draw by hand the Bode plot of the single-link robot arm from torque \(\tilde{\tau}\) to angle \(\tilde{\theta}\) given that the equilibrium angle is \(\theta_e=0\). Use the bode command (from MATLAB or Python) and compare your results.

Design Study A guided exercise

Build the arm Bode plot

Decompose the arm transfer function into gain, integrator, and first-order pole terms.

Bode plot for the single-link robot arm transfer function.

Use the plotted response to connect the gain, integrator, and pole terms to the magnitude slope and phase trend.

Step 1. Bode building blocks

Step 2. Asymptotic slopes

Step 3. Phase trend

Pseudocode

The complete solution includes Bode-plot generation code. Before opening it, outline how you would define the transfer function, compute the frequency response, and plot magnitude and phase.

This prompt is ungraded. It is intended to connect the Bode construction to the implementation code in the complete solution.

15.3 Design Study B. Inverted Pendulum

15.3.1 image Example Problem 3.2.18

(a) Draw by hand the Bode plot of the inner loop transfer function from force \(F\) to angle \(\theta\) for the inverted pendulum. Use the bode command (from MATLAB or Python) and compare your results.

(b) Draw by hand the Bode plot of the outer loop transfer function from angle \(\theta\) to position \(z\) for the inverted pendulum. Use the bode (from MATLAB or Python) command and compare your results.

Design Study B guided exercise

Decompose the pendulum Bode plots

Classify the inner and outer loop transfer-function factors.

Inner-loop pendulum Bode plot.

The inner loop includes both a left-half-plane pole and a right-half-plane pole.

Step 1. Inner-loop factors

Step 2. Outer-loop factors

Step 3. Comparison method

Pseudocode

The complete solution computes separate inner-loop and outer-loop Bode plots. Before opening it, outline each component separately.

These prompts are ungraded. They are intended to connect the derivation to the implementation code in the complete solution.

15.4 Design Study C. Satellite Attitude Control

15.4.1 image Example Problem 3.3.18

(a) Draw by hand the Bode plot of the inner loop transfer function from torque \(\tau\) to angle \(\theta\) for the satellite attitude problem. Use the bode command (from MATLAB or Python) and compare your results.

(b) Draw by hand the Bode plot of the outer loop transfer function from body angle \(\theta\) to panel angle \(\phi\) for the satellite attitude problem. Use the bode command (from Python or MATLAB) and compare your results.

Design Study C guided exercise

Build satellite Bode plots

The inner loop behaves like two integrators; the outer loop contains a lightly damped flexible mode.

Step 1. Inner plant structure

Step 2. Outer plant structure

Step 3. Physical interpretation

15.5 Interactive Frequency-Response Check

Chapter 15 activity

Complex response readout

Move the real and imaginary parts of H(jω). The readout connects rectangular form, magnitude, phase, and dB magnitude, which are the same quantities used to build Bode plots.

Figure 1.5. The sliders move the complex frequency-response vector and change its magnitude and phase.
Rectangular form
Magnitude
Phase
Magnitude in dB

Coding-lab preparation: evaluating a frequency response means substituting s = jw, then computing magnitude, phase, and dB values over a frequency grid.

15.6 Coding Lab: Frequency Response Evaluation

Objective: evaluate a transfer function on the imaginary axis and compute Bode magnitude and phase.

Evaluation criteria: the lab checks complex substitution at s = jw, vectorized array output, magnitude in dB, and phase in degrees.

Figure 15.1 (Interactive). Frequency-response coding lab comparing student and reference Bode calculations.

15.7 Knowledge Check

Q1. Frequency-response substitution

Frequency response is found by evaluating a transfer function at:

Q2. Pole slope

A pole typically changes the high-frequency magnitude slope by:

Q3. Complex magnitude

Enter the magnitude of the complex number 3 + j4.

Show solution

Answer: 5 because sqrt(3^2 + 4^2) = 5.

Q4. dB conversion

Enter 20 log10(0.1) in dB.

Show solution

Answer: -20 dB because log10(0.1) = -1.

Q5. Sinusoidal steady-state output

For stable G(s) = 3/(s + 4) and input u(t) = 2 sin(t), which steady-state output is closest?

Q6. Complex substitution

What substitution converts a transfer function G(s) into its frequency response?

Q7. Net Bode slope

At frequencies well above both break frequencies, what net magnitude-slope change comes from one pole and one zero?

Q8. dB conversion

Which dB value is closest to a magnitude ratio of 0.5?

Q9. Phase-lead interpretation

Which statement best describes the effect of increasing the lead parameter M in a phase-lead block?

15.8 Notes and References

A good introduction to frequency response for linear time-invariant system is [16]. A good overview of the Bode plot and straight-line approximations to the Bode plot is contained in [4] and many other introductory textbooks on feedback control.