LoginSignup
21
33

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-10-31

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では様々な方法で回路の伝達関数を求めることが出来ますが、その一例を以下に示します。

伝達関数を求める回路:
image.png

伝達関数を記号的に求める
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()

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

なお、上記コードは以下から引用しました:
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 

21
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
33