図12.2と図12.3のプロット

In [1]:
#計算とグラフプロットに必要なモジュールの読み込み
import numpy as np
from control import matlab
from matplotlib import pyplot as plt
from scipy import arange 
from scipy import signal
In [2]:
#1次遅れ系のパラメータを与える
K = 1 #K=1
T1 = 10 #G_1(s)の時定数の値
T2 = 0.2 #G_2(s)の時定数の値

#伝達関数の分子・分母多項式を与える
num = [K] #分子多項式
den1 = [T1, 1] #G_1(s)の分母多項式
den2 = [T2, 1] #G_{2}(s)の分母多項式
den3 = [T1*T2, T1+T2, 1] #G(s)の分母多項式

#伝達関数表現を与える
sys1 = signal.lti(num, den1) #G_1(s)の伝達関数表現(signal.ltiの場合)
sys2 = signal.lti(num, den2) #G_2(s)の伝達関数表現(signal.ltiの場合)
In [3]:
#角周波数の範囲を指定
w = np.logspace(-2, 2, 1000) #対数的に等間隔なベクトルの生成(10^{-2}から10^{2}で1000点)

# 図12.2, 12.3のゲインと位相の計算
w1, gain1, phase1 = signal.bode(sys1, w) #ゲインと位相
w2, gain2, phase2 = signal.bode(sys2, w) #ゲインと位相

# G_1(s)のゲイン線図のプロット
plt.subplot(2, 1, 1) #複数の図を並べるためのコマンド.2行1列の1行目という意味
plt.semilogx(w1, gain1) #ゲイン線図をプロット
plt.xlim([0.01,100])#横軸(角周波数)の範囲の指定
plt.ylim([-80,0]) #縦軸の範囲の指定
plt.grid(color='gray') #罫線を灰色で表示
plt.ylabel("Gain[dB]") #縦軸のラベル表示
plt.title('Bode diagram of G_1(s)') #タイトルの表示

# G_1(s)の位相線図のプロット
plt.subplot(2, 1, 2) #複数の図を並べるためのコマンド.2行1列の2行目という意味
plt.semilogx(w1, phase1) #位相線図をプロット
plt.xlim([0.01,100]) #横軸の範囲の指定
plt.ylim([-180,0]) #縦軸の範囲の指定
plt.yticks([-180,-135,-90,-45,0]) #縦軸の目盛りの値の設定
plt.grid(color='gray') #罫線を灰色で表示
plt.xlabel("w[rad/s]") #横軸の表示
plt.ylabel("Phase[deg]") #縦軸の表示

plt.show() #グラフの表示

# G_2(s)のゲイン線図のプロット
plt.subplot(2, 1, 1) #複数の図を並べるためのコマンド.2行1列の1行目という意味
plt.semilogx(w2, gain2) #ゲイン線図をプロット
plt.xlim([0.01,100])#横軸(角周波数)の範囲の指定
plt.ylim([-80,0]) #縦軸の範囲の指定
plt.grid(color='gray') #罫線を灰色で表示
plt.ylabel("Gain[dB]") #縦軸のラベル表示
plt.title('Bode diagram of G_2(s)') #タイトルの表示

# G_2(s)の位相線図のプロット
plt.subplot(2, 1, 2) #複数の図を並べるためのコマンド.2行1列の2行目という意味
plt.semilogx(w2, phase2) #位相線図をプロット
plt.xlim([0.01,100]) #横軸の範囲の指定
plt.ylim([-180,0]) #縦軸の範囲の指定
plt.yticks([-180,-135,-90,-45,0]) #縦軸の目盛りの値の設定
plt.grid(color='gray') #罫線を灰色で表示
plt.xlabel("w[rad/s]") #横軸の表示
plt.ylabel("Phase[deg]") #縦軸の表示

plt.show() #グラフの表示

図12.4のプロット

In [4]:
# 図12.4のボード線図の計算とプロット
sys3 = signal.lti(num, den3) #伝達関数表現(signal.ltiの場合)
[w3, gain3, phase3] = signal.bode(sys3, w) #ゲインと位相の計算

# ゲイン線図のプロット
plt.subplot(2, 1, 1) #複数の図を並べるためのコマンド.2行1列の1行目という意味
plt.semilogx(w3, gain3) #ゲイン線図をプロット
plt.xlim([0.01,100])#横軸(角周波数)の範囲の指定
plt.ylim([-80,0]) #縦軸の範囲の指定
plt.grid(color='gray') #罫線を灰色で表示
plt.ylabel("Gain[dB]") #縦軸のラベル表示
plt.title('Bode diagram of G(s)') #タイトルの表示

# 位相線図のプロット
plt.subplot(2, 1, 2) #複数の図を並べるためのコマンド.2行1列の2行目という意味
plt.semilogx(w3, phase3) #位相線図をプロット
plt.xlim([0.01,100]) #横軸の範囲の指定
plt.ylim([-180,0]) #縦軸の範囲の指定
plt.yticks([-180,-135,-90,-45,0]) #縦軸の目盛りの値の設定
plt.grid(color='gray') #罫線を灰色で表示
plt.xlabel("w[rad/s]") #横軸の表示
plt.ylabel("Phase[deg]") #縦軸の表示
plt.show() #グラフの表示