図12.12のプロット

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]:
#G(s)の分子・分母多項式と伝達関数表現を与える
num = [0, 0, 1] #分子多項式
den = [1, 0.3, 1] #分母多項式

#伝達関数表現を与える
sys = matlab.tf(num, den) #伝達関数表現          

図12.13のプロット

In [3]:
#角周波数の範囲を指定
w = np.logspace(-2, 1, 1000) #対数的に等間隔なベクトルの生成(10^{-2}から10^{1}で1000点)

#G(s)のゲインと位相の計算
sys = signal.lti(num, den) #伝達関数表現(signal.ltiの場合)
w, gain, phase = signal.bode(sys, w) #ゲインと位相の計算

# ゲイン線図のプロット
plt.subplot(2, 1, 1) #2つの図を並べるためのコマンド.2行1列の1行目という意味
plt.semilogx(w, gain) #ゲイン線図をプロット
plt.xlim([0.01,10]) #横軸(角周波数)の範囲の指定
plt.ylim([-40,20]) #縦軸の範囲の指定
plt.yticks([-40,-30,-20,-10,0,10,20])#縦軸の目盛りの値の設定
plt.grid(color='gray') #罫線を灰色で表示
#plt.xlabel("w[rad/s]") #横軸のラベル表示
plt.ylabel("Gain[dB]") #縦軸のラベル表示

# 位相線図のプロット
plt.subplot(2, 1, 2) #2つの図を並べるためのコマンド.2行1列の2行目という意味
plt.semilogx(w, phase) #位相線図をプロット
plt.xlim([0.01,10]) #横軸の範囲の指定
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() #グラフの表示