package fouriertransform;
public class DiscreteFourierTransform {
public static double[] transform(int nData, double[] data, boolean inverse){
double[] trData = new double[2 * nData];
double omega = 2. * Math.PI / nData;
if (inverse){
omega = -omega;
}
for (int i = 0; i < nData; i++ ){
for (int j = 0; j < nData; j++ ){
trData[2 * i] += data[2* j] * Math.cos(omega * i * j) + data[2* j + 1] * Math.sin(omega * i * j);
trData[2 * i + 1] += data[2* j] * Math.cos(omega * i * j) - data[2* j + 1] * Math.sin(omega * i * j);
}
}
if (!inverse){
for (int i = 0; i < nData; i++ ){
trData[2 * i] /= (double)nData;
trData[2 * i + 1] /= (double)nData;
}
}
return trData;
}
}