フーリエ変換を実行する.fourコマンドについて、構文と使い方を説明した後に、シミュレーション例を紹介します。
『.fourコマンド』とは
.fourコマンドとは、『.tran解析(Transient解析,トランジェント解析,過渡解析とも呼ばれている)』の後にフーリエ変換を実行するコマンドです。波形に含まれる周波数成分の大きさ、波形の歪率などを求めることができます。
『.fourコマンド』の実行結果は「.logファイル」に記述されています。「.logファイル」を見るためには、回路図ウィンドウまたは波形ウィンドウ上で右クリックを押し、[View]→[SPICE Error Log]をクリックします(ショートカットキーは「Ctrl」+「L」です)。
補足
『.fourコマンド』の構文
『.fourコマンド』の構文は以下のようになっています。
- <frequency>>
- [Nharmonics]
- [Nperiod]
- <data trace1> [<data trace2>…]
基本波の周波数を指定します。例えば、1kと記述すると基本波が1kHz、2次高調波が2kHz…、N次高調波がNkHzとなります。
基本波を含めて何次の高調波までを解析するかを整数で記述します。例えば、3と記述すると、3次高調波まで解析を行います。何も記述しない場合には、デフォルト値である9となります。
シミュレーション終了時間からさかのぼり、何周期分をフーリエ変換するかを整数で記述します。例えば、3と記述すると、シミュレーション終了時間から3周期分手前のデータから解析を行います。何も記述しない場合には、シミュレーション終了時間から1周期分手前のデータから解析を行います。また、「-1」と入力するとtran解析の全てのデータ範囲で解析を行います。
測定したいノードを記述します。
構文において「<」と「>」で囲まれたパラメータは省略できません。また、「[」と「]」で囲まれたパラメータは省略できます。
『.fourコマンド』のコマンド例
.four 1kHz 5 3 V(OUT)
→フーリエ変換するノード電圧はV(OUT)であり、基本波は1kHz、5次高調波まで解析、シミュレーション終了時間から3周期分をフーリエ変換した時の解析結果を「.logファイル」に表示する。
『.fourコマンド』使用時のポイント
『.fourコマンド』の解析結果の精度を高めるために、以下の3点を行うことをオススメします(この記事の最後に以下の3点を行わなかった場合のシミュレーション結果を表示しているので比較してみてください)。
1.『.options plotwinsize =0』を記述する
シミュレーション結果のデータ圧縮をオフにするために、SPICE Directiveで『.options plotwinsize =0』を記述します。このコマンドを記述しない場合、シミュレーション波形の計算ポイントが自動的に減らされてしまうため、フーリエ変換の精度が悪化します。
シミュレーション波形の計算ポイントは波形ウィンドウを右クリックして、[View]→[Mark Data Points]を有効にすると、波形上にポイントが点で表示されるようになります。
2.Maximum Timestepを1波長の1/10000以下にする
Maximum Timestep は『.tran解析』において、シミュレーションを実行する時間間隔の最大値を設定する項目です。『.tran解析』のシミュレーション実行間隔を十分に細かくしないと、波形を正確にフーリエ変換することができません。そのため、最大の精度を得るために、Maximum Timestepを1波長の1/10000以下にします。例えば、1波長が1kHzの場合には周期が1msとなるので、その1/10000である100nsを入力します。
補足
- Maximum Timestepを小さい値にすると、精度は良くなりますが、シミュレーション時間が長くなります。
- 参考書やネットでは1波長の1/100や1/1000を入力している場合もあります。高精度を重視するなら、1波長の1/10000程度にすることをオススメします。
3.『.options numdgt=7』を記述する
『options numdgt=7』は内部演算を倍精度にするオプションです。デフォルトは6であり、6より大きくすると倍精度となります。
『.fourコマンド』を使用したシミュレーション
上図は振幅10V、周波数1kHzの正弦波を出力する電圧源V1の出力をノードOUTにしたシミュレーション回路図です。この回路に対して、以下の『.fourコマンド』を記述してシミュレーションを実行します。
→フーリエ変換するノード電圧はV(OUT)であり、基本波は1kHz、5次高調波まで解析、シミュレーション終了時間から2周期分をフーリエ変換した時の解析結果を「.logファイル」に表示する。
なお、シミュレーションにおいて、
.options plotwinsize =0
.options numdgt=7
を記述することでシミュレーション精度を高めています。
シミュレーション結果を以下に示します(波形ウィンドウ上で右クリックを押し、[View]→[FFT]をクリックすることで、FFTグラフも表示しています。)。
回路図ウィンドウまたは波形ウィンドウ上で右クリックを押し、[View]→[SPICE Error Log]を押すと以下の画面が表示されます。
シミュレーション結果の「Frequency[Hz]」は基本波1kHz(1×10^3Hz)~5次高調波である5kHzが表示されています。その各周波数成分が「Fourier Component」の箇所であり、基本波(1次高調波)が10になっていることが確認できます。1kHzの正弦波のフーリエ変換よりシミュレーション結果が正しいことが分かります。「Normalized Component」は基本波を基準(1)とした時の高調波成分を表示しています。
【補足】『.fourコマンド』の解析結果の精度を高めるコマンドの有無による結果の違い
これから
- 『.options plotwinsize =0』の記述する
- Maximum Timestepを1波長の1/10000以下にする
- 『.options numdgt=7』を記述する
のコマンド有無による結果の違いを観測してみます。
なお、シミュレーションでは、波形ウィンドウを右クリックして、[View]→[Mark Data Points]をクリックすることで、波形上にポイントを表示しています。全てのコマンドを記述していない場合、以下のシミュレーション結果となります。シミュレーション波形の計算ポイントの間隔が広いことが確認できます。
『.options plotwinsize =0』だけを有効にした場合には以下のようになります。計算ポイントの間隔は少し狭くなりましたが、まだポイント間に間隔があります。
Maximum Timestepを1波長の1/10000以下にした場合には以下のようになります。計算ポイントの間隔が密になっていることが確認できます。
『.options numdgt=7』を有効にした場合には以下のグラフとなります。FFTグラフの結果がかなり変わりました。
ここで、各コマンド有無による結果の違いを下表に示します。コマンドを有効にするほど、基本波(1次高調波)が1に近づいていることが確認できます。