Excelマクロ(VBA)を用いてフーリエ変換を行います。
Excelアドインにはフーリエ変換の機能があります
(使い方はExcelアドインソフトウエア / フーリエ解析を参照ください)。
しかしながら、最大4096点までしか使用できないこと、出力が複素数形式であることなど、使い勝手にやや難点があります。
そこで、これらの問題を解消したExcelソフトウエアを作成いたしました。
無料で公開していますので、ご活用いただければと思います。
なお、本ソフトウエアを使用したことによって発生した損害等は一切補償いたしません。
特に本ソフトウエアを流用する場合は、動作確認を十分に行ったうえでご利用ください。
「ファイルが破損しているため開くことができません」コメントが出る場合はこちらで対応願います。
1.機能
当サイトで公開している
フーリエ変換ソフトウエア(Fourier_rev**.xlsm)では、次の計算が実行可能です。
- DFT:データ点数を気にせずフーリエ変換を実施
- FFT:データ点数に2のべき乗個の制約を与えたフーリエ変換を実施
- IFFT:フーリエ逆変換をFFTで実施
(1)DFTと(2)FFTの違いは処理速度で、(2)はデータ点数に制約が与えられる分、計算時間は大幅に向上します。
1024点を超えるとその差ははっきりしてきます。
データ点数が多い場合、(1)DFTの使用はお勧めできません。
また、データ点数の制約として1048576(2の20乗)点以上の計算はできないよう、マクロで制限をかけています。
理由は、Excelのセル行番号最大が1048576(2の20乗)行であるため、制約点数以上とすると出力できなくなるためです。
マクロを修正できるようでしたらその制約は簡単に解除できますので、ご自由に調整していただいて構いません
(
3.2節を参照ください)。
2.1.ソフトウエアに合わせて使用
2.1.1.DFT(離散フーリエ変換)
離散フーリエ変換を行います。
<手順1>
DFTシートを開きます。
<手順2>
フーリエ変換したいデータを該当箇所に貼り付けます(データ点数は何点でも構いません)。
<手順3>
出力点数、窓関数を指定します。ただし、出力点数は必ずしも入力しなくても構いません。
実際の出力は出力点数+1個になります(定数項=周波数0も出力するためです)。
また、計算点数は以下で決まります。
(1)出力点数指定なしの場合
データ数が偶数の場合は入力データ点数で、データ数が奇数の場合は入力データの最後に0を付与した分で計算されます。
この場合出力点数は計算点数の半分+1個となります(例えば128点で計算した場合は65点分出力されます)。
(2)出力点数×2<データ点数の場合
計算点数は出力点数の2倍になります。計算点数よりも多い入力データはカットして計算されます。
(3)出力点数×2>データ点数の場合
計算点数は出力点数の2倍になりますが、データ点数不足部分は0が付与され計算されます。
<手順4>
“DFT計算ボタン”をクリックすると、周波数応答データが出力され、グラフが表示されます。
出力は、周波数、振幅スペクトル、位相スペクトルの3つになります。
なお、
各振幅スペクトル値÷(出力点数 / 2)
とすることで、各周波数における振幅値が求まります(ただし、データ点数が少ない場合は実際の振幅値からずれます)。
2.1.2.FFT(高速フーリエ変換)
通常周波数解析を行う場合はFFTの使用をお勧めします(データ数が多くなると計算時間が大幅に異なります)。
<手順1>
FFTシートを開きます。
<手順2>
フーリエ変換したいデータを該当箇所に貼り付けます(データ点数は何点でも構いません)。
<手順3>
出力点数、窓関数を指定します。実際の出力は出力点数+1個になります(定数項=周波数0も出力するためです)。
また、計算点数は以下で決まります。
(1)出力点数×2<データ点数の場合
計算点数は出力点数の2倍になります。計算点数よりも多い入力データはカットして計算されます。
(2)出力点数×2>データ点数の場合
計算点数は出力点数の2倍ですが、データ点数不足分は0が付与され計算されます。
<手順4>
“FFT計算ボタン”をクリックすると、周波数応答データが出力され、グラフが表示されます。
出力は、周波数、振幅スペクトル、位相スペクトルの3つになります。
なお、
各振幅スペクトル値÷(出力点数 / 2)
とすることで、各周波数における振幅値が求まります(ただし、データ点数が少ない場合は実際の振幅値からずれます)。
2.1.3.IFFT(高速フーリエ逆変換)
FFTで求めた周波数応答データを逆変換することで、元の(時系列)データに戻すことができます。
<手順1>
IFFTシートを開きます。
<手順2>
フーリエ逆変換したいデータを、振幅スペクトルと位相スペクトルにして、該当箇所に貼り付けます。
データ点数は何点でも構いませんが、2のべき乗+1個が最適です。
2のべき乗+1個ではない場合、データ点数をすべて含む2のべき乗の最小値で計算を行います。
不足分の振幅スペクトルおよび位相スペクトルは0として計算されます。
<手順3>
“IFFT計算ボタン”をクリックすると時系列データが出力され、グラフが表示されます。