やりたいこと
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