【LTspiceで周波数解析】FFT(高速フーリエ変換)について

スポンサーリンク


LTspiceには、「.tran解析(時間軸解析)」によって得られたシミュレーション波形から、周波数解析をするための「FFT(高速フーリエ変換)」機能があります。

この記事では、「FFT(高速フーリエ変換)」機能について

  • LTspiceで「FFT(高速フーリエ変換)」を行う方法
  • 「FFT(高速フーリエ変換)」の設定画面
  • 「FFT(高速フーリエ変換)」の精度を上げる方法

などを図を用いて分かりやすく説明するように心掛けています。ご参考になれば幸いです。

【LTspiceで周波数解析】FFT(高速フーリエ変換)を行う方法

【LTspiceで周波数解析】FFT(高速フーリエ変換)を行う方法01

上図に示しているのは、交流電圧V1(振幅10V、周波数1kHzの正弦波)を「.tran解析」にて10msの時間(区間)を表示させたシミュレーション結果です。

「.tran解析」によって得られたシミュレーション波形において、下記のどちらかを行うことで、「FFT(高速フーリエ変換)」を実行することができます。

「FFT(高速フーリエ変換)」を実行する方法

【LTspiceで周波数解析】FFT(高速フーリエ変換)を行う方法02

  • 波形ウィンドウを右クリックして、[View]→[FFT]をクリックする。
  • 波形ウィンドウをアクティブにして、ツールバーの[View]→[FFT]をクリックする。

[FFT]ボタンをクリックすると、下図に示したような「FFT(高速フーリエ変換)」の設定画面が開きます。FFT(高速フーリエ変換)したい信号名をクリック(複数解析した場合には、ctrlボタンを押しながらクリック)し、OKボタンを押すと、FFT(高速フーリエ変換)の結果が表示されます(後ほど、各設定項目について説明します)。

【LTspiceで周波数解析】FFT(高速フーリエ変換)を行う方法03

周波数1kHzの交流電圧V1をFFT(高速フーリエ変換)しているため、1kHzのレベルが高くなっていることが上図から分かります。

【LTspice】「FFT(高速フーリエ変換)」の設定画面

【LTspice】「FFT(高速フーリエ変換)」の設定画面

上図に「FFT(高速フーリエ変換)」の設定画面を示しています。各設定項目について順番に説明します。

Number of data point samples in time

FFT(高速フーリエ変換)のポイント数です。デフォルトは「218=262,144」になっており、「224=16,777,216」まで指定することができます。指定するポイント数は2nの形でなくても構いません。

このポイント数によって、FFT(高速フーリエ変換)の最大周波数fMAXが決まります。

FFT(高速フーリエ変換)の最大周波数

FFT(高速フーリエ変換)の最大周波数fMAXは次式で決まります。

\begin{eqnarray}
f_{MAX}=\frac{\mbox{ポイント数}}{\mbox{データ解析に用いる時間(区間)}}×\frac{1}{2}
\end{eqnarray}

先ほど、周波数1kHzの交流電圧V1をFFT(高速フーリエ変換)した結果を示しましたが、このシミュレーションでは、

  • データ解析に用いる時間(区間):「.tranコマンド」で指定した10ms
  • ポイント数:デフォルトの「218=262,144」

であるため、FFT(高速フーリエ変換)の最大周波数fMAXは以下の値となります。

\begin{eqnarray}
f_{MAX}&=&\frac{\mbox{ポイント数}}{\mbox{データ解析に用いる時間(区間)}}×\frac{1}{2}\\
\\
&=&\frac{262144}{10×10^{-3}}×\frac{1}{2}\\
\\
&=&13.107{\mathrm{[MHz]}}
\end{eqnarray}

FFT(高速フーリエ変換)の最小周波数

ちなみに、FFT(高速フーリエ変換)の最小周波数fMINはデータ解析に用いる時間(区間)の逆数となり、次式で決まります。

\begin{eqnarray}
f_{MIN}=\frac{1}{\mbox{データ解析に用いる時間(区間)}}
\end{eqnarray}

先ほど、周波数1kHzの交流電圧V1をFFT(高速フーリエ変換)した結果を示しましたが、このシミュレーションでは、

  • データ解析に用いる時間(区間):「.tranコマンド」で指定した10ms

であるため、FFT(高速フーリエ変換)の最小周波数fMINは以下の値となります。

\begin{eqnarray}
f_{MIN}&=&\frac{1}{\mbox{データ解析に用いる時間(区間)}}\\
\\
&=&\frac{1}{10×10^{-3}}\\
\\
&=&100{\mathrm{[Hz]}}
\end{eqnarray}

FFT(高速フーリエ変換)の結果を再度下図に示します。シミュレーション結果を見ると、「fMIN=100[Hz]」から始まり、「fMAX=13.107[MHz]」で終わっていることが分かります。

【LTspiceで周波数解析】最小周波数と最大周波数

Quadratic interpolate uncompressed data

チェックを入れると、2次のデータ補間に非圧縮データを使うようになります。

この設定は「.tran解析」でのデータを非圧縮にする(「.options plotwinsize=0」を記載するとデータを非圧縮にできる)と有効になります。

Time range to include

データ解析に用いる時間(区間)を指定します。

  • Use Extent of Simulation Data
  • →シミュレーション結果の全体をデータ解析に用います。

  • Use current zoom Extent
  • →ズームした波形をデータ解析に用います。

  • Specify a time range
  • →チェックを入れると、左にある枠が有効になります。左にある枠で設定した時間(区間)をデータ解析に使用します。

Binomial Smoothing done before FFT and windowing

FFT(高速フーリエ変換)をする前に、二項分布型フィルタ(Binomial Filter)によるスムージングの回数を指定します。元のデータのノイズ成分を無視したい時に使用します。

