【python-control】ゲイン余裕と位相余裕の計算

Python用制御工学モジュール「python-control」でシステムのゲイン余裕・位相余裕を求める方法ついて紹介します。

ゲイン余裕・位相余裕とは

ゲイン余裕とは、ボード線図を描いたときに、位相が-180度のときゲインが0dBから何dBあるかを示したものです。
位相余裕とは、ボード線図を描いたときに、ゲインが0dBのとき,位相が-180度から何度あるかを示したものです。
python-controlの「control.margin(sys)」メソッドを用いると、Matlabのmargin関数のようにシステムのゲイン余裕と位相余裕を計算できます。
※python-controlはMatlab風ライブラリなので、Matlabの資料が役に立ちます

-|参考文献
1|【制御理論】ゲイン余裕と位相余裕
2|python-controlドキュメント:marginメソッドの使い方
3|Matlabドキュメント:margin関数の使い方

ソースコード

以下の伝達関数のナイキスト線図を描くサンプルプログラムです。

(1) \begin{eqnarray*} G(S)=\frac{2s^2+5s+1}{ s^2+2s+3} \end{eqnarray*}

from control.matlab import *
from matplotlib import pyplot as plt
    
def main():
  # 伝達関数のパラメータ
  num = [2, 5, 1]     # 分子の係数
  den = [1, 2, 3]     # 分母の係数
  sys = tf(num, den)  # 伝達関数モデルの作成
  print(margin(sys))  # ゲイン余裕・位相余裕の計算


if __name__ == "__main__":
  main()

実行結果

(None, 240.0, 0.57735026918962584, None)

※240.0[度]が位相余裕、0.57735026918962584[dB]がゲイン余裕です。

関連記事