やりたいこと
LTspiceで、複数のパラメータの組み合わせでstepしたい。
背景
複数のパラメータをステップで回したい場合、普通にそれぞれのパラメータに.stepを使用してしまうと、それぞれのパラメータが総当たりとなって、シミュレーションの回数と時間が膨大になってしまいます。
たとえば、
.step param A 1 2
(n=2)
.step param B 3 4
(m=2)
とした場合、シミュレーションは
A=1, B=3
A=2, B=3
A=1, B=4
A=2, B=4
の合計4回実行されてしまいます。(n*m回)
これを、
A=1, B=3
(1つめの値どうし)
A=2, B=4
(2つめの値どうし)
に絞って実行したい。
解決策
.func
コマンドを使います。
.func sel(x, p0, p1) {sub(x==0)*p0 + sub(x==1)*p1}
.param A sel(x, 1, 2)
.param B sel(x, 3, 4)
.step param x list 0 1
.func
コマンドでsel()
関数を定義します。(関数の名前はなんでも良い)
式中のsub()
は、引数が0.5以下なら0
、0.5より大きければ1
を返す関数です。
たとえば、xが0のとき、第一項はx==0
がTrue
(1)なのでsub()
は1
を返し、第二項はx==1
がFalse
(0)なのでsub()
は0
を返します。
それぞれを、引数p0
, p1
と掛けて足すことで、sub()
がTrue
になる項の引数のみが残り、パラメータxの値によって1つの値を抜き出すことができるというわけです。
あとは、A, Bそれぞれの数値を定義し、Xを0→1で.step
させればOK。
パラメータの組み合わせを増やしたければ、関数の引数を増やせば対応可能です。
参考
こちらの動画を参考にさせてもらいました。
伝説のSpice : LTSpiceの使い方 小技その11
https://www.youtube.com/watch?v=sT_qJ-84haQ&feature=youtu.be