【Excel】高速フーリエ変換(FFT)のマクロ(VBA)

Excelには標準でフーリエ解析の機能を備えていますが、解析用のデータを変更してもフーリエ変換の結果は自動更新してくれないので、少し使い勝手の悪い物になっています。

 

そこで、エクセルのセルの部分にSUMAVERAGE のような関数と同じように動くマクロ(ユーザー定義関数)で作成したフーリエ変換の関数(Fourier)を作成しました。

ユーザー定義関数で作成しているため、解析用のデータを変更すると、フーリエ変換の結果も自動で変更されます。

 

 

ファイルのダウンロードはこちら↓より

fourier_transform_rev3.zip

(Excel2016推奨、それ以前だとファイルを開いた直後はフーリエ変換の値が0になるようです。)

 

使用方法

このファイルはマクロを使用しているため、ファイルを起動するとセキュリティ警告が表示さている場合は、コンテンツの有効化をクリックしてください。

 

まず、フーリエ変換の結果の出力先のセルを縦方向にデータ個数と同じ分だけ選択し、

= Fourier( データのセル)

と入力し、Enterではなく、Ctrl + Shift + Enterキー を入力します。

これで、フーリエ変換の結果が複素数で表示されます。

 

複素数はいらないから、絶対値だけ欲しいという場合にはFourierAbs関数を使って下さい。(使い方は同じです。)

 

フーリエ変換の結果は標準のフーリエ解析の結果と同じになるようにしていますが、10の-15乗ぐらいの誤差が出ています。

 

フーリエ変換の結果の複素数の大きさを計算するには、Excelの標準関数の IMABS関数 で求まります。

 

同様に位相は IMARGUMENT関数 で求まります。

 

このマクロのポイント!

  • 窓関数に対応
    = Fourier( データのセル, “Hamming”)
    のように入力することで、入力データに対して窓関数を通します。
    対応している窓関数の名前は
    ハミング Hamming
    ハニング Hanning
    ブラックマン Blackman

    の3つ。

  • FFT/DFTの自動切換え
    マクロ処理内部で、フーリエ変換するデータ個数が2のN乗個の場合はFFT、それ以外の場合はDFTとなり、データの個数が2のN乗個の制限はありません。

 

逆フーリエ変換を追加

2018.6.19追記

逆フーリエ変換に対応したIFourier関数を追加しました。

逆フーリエ変換の計算は別シートの逆フーリエ変換のシートを参照ください。

 

使用方法については、普通のフーリエ変換の時と同じように

= IFourier( データのセル)

と入力し、Enterではなく、Ctrl + Shift + Enterキー を入力します。

ただし、逆フーリエ変換なので、データのセルの部分は、基本的に複素数となります。

 

逆フーリエ変換の結果はこちら↓です。

 

上の絵を見ても分かるように、虚数成分の10の-15乗程度の誤差が入ってしまっているので、複素数の実部だけを取得するIMREAL関数で実部を取得すると、ほぼフーリエ変換の時に用いたデータに戻っていることが確認できるかと思います。

 

 

フーリエ変換へ戻る