· 

Pythonで数式処理(2)

2ポートSパラデータのGNDをGND以外につないだ3ポートSパラデータはどんな式で表すことができるのかSymPyで計算してみる。(この興味を解決するためにmaxima使おうとしたけどSymPyを発見して流されたというストーリーです)

で、まずはSymPyを使って2ポートSパラをYパラにしてみる(S2Y)。

難しいことは、ここ(TDKさんの「Sパラメータによる電子部品の評価」)を参照。

まずもってS2Yはこう表せます。

\[ \hat Y=\frac{I-S}{I+S} \tag{1} \]
$S_{org}$ってのが与えられた2ポートSパラデータだとして、 \[ S_{org}=\begin{pmatrix} S_{org11} & S_{org12} \\ S_{org21} & S_{org22} \end{pmatrix} \tag{2} \]

ってことにする。

ではJupyterセルにこう入力して計算させる。

 

from sympy import *

from sympy.abc import *

S_org11, S_org12, S_org21, S_org22 = symbols('S_org11 S_org12 S_org21 S_org22')

S_org = Matrix([[S_org11, S_org12],[S_org21, S_org22]])

I_2=eye(2)

Y_org=(I_2-S_org)*((I_2+S_org)**(-1))

Y_org=simplify(Y_org)

Y_org

結果は、こうなります。

\[ \displaystyle \left(\begin{matrix}\frac{S_{org12} S_{org21} - \left(S_{org11} - 1\right) \left(S_{org22} + 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1} & - \frac{2 S_{org12}}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1}\\- \frac{2 S_{org21}}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1} & \frac{S_{org12} S_{org21} - \left(S_{org11} + 1\right) \left(S_{org22} - 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1}\end{matrix}\right) \]

すごいねSymPy。が、しかし、複雑だわ。先が思いやられる。

これを3ポートに拡張するには、Pythonで回路計算(8)によると、

\[ \begin{pmatrix} I_{1} \\ I_{2} \\ I_{3} \end{pmatrix} = \begin{pmatrix} Y_{11} & Y_{12} & -(Y_{11}+Y_{12}) \\ Y_{21} & Y_{22} & -(Y_{21}+Y_{22}) \\ -(Y_{11}+Y_{21}) & -(Y_{12}+Y_{22}) & Y_{11}+Y_{12}+Y_{21}+Y_{22} \end{pmatrix} \begin{pmatrix} V_{1new} \\ V_{2new} \\ V_{3new} \end{pmatrix} \tag{3} \]

なので、次のセルに

 

Y_org11=Y_org[0,0]

Y_org12=Y_org[0,1]

Y_org21=Y_org[1,0]

Y_org22=Y_org[1,1]

 

Y_11=Y_org11

Y_12=Y_org12

Y_13=-(Y_org11+Y_org12)

Y_21=Y_org21

Y_22=Y_org22

Y_23=-(Y_org21+Y_org22)

Y_31=-(Y_org11+Y_org21)

Y_32=-(Y_org12+Y_org22)

Y_33=Y_org11+Y_org12+Y_org21+Y_org22

Y=Matrix([[Y_11,Y_12,Y_13],[Y_21,Y_22,Y_23],[Y_31,Y_32,Y_33]])

Y=simplify(Y)

Y

 

とすると、

\[ \displaystyle \left(\begin{matrix}\frac{S_{org12} S_{org21} - \left(S_{org11} - 1\right) \left(S_{org22} + 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1} & - \frac{2 S_{org12}}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1} & \frac{- S_{org12} S_{org21} + 2 S_{org12} + \left(S_{org11} - 1\right) \left(S_{org22} + 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1}\\- \frac{2 S_{org21}}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1} & \frac{S_{org12} S_{org21} - \left(S_{org11} + 1\right) \left(S_{org22} - 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1} & \frac{- S_{org12} S_{org21} + 2 S_{org21} + \left(S_{org11} + 1\right) \left(S_{org22} - 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1}\\\frac{- S_{org12} S_{org21} + 2 S_{org21} + \left(S_{org11} - 1\right) \left(S_{org22} + 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1} & \frac{- S_{org12} S_{org21} + 2 S_{org12} + \left(S_{org11} + 1\right) \left(S_{org22} - 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1} & \frac{2 \left(- S_{org11} S_{org22} + S_{org12} S_{org21} - S_{org12} - S_{org21} + 1\right)}{S_{org11} S_{org22} + S_{org11} - S_{org12} S_{org21} + S_{org22} + 1}\end{matrix}\right) \]

で、Y2Sは、こう

\[ S=\frac{I-\hat Y}{I+\hat Y} \tag{4} \]

なので、次のセルに

 

I_3=eye(3)

S=(I_3-Y)*((I_3+Y)**(-1))

S=simplify(S)

S

 

とすると、

\[ \displaystyle \left(\begin{matrix}\frac{S_{org11} S_{org22} - 2 S_{org11} - S_{org12} S_{org21} + S_{org12} + S_{org21} - 1}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{- S_{org11} S_{org22} + S_{org11} + S_{org12} S_{org21} - 2 S_{org12} + S_{org22} - 1}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{2 \left(S_{org11} + S_{org12} - 1\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4}\\\frac{- S_{org11} S_{org22} + S_{org11} + S_{org12} S_{org21} - 2 S_{org21} + S_{org22} - 1}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{S_{org11} S_{org22} - S_{org12} S_{org21} + S_{org12} + S_{org21} - 2 S_{org22} - 1}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{2 \left(S_{org21} + S_{org22} - 1\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4}\\\frac{2 \left(S_{org11} + S_{org21} - 1\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{2 \left(S_{org12} + S_{org22} - 1\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & - \frac{S_{org11} + S_{org12} + S_{org21} + S_{org22}}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4}\end{matrix}\right) \]

さすがにヘビーだったのか1.8秒もかかった。

もうちょっと何とかならんのかなーって手で計算して、

\[ \displaystyle \left( \begin{matrix} \frac{\left(S_{org22}-2\right)S_{org11} -\left(1- S_{org12}\right)\left(1- S_{org21}\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{\left(S_{org21}-2\right)S_{org12} -\left(1- S_{org11}\right)\left(1- S_{org22}\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{2 \left(S_{org11} + S_{org12} - 1\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4}\\ \frac{\left(S_{org12}-2\right)S_{org21} -\left(1- S_{org11}\right)\left(1- S_{org22}\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{\left(S_{org11}-2\right)S_{org22} -\left(1- S_{org12}\right)\left(1- S_{org21}\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{2 \left(S_{org21} + S_{org22} - 1\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4}\\ \frac{2 \left(S_{org11} + S_{org21} - 1\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & \frac{2 \left(S_{org12} + S_{org22} - 1\right)}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} & - \frac{S_{org11} + S_{org12} + S_{org21} + S_{org22}}{S_{org11} + S_{org12} + S_{org21} + S_{org22} - 4} \end{matrix} \right) \]

まぁまぁきれいになった。

scikit_rfで、s2pを読み込んだ後、3ポートのネットワークを生成して上記内容のSパラを代入していけばいいことになる。この方法だと、S2YでYパラが存在しなくてエラーになる心配はない。

これを、ポート数によらずに一般化できるともっといいんだけど、そんなスキルはない。いつか考える、、、かもしれない。