· 

Pythonで回路計算(1)

Pythonで回路網計算します。シミュレーションみたいな感じですが、シミュレーションっていうほどではない。

scikit_rfというライブラリがまぁまぁいけてます。ドキュメントもまぁまぁです。世の中には善意もあふれている!

ではインストールです。VSCodeを起動して、「表示」->「ターミナル」で、

 

<Pythonのディレクトリ>/scripts/pip3 install scikit-rf proxy=http://<proxyサーバ>:<ポート番号>/

 

インストールログによると、

six, pyparsing, pytz, python-dateutil, pillow, packaging, numpy, kiwisolver, fonttools, et-xmlfile, cycler, xlwt, scipy, pandas, openpyxl, networkx, matplotlib, scikit-rf

がインストールされたようです。

 まずは、ここのLCフィルタを試しにやってみます。

import skrf as rf
import matplotlib.pyplot as plt


freq = rf.Frequency(start=0.1, stop=10, unit='GHz', npoints=1001)
#tl_media = rf.DefinedGammaZ0(freq, z0=50, gamma=1j*freq.w/rf.c)
tl_media = rf.DefinedGammaZ0(freq, z0=50)
C1 = tl_media.capacitor(3.222e-12, name='C1')
C2 = tl_media.capacitor(82.25e-15, name='C2')
C3 = tl_media.capacitor(3.222e-12, name='C3')
L2 = tl_media.inductor(8.893e-9, name='L2')
RL = tl_media.resistor(50, name='RL')
gnd = rf.Circuit.Ground(freq, name='gnd')
port1 = rf.Circuit.Port(freq, name='port1', z0=50)
port2 = rf.Circuit.Port(freq, name='port2', z0=50)

cnx = [
    [(port1, 0), (C1, 0), (L2, 0), (C2, 0)],
    [(L2, 1), (C2, 1), (C3, 0), (port2, 0)],
    [(gnd, 0), (C1, 1), (C3, 1)],
]
cir = rf.Circuit(cnx)
ntw = cir.network

fig=plt.figure()
fig.add_subplot(2,1,1)
ntw.plot_s_db(m=0, n=0, lw=2, logx=True)
fig.add_subplot(2,1,2)
ntw.plot_s_db(m=1, n=0, lw=2, logx=True)
fig.tight_layout()
plt.show()

WebページはたぶんAnaconda用なのでplot周りを変更しました。で、

いい感じです。表示をさらにいじってみます。

fig=plt.figure()
fig.add_subplot(2,2,1)
ntw.plot_s_smith(m=0, n=0, lw=2)
fig.add_subplot(2,2,2)
ntw.plot_s_db(m=1, n=0, lw=2, logx=True)
fig.add_subplot(2,2,3)
ntw.plot_s_db(m=0, n=1, lw=2, logx=True)
fig.add_subplot(2,2,4)
ntw.plot_s_smith(m=1, n=1, lw=2)
fig.tight_layout()
plt.show()

いい感じです。

こういうのがすでに誰かが作ってあるってのがPythonの魅力ですよねー。実はPythonで回路計算機を自力で作成しようかなと思っていたのですが、調べてみたら良さそうなのがあったってことで。

 

かなり昔、とあるデバイスのシミュレータを作るのに、自前で回路計算機を作って組み込んだことがあります。C++使ってました。回路網の記述を解釈して節点解析法(S・NAPっていうシミュレータを作っているMELって会社のHPにいい資料があったのですが、今は公開されていないです)で解くってやつです。今見てもなかなかの大作です(だいぶ無駄も多そうだけど)。若いころ情報が少なくて苦労した経験が思い出されます、、、

今は学ぼうと思えば比較的簡単に情報が入手出来てホントいいよなーって思う。今の若い人は恵まれている。やる気さえあれば。

そういう当方は、やる気が出ない不治の病にかかったので、いったんこのあたりで筆をおくにゃ~かんきち。