Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その1、成分で書く場合
Sympyの使い方を勉強中です。何かよく知っている事例で試せないかな?ということで、
Zパラメータ(Z行列、インピーダンス行列)をSパラメータ(S行列)に変換してみよう。とりあえず2ポートで。
Zパラメータはポート1,2の電流(I1, I2)と電圧(V1,V2)を使って
[V1] = [Z11 Z12] [I1]
[V2] [Z21 Z22] [I2]
とかける。Sパラメータはポート1、2の入射波(a1,a2)と反射波(b1,b2)を使って
[b1] = [S11 S12] [a1]
[b2] [S21 S22] [a2]
とかける。ここで
V1=√Zo (a1 + b1), V2 = √Zo (a2 + b2)
I1=(a1 - b1)/√Zo, I2 = (a2 - b2)/√Zo
の関係がある。ここまでの情報からSympyに取り込む。collectが大活躍で簡略化してくれる。
やってること:subsでi,vにa,bを入れる。
solveでbについて解く。collectを使って簡略化する(simplifyが全然だめだったので)
係数を求めるのにどうも有理数ではcoeffが効かない?っぽいので、subsで片側を0にして求める。
こんな感じ:
from sympy import *
init_printing()
#Sパラメータ, Zパラメータの変数定義
var('S11,S12,S21,S22')
var('Z11,Z12,Z21,Z22')
var('a1,a2,b1,b2')
var('i1,i2,v1,v2')
S = Matrix([[S11,S12],[S21,S22]])
Z = Matrix([[Z11,Z12],[Z21,Z22]])
a=Matrix([[a1],[a2]])
b=Matrix([[b1],[b2]])
i=Matrix([[i1],[i2]])
v=Matrix([[v1],[v2]])
#特性インピーダンスZo
Zo = Symbol('Zo')
#Zパラメータと電流・電圧の関係
expr = v - Z*i
#Zパラメータの電流、電圧を進行波a, 反射波bで書き直す
expr2 =expr.subs([(i1,(a1 - b1) / sqrt(Zo)), (i2,(a2 - b2) / sqrt(Zo)), (v1, (a1 + b1) * sqrt(Zo)),(v2,(a2 + b2) * sqrt(Zo))])
#反射波bに関して解く
Sconvert = solve(expr2, [b1,b2])
#係数ごとに簡略化する。
Sconvert1 = collect(Sconvert[b1],[a1,a2,Zo])
Sconvert2 = collect(Sconvert[b2],[a1,a2,Zo])
Sconvert11 = collect(Sconvert1.subs(a2,0)/a1,Zo)
Sconvert12 = collect(Sconvert1.subs(a1,0)/a2,Zo)
Sconvert21 = collect(Sconvert2.subs(a2,0)/a1,Zo)
Sconvert22 = collect(Sconvert2.subs(a1,0)/a2,Zo)
#最終的な結果
Sconvert=Matrix([[Sconvert11,Sconvert12],[Sconvert21,Sconvert22]])
display(Sconvert)
結果はこんな感じ。
最終結果を拡大すると、
と望む結果が得られた。
とはいえ、成分で書くのはイマイチ、、、行列のまま計算したい。ということで(続く)。
« 一般化ナベアツ数Nab_n(x) (xまでのうちnの倍数とnがつく数のときだけアホになる)のナベアツ数階段をPythonでプロットする。この前やった加藤文元さんのナベアツ数の図示の続き。どれもNab_n(x)/x→1? | トップページ | Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その2,行列とベクトルのまま計算する場合。非可換シンボル(commutative=False)を使う。 »
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年1月13日 IEEE Microwave Magazineの特集はニューラルネットワークとマイクロ波、Siversがミリ波ビームフォーマー開発を受注、バイデン・ハリス政権が ワイヤレス革命に1億 1,700 万ドル、HoneywellとNXPが航空機技術で提携(2025.01.13)
- UnityでVisual C#用の数値計算ライブラリMath.NET numericsを使う(1) まずはNuGetForUnityを使ってインストール。2Dゲーム画面に連立方程式を解いた結果を表示。(2025.01.14)
- 高周波・RFニュース 2025年1月9日 CES2025に合わせて各社プレスリリース、特にQualcomm、NVIDIA、INTELが大量。SEMCOのC0G MLCC (1210 inch, 22nF, 1000V)解説、TIのAI搭載60GHz車内レーダ、MarvellのCPO、Qorvoの車載UWB SoC、TDKのセンサがAI白杖に採用(2025.01.09)
- NHK パンサー尾形さんの笑わない数学 微分・積分 スペシャルがもうすぐ始まる。これから見てリアルタイムでポストしたのでそのスレッドを残す。(2024.12.29)
« 一般化ナベアツ数Nab_n(x) (xまでのうちnの倍数とnがつく数のときだけアホになる)のナベアツ数階段をPythonでプロットする。この前やった加藤文元さんのナベアツ数の図示の続き。どれもNab_n(x)/x→1? | トップページ | Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その2,行列とベクトルのまま計算する場合。非可換シンボル(commutative=False)を使う。 »
コメント