生きていくことって結構難しいなと感じることがあるかもしれません。
たくさんやらなければいけないことがあって、プレッシャーを感じながら、
ついつい焦ってしまい、失敗して、結局やり直し。
「忙しい時こそ、焦らない。早くやってもいいけど、焦ってやらない」
ほっとお茶でも飲んで、落ち着いて、やっていきましょう^^
こんにちは、データサイエンティストひろき🐶です。
伝達関数の状態空間表現
さて、
前回こちらのブログで紹介した下図の1自由度振動モデル、
この伝達関数
$$\begin{align*}
G=\frac{x}{y}=\frac{cs+k}{ms^2+cs+k} \
\end{align*}$$
を状態空間表現で記述してみたいと思います。
まず、状態空間表現の基本形は下記2式(状態方程式と観測方程式)でした。
$$ \mathbf{\dot{x}} \begin{align*} &= \end{align*} A \mathbf{x} + B u ・・・状態方程式 $$
$$ y \begin{align*} &= \end{align*} C \mathbf{x} + D u ・・・観測方程式 $$
ちなみに、
$$
\mathbf{x}
\begin{align*}
&=
\end{align*}
\begin{pmatrix}
x \\
\dot{x} \\
\end{pmatrix}
$$
$$
u:入力
$$
とします。
つまり今回は、
- 伝達関数Gから状態空間表現A,B,C,Dを求める方法
を紹介します。
まず状態方程式
$$
\mathbf{\dot{x}}
\begin{align*}
&=
\end{align*}
A
\mathbf{x}
+
B
u
$$
をラプラス変換します。
下記のようにラプラスの演算子sを用いて書くことができます。
$$ s\mathbf{x} \begin{align*} &= \end{align*} A \mathbf{x} + B u $$
$$ s\mathbf{x} -A \mathbf{x} \begin{align*} &= \end{align*} B u $$
$$ (s\mathbf{I} -A) \mathbf{x} \begin{align*} &= \end{align*} B u $$
$$ \mathbf{x} \begin{align*} &= \end{align*} (s\mathbf{I} -A)^{-1} B u $$
これを観測方程式へ代入すると、
$$ y \begin{align*} &= \end{align*} \lbrace \mathbf{C} (s\mathbf{I} -A)^{-1} B +D \rbrace u $$
uが入力、yが出力なので、伝達関数Gは
$$\begin{align*}
G=\mathbf{C}
(s\mathbf{I}
-A)^{-1}
B
+D \
\end{align*}$$
となります。
AとBはこちらの記事で求めた下記を使えることが、
こちらの記事でChatGPTが答えてくれています。
$$
A
\begin{align*}
&=
\end{align*}
\begin{pmatrix}
0 & 1 \\
-k/m & -c/m \\
\end{pmatrix}$$
$$
B
\begin{align*}
&=
\end{align*}
\begin{pmatrix}
0 \\
1/m \\
\end{pmatrix}$$
また、伝達関数がプロパー(分子の次数が分母の次数より小さいこと)の時はD=0となることがわかっている。
残るはC。元々の数理モデルから求めた伝達関数G
$$\begin{align*}
G=\frac{x}{y}=\frac{cs+k}{ms^2+cs+k} \
\end{align*}$$
と比較して、Cを求めていきます。
つまり、
$$
C
\begin{align*}
&=
\end{align*}
\begin{pmatrix}
c1 & c2 \\
\end{pmatrix}$$
と置いて、上記A~Dを下記Gへ代入して
$$\begin{align*}
G=\mathbf{C}
(s\mathbf{I}
-A)^{-1}
B
+D \
\end{align*}$$
伝達関数
$$\begin{align*}
G=\frac{x}{y}=\frac{cs+k}{ms^2+cs+k} \
\end{align*}$$
と係数を比較します。実際に紙と鉛筆で手計算してみてください。
すると、
$$
C
\begin{align*}
&=
\end{align*}
\begin{pmatrix}
k & c \\
\end{pmatrix}$$
となります。
そしてMatlabには、
伝達関数から状態空間表現の係数(A,B,C,D)を求める便利な関数 “tf2ss”
たるものがあります。
まじ便利です。
詳しい使い方はこちらを参照ください。
もし詳しい式変形が知りたければ、
ChatGPTに「matlabのtf2ssのアルゴリズムは?」と聞いてみてください。
きっと答えがかえってくるはず。
それでは今日はこの辺で
最後まで読んでくださりありがとうございました。
Love&Respect♡
Hiroki🐶