FFT
FFT
*;
import java.util.Arrays;
@Override
public String toString() {
return String.format("%f + %fi", real, imag);
}
}
// combine
Complex[] y = new Complex[n];
for (int k = 0; k < n/2; k++) {
double kth = -2 * k * Math.PI / n;
Complex wk = new Complex(Math.cos(kth), Math.sin(kth));
y[k] = q[k].plus(wk.times(r[k]));
y[k + n/2] = q[k].minus(wk.times(r[k]));
}
return y;
}
if (n == 1) {
output[rev] = input[start];
return;
}
fftOpt(start, lvl+1);
fftOpt(start+skip, lvl+1);
// write the first result to the position of locAdd and second at locMult.
public void writePlusMinus(float reScl, float imScl, int locMult, int locAdd) {
float multRe = output2[locMult]; float multIm = input2[locMult+1];
float temp1 = reScl*multRe-imScl*multIm; float temp2 =
reScl*multIm+imScl*multRe;
reScl = temp1; imScl = temp2;
}
if (n == 1) {
output2[rev << 1] = input2[start << 1];
output2[1+(rev << 1)] = input2[1 + (start << 1)];
return;
}
fftOpt2(start, lvl+1);
fftOpt2(start+skip, lvl+1);
FFT.N = 8;
FFT.LOGN = 3;
for(Complex cpx: output) {
System.out.println(cpx);
}
System.out.println();
FFT.output = new Complex[8];
fftOpt2(0, 0);
for(Complex cpx: FFT.output) {
System.out.println(cpx);
}
}
}