【回路×Python】線形回路解析パッケージLcapyを使えるようにする方法


Lcapyとは?

Lcapyは線形回路を解析するためのPythonパッケージで、記号解析にsympyを利用しています。

公式ドキュメント:Welcome to Lcapy’s documentation!

Lcapyは回路の数値解析と記号解析が行えます。数値解析はSPICE系シミュレータが出力する結果のように、解析結果が数値で表されるものです。記号解析は回路の伝達関数やインピーダンスを記号(数式)で表すというものです。この機能を使うことで、面倒な回路方程式を解く作業をコンピュータにやらせることが出来ます。

Lcapyには教科書品質の回路図をコマンドベースで描くといった機能もあります1

Lcapyに関する情報は2020/10/31/時点でQiitaでは0件でした。Googleで調べてみても、日本語圏はおろか、英語圏でも情報がほとんどヒットしませんでした。

Lcapyで何が出来るのか?は公式ドキュメントのoverviewを読んでいただくのが良いかと思います。Lcapyに関する私の記事を最後に紹介しますが、Lcapyの機能を知るのに役立つかもしれません。

この記事ではLcapy使えるようにする方法を説明します。Lcapyユーザーが増え、有益な情報交換が出来るようになれば幸いです。

使い方

公式ドキュメントのInstallationによると以下のpythonパッケージが必要とありますので、これらをpipを使ってインストールしましょう。
lcapy, sympy, numpy, matplotlib, networkx

回路図を作成する機能(schematic drawing)を使わないのであれば、インストールはこれで終わりです。

動かしてみる

インストールが終わったらJupyter-notebook上で動作確認をしてみましょう。
Lcapyでは様々な方法で回路の伝達関数を求めることが出来ますが、その一例を以下に示します。

伝達関数を求める回路:

伝達関数を記号的に求める
from lcapy import Circuit, s
cct = Circuit("""
Vi 1 0 
R 1 2 RF
C 2 0 CF
""")

H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H

実行結果は以下の通りで、回路の伝達関数を記号的に解析することが出来ました。
$$\frac{1}{C_{F} R_{F} s + 1}$$

回路図を作成できるようにする

回路図の作成機能(schematic drawing)を使いたい場合はTeXをインストールする必要があります。

公式ドキュメントのInstallationによると、pdflatex、circuitikz、ghostscriptが必要とあります。調べたところpdflatexはW32TeXで配布されており2、circuitikzパッケージもそのW32TeXには標準でインストールされているようです3W32TeXインストーラを使えばghostscriptもついでにインストールできるようです。つまりW32TeXだけインストールすれば必要なものが全て揃います。
W32TeXはTeXインストーラ 3を利用することで簡単にインストールできます。

動かしてみる

回路図を描く
from lcapy import Circuit
cct = Circuit("""
Vi 1 0_1 step; down
R 1 2; right, size=1.5
C 2 0; down
W 0_1 0; right
W 0 0_2; right, size=0.5
P1 2_2 0_2; down
W 2 2_2;right, size=0.5""")

cct.draw()

実行結果は以下の通りで、綺麗な回路図が描画されています。

なお、上記コードは以下から引用しました:
https://github.com/mph-/lcapy/tree/master/doc/examples/notebooks

回路の記号解析について

数年間ほど回路設計関連の業務に携わってきましたが、回路の記号解析が出来るツールの存在を最近まで知りませんでした。

回路解析の種類とツールについては以下の博士論文が参考になります。
電気回路の振る舞いの数理とそのシンボリック計算について

論文の表1.1では回路の記号解析ツールとして、SAPWINSCAMWASABIが紹介されていますが、これら以外にもQSapecNGCircuitNAVIといったツールがあるようです。自分のやりたいことに合わせて最適なツールを選択するのが良いと思います。

私の場合、やりたいことは以下の通りでした
1)回路の伝達関数を記号的に解析する
2)得られた伝達関数を展開する(極を求めるなど)
3)得られた伝達関数を数値計算する
4)数値計算した結果を綺麗なグラフで表示する。
これらを行うためには、Python(Lcapy)が最適な選択でした。

Lcapyについては以下の記事を書いていますので、そちらも是非ご覧ください。
【回路×Python】Lcapyを使って回路の伝達関数を求める方法
【回路×Python】Lcapyを使って伝達関数を展開・計算する方法


  1. LcapyではダイオードやMOSといった非線形デバイスを解析することは出来ませんが、回路図として描くことは可能です。 

  2. https://konoyonohana.blog.fc2.com/blog-entry-19.html 

  3. https://konoyonohana.blog.fc2.com/blog-entry-479.html