大浦版FFTのJava移植
フリーソフトとして公開されているC言語のFFTライブラリである大浦版FFTのうち、個人的に使用目的のあった実離散 Fourier 変換(rdft)をJavaに移植してみた。
Javaで使用できるFFTライブラリとして、Apache Commons Mathematics
Libraryやjfftpackがあるが、Apache Commons Mathematics
Libraryは、性能が悪く実用的でない。jfftpackは、性能は良いがライセンスがGPLのため使用範囲が限られる。大浦版FFTは、性能は
jfftpackと同等で、フリーソフトで自由に使用できるが、Java言語用のソースは公開されていない。そこで、大浦版FFTのJava言語への移植
を試みた。
ポインタ演算を添字の演算に変換するだけで、比較的簡単に移植が可能であった。
Javaソースコード(FFT4g.java)は、こちらから。パッケージ名は適宜修正してくださ
い。
使用方法は、
FFT4g fft = new FFT4g(1024);
のように、データ長を引数としてインスタンスを作成し、
double[] a = new double[1024];
// aに変換元の値を格納
・・・
fft.rdft(1, a);
のようにして使う。
第一引数は、1の場合Fourier 変換で、-1にするとFourier
逆変換となる。
詳細は、元のfft4g.cのコメントに記
載されているので、そちらを参照。