next up previous
Next: 2.2.2 どうやって jfftpack.jar を作るか Up: 2.2 Java 用の FFT Previous: 2.2 Java 用の FFT

2.2.1 jfftpack を試す

P. N. Swartztaruber の FFTPACK は古くからあるライブラリィだが、 Java への移植である jfftpack (by Baoshe Zhang baoshe.zhang@uleth.ca) がある。

オリジナルの FFTPACK については、次の解説を書いた。

jfftpack をコンパイルして作った jfftpack.jar を載せておく。

次のテスト・プログラムを試そう。

/*
 * testfft.java
 *   FFTPACK のJava版 jfftpack (http://www.netlib.org/fftpack/ で入手可)
 *   http://www.math.meiji.ac.jp/~mk/labo/2007/jfftpack.jar に載せる
 *
 *   jfftpack.jar の位置を環境変数 CLASSPATH で指定する。
 *   (1) Windows では set CLASSPATH=%CLASSPATH%;どこか\jfftpack.jar
 *   (2) Linux では export CLASSPATH=$CLASSPATH:どこか/jfftpack.jar
 *
 *   あるいは java コマンドの -classpath オプションを使う。
 *     java -classpath どこか/jfftpack.jar:. testfft
 *
 */

import ca.uol.aig.fftpack.*;

public class testfft {
    public static void main(String args[]) {
	int i,n;
	double dx,x;
	double [] a;
	n = 1024;
	a = new double [n];
	RealDoubleFFT myfft = new RealDoubleFFT(n);
	// n等分点上の関数値を求める
	dx = 2 * Math.PI / n;
	for (i = 0; i < n; i++) {
	    x = i * dx;
	    a[i] = 1+2*Math.cos(x)+3*Math.sin(x)+4*Math.cos(2*x);
	}
	// 離散Fourier変換
	myfft.ft(a);
	// Fourier係数を求める
	a[0] /= n;
	for (i = 1; i < n; i++)
	    a[i] = a[i] / (n / 2.0);
	// 1,2,3,4が現われますやら…
	for (i = 0; i < 10; i++)
	    System.out.printf("i=%d: %f\n", i, Math.abs(a[i]));
	//	    System.out.println("i=" + i + ":" + Math.abs(a[i]));
    }
}

  1. testjfftpack-unix.tar.gz, -- Knoppix 用
  2. testjfftpack-win.lzh -- Windows 用

Knoppix の場合
knoppix$ tar xzf testjfftpack-unix.tar.gz
knoppix$ cd testjfftpack-unix
knoppix$ export CLASSPATH=/home/knoppix/testjfftpack-unix/jfftpack.jar:.
あるいは export CLASSPATH=`pwd`:.
knoppix$ javac testfft.java
knoppix$ java testfft
i=0: 1.000000
i=1: 2.000000
i=2: 3.000000
i=3: 4.000000
i=4: 0.000000
i=5: 0.000000
i=6: 0.000000
i=7: 0.000000
i=8: 0.000000
i=9: 0.000000
knoppix$

注 (2008/2/6 分かったこと): CLASSPATH を設定する 以外に、javac や java に -classpath jfftpack.jar:. と 指定するという手もある (短縮形 -cp jfftpack.jar:. も使える)。


next up previous
Next: 2.2.2 どうやって jfftpack.jar を作るか Up: 2.2 Java 用の FFT Previous: 2.2 Java 用の FFT
Masashi Katsurada
平成20年2月15日