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年7月13日 Pythonの高周波ライブラリscikit-rfがv1.8.0に、SamsungがGalaxy Z Fold7など発表→QualcommがSnapdragon 8 Eliteが使われていると発表、NGMNが基地局アンテナの推奨事項をまとめる、STMicroとMetalenzがメタサーフェス光学のライセンス締結(2025.07.14)
- Interface2025年8月号Pythonで体験!はじめての暗号を買った。上杉暗号からRSA、AES、DHなど、特に楕円曲線暗号についてはコードも実際に動かすところまで詳しくかかれていた。耐量子暗号や聞いたことなかったY-00暗号や関数型暗号も記載。(2025.07.10)
- 高周波・RFニュース 2025年7月8日 NordicとSercommのセルラーIoTモジュール、iFixitがFairphone 6を分解、スコアは10/10、RCR wireless newsのウェビナー2件(6GとIndustry4.0)、SEMCOが高耐圧C0G MLCCを車載急速充電に提案(2025.07.09)
- 高周波・RFニュース 2025年7月2日 5G Americasが6Gに向けセンシングと通信ホワイトペーパー発行、KYOCERA AVXが3dBハイブリッドカプラ発表、TDKが車載薄膜インダクタ発表、Nordicが1次電池向けPMIC発表、ローデ・シュワルツの6GとAI/ML解説記事(2025.07.02)
- 高周波・RFニュース 2025年6月30日 QualcommがAIを用いた6Rxアンテナ解説、Next G Allianceと日本のXGMFが5G,6Gで協力、5G Americasが25Q1で5G加入者増加と発表、TechInsigtsがHuawei Pura 80 Pro+分解、Qorvoが5-7GHzのWi-Fi 7 FEM発表(2025.06.30)
« 一般化ナベアツ数Nab_n(x) (xまでのうちnの倍数とnがつく数のときだけアホになる)のナベアツ数階段をPythonでプロットする。この前やった加藤文元さんのナベアツ数の図示の続き。どれもNab_n(x)/x→1? | トップページ | Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その2,行列とベクトルのまま計算する場合。非可換シンボル(commutative=False)を使う。 »
コメント