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)を使う。 »
「学問・資格」カテゴリの記事
- Qwen3.6-35B-A3Bが発表され、Ollamaでも使える。そこで電子レンジの動作原理(2.45GHzは水分子の共振周波数でない)と隕石が大気圏突入で燃える原理(摩擦熱ではない)を聞くと、誘電緩和と断熱圧縮について正しく答えられた。今までのローカルLLMで一番賢い回答と思う。(2026.04.17)
- 高周波・RFニュース 2026年4月17日 atisの3GPP Rel.20ウェビナー動画公開、MWCバルセロナ2026でのGSMA Device Enablement Summit資料公開、ハリファ大学が無線周波数AI言語モデルRF-GPT発表、レドームの解説など(2026.04.17)
- ExcelのOfficeスクリプト(TypeScript)で数値計算ライブラリmath.jsを使う(1) Officeスクリプトは外部API呼び出せるし、math.jsは RESTful APIで呼び出せることがわかった。まずは選択したセルのデータを読み、行列演算。LU分解で一次方程式を解き、逆行列と行列式を求める。(2026.04.17)
- 高周波・RFニュース 2026年4月16日 AmazonがGlobalstarを買収、GSMAが日本のデジタル化をレポート、Mini-Circuitsがケーブルアセンブリを動画で解説、Kymetaが米国海軍研究局と衛星通信で契約、PerasoがドローンIFF向け60GHzモジュール出荷、SEMCOが1500V耐圧MLCC発表(2026.04.16)
- 高周波・RFニュース 2026年4月15日 Microwave Journalはアンプと発振器特集、Signal Integrity Journalは100GHz越えのインターコネクトのAIを使うHFSSモデル化、ローデ・シュワルツが潜水艦通信をUDT2026で発表、Xiaomi Poco X8 Pro分解動画、atisの5Gポリシーレポート(2026.04.15)
« 一般化ナベアツ数Nab_n(x) (xまでのうちnの倍数とnがつく数のときだけアホになる)のナベアツ数階段をPythonでプロットする。この前やった加藤文元さんのナベアツ数の図示の続き。どれもNab_n(x)/x→1? | トップページ | Python+Sympy(数式処理)でZパラメータ(インピーダンス行列)からSパラメータに変換する。その2,行列とベクトルのまま計算する場合。非可換シンボル(commutative=False)を使う。 »




コメント