LTspiceは「物理法則」を無視するのか?

LTspiceは「物理法則」を無視するのか?

著者:MTF_Walker

有名なドラマ・シリーズのセリフにもあるように、物理の法則を変えることはできません(Ye cannae change the laws of physics)。筆者はLTspiceのヘビー・ユーザとして、時間があればEngineerZoneのLTspiceのページ(https://ez.analog.com/design-tools-and-calculators/ltspice/)に目を通しています。それによって、何らかの知見やインスピレーションが得られることがあるからです。実際、同ページの投稿の中には非常におもしろいものがあります。その半面、憂慮すべき投稿も散見されます。「LTspiceはオームの法則を無視している」、「LTspiceはキルヒホッフの法則に即していない」、「LTspiceでは信号にノイズが付加される」といった主張を目にすることがあるのです。

「誤解しないでください。それは圧縮されているのです」

図1に示した回路は、単に電流源と抵抗が接続されているだけのものです。非常に単純なものですが、このような回路こそ、扱いには注意が必要です。

Current source and resistor

図1. 単純な回路

この回路に対応するシミュレーション・ファイルは、SimlatorOptions.zipに格納されています。

回路に関する基本的な知識に基づけば、このシミュレーションを実行した結果は、-9VのDCオフセットに20mVピークの正弦波が重畳されるというものになるはずです。しかし、実際の結果は図2のような意味不明なものになります。

Strange Output

図2. シミュレーションによって得られる奇妙な出力

結論から言えば、図2に現れているのは、LTspiceのデータ・ファイル(.rawファイル)に不可逆圧縮が適用されることによって生じるアーティファクトです。これは、JPEG(不可逆)とTIFF(可逆)の関係に似ています。LTspiceでは、デフォルトで圧縮処理が適用されるようになっています。そのため、期待どおりの結果が得られない場合には、圧縮処理をオフにして結果がどう変わるのかを確認することが1つの「秘訣」になります。その設定には、LTspice上で「Tools」→「Control Panel」→「Compression」を選択すると表示されるメニューを使用します。ただし、LTspiceを再起動するとその設定はデフォルトの値にリセットされます。設定が保持されるようにするには、「.options plotwinsize=0」というSPICEディレクティブを使用します。これによって圧縮処理をオフにすれば、想定どおりの結果が得られます(図3)。

Output as Expected

図3. 想定どおりの出力

精度には常にトレードオフが伴います。この例の場合、圧縮の処理をオフにすると、.rawファイルのサイズが7kbから72kbに増大します。図1のような回路であれば、シミュレーションの速度と波形の表示時間は重大な問題にはなりません。しかし、より複雑な回路のシミュレーションでは、圧縮処理をオフにすると、.rawファイルのサイズが非常に大きくなります。その結果、表示にかかる時間が長くなることがあります。そのため、この秘訣は慎重に適用してください。

【秘訣1】奇妙な波形が得られる場合には、「.options plotwinsize=0」を使用して圧縮処理をオフにしてみる

FFTに潜む落とし穴

EngineerZoneには、FFT(Fast Fourier Transform)に関する質問がたくさん寄せられます。実際、FFTにはいくつかの落とし穴があります。ここでは、図4の単純な回路を基に、いくつかの落とし穴を指摘しておきます。

Another Simple Circuit

図4. もう1つの単純な回路

図4の回路に対応するシミュレーション・ファイルは、FFT.zipに格納されています。

このファイルを使用して過渡解析を実行したとします。その結果に対してFFTを適用し、周波数スペクトルを確認したい場合には次のような操作を行います。まず、プロット・ペインをクリックし、「View」→「FFT」を順に選択します。そうすると、ノードの選択メニューが表示されます。その中から「V(output)」を選択し、「OK」をクリックしてください。

Strange Looking FFT

図5. FFTによって得られる奇妙なスペクトル

この例の場合、鋭いピークが1kHzにだけ現れることが想定されます。しかし、図5を見ると、ピークの幅が広く、スペクトルには多くの乱れが生じています。このような結果になる原因の1つは、良好なFFT結果を得るために十分な量の情報(データ数)を取得できていないことにあります。そこで、シミュレーション時間を10ミリ秒から50ミリ秒に変更します。そうすれば、より多くのデータを得ることができます。その上でシミュレーションとFFTを実行すると、図6のような結果が表示されます。ご覧のように、1kHzのポイントに、よりシャープなピークが現れるようになりました。しかし、ノイズ・フロアには小刻みな上下動が現れており、より悪い結果になったようにも感じられます。

Longer Simulation Time

図6. シミュレーション時間を延ばした結果

他にできることは、時間ステップを短くしてデータの数を増やすことです。シミュレーション・コマンドを右クリックすると、図7のようなメニューが開きます。そこで「Maximum Timestep」の値を10ナノ秒に設定します。そうすると、保存されるデータの量が増えるので、シミュレーションが完了するまでの時間が長くなります。

Adjusting the Maximum Timestep

図7. 「Maximum Timestep」の値の設定

シミュレーションが完了したら、再びFFTを実施します。図8に示すように、ノイズ・フロアは低くなりました。しかし、まだ周波数の高い領域にいくつかのスパイクが現れています。その原因は何なのでしょうか。先ほど示した投稿にあったように、LTspiceが純粋な1kHzの正弦波信号に対してノイズを付加しているということなのでしょうか。

FFT With Compression

図8. 「Maximum Timestep」の値を設定した場合のFFT結果

そろそろ直感が働いている方もいらっしゃるのではないでしょうか。つまり、圧縮によるアーティファクトが原因として疑われるということです。そこで、「.options plotwinsize=0」を追加し、圧縮処理をオフにしてみます。そうすると、FFTの結果は図9のようになります。

FFT Without Compression

図9. 圧縮処理をオフにした場合のFFT結果

ご覧のように、かなり見た目はよくなりました。しかし、まだ1kHzの純粋な正弦波のスペクトルとは異なります。そこで、もう1つの秘訣を適用してみることにしましょう。LTspiceは、デフォルトでは単精度の計算を実行します。これについては、倍精度の計算を使うように変更することが可能です。具体的には、「numdgt」オプションに6以上の数を設定します。この秘訣を適用した結果、図10のような結果が得られます。

Using Double-Precision

図10. 倍精度の計算を使用した場合のFFT結果

ご覧のように、ノイズ・フロアの乱れはなくなり、1kHzの純粋な正弦波に対応するスペクトルが得られました。

【秘訣2】FFT結果が奇妙なスペクトルになる場合、「.options numdgt=15」によって倍精度の計算を適用してみる

まとめ

今回は、適切な波形を得るための手段として、シミュレーションの精度を向上させる方法を紹介しました。本稿で紹介した内容を踏まえた上でも、LTspiceは物理法則を無視していると言えるのでしょうか。筆者は、LTspiceは技術者のために問題を解決してくれる非常に便利なツールだと考えています。得られる結果は、あらゆる実用上の目的に対して十分に適切なものになるはずです。