public FFT() {
		real = new float[FFT_N];
		imag = new float[FFT_N];
		sintable = new float[FFT_N >> 1];
		costable = new float[FFT_N >> 1];
		bitReverse = new int[FFT_N];

		int i, j, k, reve;
		for (i = 0; i < FFT_N; i++) {
			k = i;
			for (j = 0, reve = 0; j != FFT_N_LOG; j++) {
				reve <<= 1;
				reve |= (k & 1);
				k >>>= 1;
			}
			bitReverse[i] = reve;
		}

		double theta, dt = 2 * 3.14159265358979323846 / FFT_N;
		for (i = (FFT_N >> 1) - 1; i > 0; i--) {
			theta = i * dt;
			costable[i] = (float) Math.cos(theta);
			sintable[i] = (float) Math.sin(theta);
		}
	}