Windowing(Periodic and normalized to unit area)

FFT(高速フーリエ変換)の窓関数を指定することができます。

「Windowing Function」に窓関数のリストがあります。窓関数を指定すると、リストの下にある設定項目が窓関数に応じて変化します。

【LTspiceで周波数解析】FFT(高速フーリエ変換)の精度を上げる方法

【LTspiceで周波数解析】FFT(高速フーリエ変換)の精度を上げる方法

上図に示すように、この記事の最初に示したシミュレーション結果には、下記のOPTIONSコマンドを設定しています。

  • .options plotwinsize=0
  • →データの圧縮を無効にするコマンド

  • .options numdgt=15
  • →データの桁数を6桁から15桁にするコマンド

また、「.tranコマンド」では「.tran 0 10m 100n」と記載することで、Maximum Timestepを100nsに設定しています。

FFT(高速フーリエ変換)では、下記の設定をしないと、精度が高くなりません。

  • .options plotwinsize=0の記載
  • .options numdgt=15の記載
  • Maximum Timestepの設定

では実際に、上記の設定有無でシミュレーション結果がどのように変化するのかを見てみましょう。

「FFT(高速フーリエ変換)」のシミュレーション結果01

「FFT(高速フーリエ変換)」のシミュレーション結果01

上図に示しているのは、

  • .options plotwinsize=0の記載:未設定
  • .options numdgt=15の記載:未設定
  • Maximum Timestepの設定:未設定

の時のシミュレーション結果です。何も設定していない時には、100Hzでのレベルが-120dB程度になっています。

「FFT(高速フーリエ変換)」のシミュレーション結果02

「FFT(高速フーリエ変換)」のシミュレーション結果02

上図に示しているのは、

  • .options plotwinsize=0の記載:設定
  • .options numdgt=15の記載:未設定
  • Maximum Timestepの設定:未設定

の時のシミュレーション結果です。100Hzでのレベルが-120dB程度であり、先ほどのシミュレーション結果とそこまで変わりませんが、波形が少し綺麗になりましたね。

「FFT(高速フーリエ変換)」のシミュレーション結果03

「FFT(高速フーリエ変換)」のシミュレーション結果03

上図に示しているのは、

  • .options plotwinsize=0の記載:設定
  • .options numdgt=15の記載:未設定
  • Maximum Timestepの設定:設定

の時のシミュレーション結果です。「Maximum Timestepの設定」をすると、100Hzでのレベルが-180dB程度になっています。

先ほどは-120dBだったので、かなりレベルが下がりましたね。

「FFT(高速フーリエ変換)」のシミュレーション結果04

「FFT(高速フーリエ変換)」のシミュレーション結果04

上図に示しているのは、

  • .options plotwinsize=0の記載:設定
  • .options numdgt=15の記載:設定
  • Maximum Timestepの設定:設定

の時のシミュレーション結果です。すべての設定をすると、100Hzでのレベルが-300dB程度まで下がりました。

今まで行ったすべてのFFT(高速フーリエ変換)の結果をまとめると下図に示すようになります。

「FFT(高速フーリエ変換)」のシミュレーション結果の比較

今回、FFT(高速フーリエ変換)では、交流電圧V1(振幅10V、周波数1kHzの正弦波)の波形を解析しているのですが、

  • .options plotwinsize=0の記載:設定
  • .options numdgt=15の記載:設定
  • Maximum Timestepの設定:設定

の全てを行うと、1kHz以外のレベルが低下していく(精度が高くなっている)ことが分かります。

あわせて読みたい

.options plotwinsize=0について

シミュレーション回路に記載してる「.options plotwinsize=0」(←「.option plotwinsize=0」のように"option"に"s"がつかなくてもOK)はデータの圧縮を無効にするコマンドです。

.options plotwinsize=0」については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

【LTspice】「.option plotwinsize=0」って何?
【LTspice】「.options plotwinsize=0」って何?

続きを見る

.options numdgt=15について

シミュレーション回路に記載してる「.options numdgt=15」(←「.option numdgt=15」のように"option"に"s"がつかなくてもOK)はデータの桁数を決めるコマンドです。

.options numdgt=15」については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

【LTspice】データの桁数を決定する「numdgt」とは?
【LTspice】データの桁数を決定する「numdgt」とは?

続きを見る

Maximum Timestepについて

Maximum Timestepでは、シミュレーションを実行する時間間隔の最大値を設定しています。

電圧や電流の変化を細かくみたい場合に使用します。信号周波数の1周期の1/10000~1/100を指定するのが経験的にオススメです。

この記事のシミュレーションでは、Maximum Timestepは100nsを設定しています。交流電圧V1(振幅10V、周波数1kHzの正弦波)の1周期は1msなので、1周期の1msに1/10000を掛けると、100nsになります。

Maximum Timestepは小さくすればするほど精度が良くなりますが、シミュレーション時間が長くなるので注意してください。

Maximum Timestep」と「.tran解析」については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

.tran解析の設定項目
【LTspice】.tran解析とは

続きを見る

まとめ

この記事では「FFT(高速フーリエ変換)」機能について、以下の内容を説明しました。

  • LTspiceで「FFT(高速フーリエ変換)」を行う方法
  • 「FFT(高速フーリエ変換)」の設定画面
  • 「FFT(高速フーリエ変換)」の精度を上げる方法

お読み頂きありがとうございました。

当サイトでは電気に関する様々な情報を記載しています。当サイトの全記事一覧は以下のボタンから移動することができます。

全記事一覧

また、記事下に当サイトの人気記事を記載しています。ご参考になれば幸いです。

スポンサーリンク