package fouriertransform;

/**
 * Tester class for testing fourier transform
 * @author Winston Prakash
 */
public class FourierTransformTester {
    public static void main(String[] args) {
        int nData = 32;
        double time = 2.;
        double freq = 4.;
        double amplitude = 5.;
        double[] data = new double[nData * 2];
        double[] trData = new double[nData * 2];
        for (int i = 0; i< nData; i++){
            data[2 * i] = amplitude * Math.cos(freq * 2.0 * Math.PI * i * time / nData);
            data[2 * i + 1] = 0.0;
            System.out.printf("%s%.2f%s%.2f%s%n" , "[" , data[2 * i] , "," , data[2 * i + 1] , "]");
        }
        System.out.println("-----------------------------------");
        //trData = DiscreteFourierTransform.transform(nData, data, false);
        trData = FastFourierTransform.transform(nData, data, false);
        for(int i = 0; i < nData/2; i++){
            freq = (double)(i) /time;
            System.out.printf("%.2f%s%.2f%s%.2f%s%n" , freq, "[" , trData[2 * i] , "," , trData[2 * i + 1] , "]");
        } 
        System.out.println("-----------------------------------");
        //data = DiscreteFourierTransform.transform(nData, trData, true);
        data = FastFourierTransform.transform(nData, trData, true);
        for(int i = 0; i < nData; i++){
            double timeSlice = (double)(i + 1) * time / (double)nData;
            System.out.printf("%.2f%s%.2f%s%.2f%s%n" , timeSlice, "[" , data[2 * i] , "," , data[2 * i + 1] , "]");
        } 
    }
}