Python で感度関数、相補感度関数を描く

制御工学で使用される感度関数、相補感度関数を Python で解く方法のメモ。

感度関数は制御対象の伝達関数が変動した場合の出力への影響を示し、相補感度関数はノイズに対する制御量への影響を示します
全ての周波数で感度関数、相補感度関数を同時に小さくはできないので、通常低周波領域で感度関数を小さく、高周波領域で相補感度関数を小さくするように制御系を設計します。(通常目標値は低周波成分を、ノイズは高周波成分を多く含むため)

以下では最適レギュレータを例に感度関数(実線)、相補感度関数(破線)をプロットしています。

# coding: utf-8
import numpy as np
import scipy as sp
import control as ct
from matplotlib import pyplot as plt

A = np.array([[0, 1],
	      [0, -1]])
B = np.array([[0],
	      [1]])
Q = np.diag([2, 1])
R = np.array([[1]])

K, S, E = ct.matlab.lqr(A, B, Q, R)
Abk = A-B.dot(K)
D1 = 1
D2 = 0

# mag1^(-1) : 感度関数
mag1, phase1, freq1 = ct.matlab.bode(ct.ss(A, B, K, D1), dB=True, Hz=True, Plot=False)
# mag2 : 相補感度関数
mag2, phase2, freq2 = ct.matlab.bode(ct.ss(Abk, B, K, D2), dB=True, Hz=True, Plot=False)

plt.figure()
plt.semilogx(freq1, -mag1, freq2, mag2, "--")
plt.ylabel("Gain[dB]")
plt.xlabel("Frequency[Hz]")
plt.show()

15072501.png

コメント

Comments powered by Disqus
書籍更新情報
2016-10-21
Pythonによる科学技術計算 基礎編
PDF版の販売を開始しました。
販売ページはこちら

2016-09-09
Pythonによる科学技術計算 基礎編
1.2版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
Kindle ストア、Leanpubで販売中です
Pythonによる科学技術計算 基礎編
PDF版の販売はこちら
同人誌
技術書典(2016/6/25)
Emacs/org-modeのPDF作成術
電子版をBOOTHで販売中です
Emacs/org-modeのPDF作成術
Share