大浦版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のコメントに記 載されているので、そちらを参照。