
はじめに
今回は、下期令和4年機械問15に出題された二次遅れ系のボード線図について,pythonで描写することが出来るか試みる。
前半はcontrolというライブラリなしで行い、後半はありで行う。なので、ボード線図の書き方をしっかり把握したい方は前半のプログラムを参照されたい。
問題提起
R=1[Ω],L=0.01[H],C=100[uF]とした時のボード線図を描写するという問題である。
が伝達関数となるので、周波数伝達関数は以下の通りである。
ゆえに、ゲインは以下の様になる。
また、位相は以下の様になる。
pythonを用いたプログラミング
プログラムコードを以下の場合に分けてそれぞれ示す。
ゲインの場合
import math import numpy as np import matplotlib.pyplot as plt import japanize_matplotlib #パラメーターの詳細 R=1 L=0.01 C=100*10**(-6) omega = np.arange(0.0, 10**6, 0.1) #ゲインの定義 g=20*np.log10(((1-L*C*omega**2)**2+(omega*C*R)**2)**(-0.5)) #横軸対数表示 plt.gca().set_xscale('log') plt.plot(omega, g, 'b-') plt.title('ボード線図') plt.xlabel('ω[rad/s]') plt.ylabel('ゲイン[dB]') plt.show()
折れ点角周波数付近でゲインが上昇しているのが分かる。
位相の場合
import math import numpy as np import matplotlib.pyplot as plt import japanize_matplotlib #パラメーターの詳細 R=1 L=0.01 C=100*10**(-6) omega = np.arange(0.0, 10**6, 0.1) #位相角の定義 theta = np.degrees(np.arctan((omega*C*R/(1-omega**2*L*C))**(-1))) #横軸対数表示 plt.gca().set_xscale('log') plt.plot(omega, theta, 'b-') plt.title('ボード線図') plt.xlabel('ω[rad/s]') plt.ylabel('位相[度]') plt.show()
ライブラリを用いた場合
from control.matlab import * from matplotlib import pyplot as plt R=1 L=0.01 C=100*10**(-6) # 伝達関数のパラメータ num = [ 1] # 分子の係数 den = [L*C, C*R, 1] # 分母の係数 sys = tf(num, den) # 伝達関数モデルの作成 bode(sys) # ボード線図のプロット plt.show()
まとめ
今回は、下期令和4年機械問15に出題された二次遅れ系のボード線図についてPythonを用いたプログラミングで描写することが出来るかどうかを考察した。また、伝達関数から周波数伝達関数に変換する手間や対数プロットにする手間はあるがライブラリ無しでも実装自体は出来るということが分かった。今回の様に、基礎確認でなければ、ライブラリはどんどん使用していくべきだろう。
コメント