import control
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = (5, 5)
s = control.tf([1, 0], [0, 1])
$ G(s) = s$
$|G(j \omega) |$ evaluated at $\omega = 1$
$G(j \omega) = j \omega$
$ evaluated at $\omega = 1$
G(j) = j
|j| = 1 = 0 dB
angel(j) = 90 deg
G_D = s
control.bode(G_D, dB=True);
G_D
log10(|G(j omega)) = 1
10log10(|G(j omega)) = 101 |G(j omega) = 10
$ G(s) = \dfrac{1}{s}$
G_I = 1/s
control.bode(G_I, dB=True);
G_I
$ G(s) = \dfrac{s + \omega}{\omega}$
G_FZ = (s+1)/1
control.bode(G_FZ, dB=True);
G_FZ
$ G(s) = \dfrac{\omega}{s + \omega}$
G_FP = 1/(s+1)
control.bode(G_FP, dB=True);
G_FP
$G(s) = \dfrac{\omega}{s^2 + 2 \zeta \omega s + \omega_n^2}$
$\zeta >= 1$
Factor into two first order poles.
zeta = 10
wn = 1
G_SR = 1/(s**2 + 2*zeta*wn*s + wn**2)
control.bode(G_SR, dB=True);
print('roots', np.roots([1, 2*zeta*wn, wn**2]))
G_SR
roots [-19.94987437 -0.05012563]
$G(s) = \dfrac{\omega_n}{s^2 + 2 \zeta \omega_n s + \omega_n^2}$
$\zeta < 1$
zeta = 0.1
wn = 1
G_SR = 1/(s**2 + 2*zeta*wn*s + wn**2)
G_damp = [1/(s**2 + 2*zeta*wn*s + wn**2) for zeta in np.arange(0.01, 0.9, 0.2)]
control.bode(G_damp, dB=True, omega=np.logspace(-2, 2, 1000));
G_SR
20 *log10(mag) = 30
10**(30/20)
31.622776601683793
20 *np.log10(1/100)
-40.0
$G(s) = \dfrac{1}{s + 1}$
vs.
$G(s) = \dfrac{1}{s - 1}$
control.bode([1/(s+1), 1/(s-1)], dB=True);
ax = plt.gca()
$G(s) = s + 1$
vs.
$G(s) = s - 1$
control.bode([(s+1), (s-1)], dB=True);
control.bode([1/(s+1), -1/(s+1)], dB=True);
Zeros:
factor | corner freq. (rad/s) | phase (deg) | slope (dB/dec) |
---|---|---|---|
$s$ | 0 | +90 | +20 |
$(s+\omega)$ | $\omega$ | +90 | +20 |
$(s-\omega)$ | $\omega$ | -90 | +20 |
$(s^2 + 2\zeta \omega_n s + \omega_n^2)$ | $\omega_n$ | +180 | +40 |
Poles:
factor | corner freq. (rad/s) | phase (deg) | slope (dB/dec) |
---|---|---|---|
$1/s$ | 0 | -90 | -20 |
$1/(s+\omega)$ | $\omega$ | -90 | -20 |
$1/(s-\omega)$ | $\omega$ | +90 | -20 |
$1/(s^2 + 2\zeta \omega_n s + \omega_n^2)$ | $\omega_n$ | -180 | -40 |
$G(s) = \dfrac{-1}{(s-1)(s-2)}$
$|G(0)| = |-1/2| = 1/2 \approx -6 dB$
$\angle G(0) = \angle -1/2 = -180 deg$
factor | corner freq. (rad/s) | phase (deg) | slope (dB/dec) |
---|---|---|---|
$1/(s-1)$ | 1 | +90 | -20 |
$1/(s-2)$ | 2 | +90 | -20 |
Notice phase contribution of the pole is now positive, since it is an unstable pole.
import control
s = control.tf([1, 0], [0, 1])
control.bode(-1/((s-1)*(s-2)), dB=True);