#include #include #include #include #include #define DATA_L (1<<16) #define FP_acc 1000 #include "FFT_FP_realisation.h" void imagery2abs(int64_t* inp, uint32_t inp_L, int64_t *out){ printf("+++++++++++++++++++++\n"); printf("calculating abs^2\n"); for (uint32_t i = 0; i < inp_L; ++i){ int64_t re = inp[i*2]; int64_t im = inp[i*2 +1]; int64_t val = (re * re + im * im) / FP_acc; printf("%lld\n", (long long)val); out[i] = val; } } void data_generator(int64_t* X, int64_t* Y, uint32_t N){ for (int i = 0; i < N; ++i){ X[i] = (int64_t)i; Y[i] = lround(sin(((double)i)*2.0* PI/(N/10))*FP_acc); Y[i] += 1*FP_acc; } } void main(){ char* logfilename = "tmp"; int64_t data_X[DATA_L] = {0,}; int64_t data_Y[DATA_L] = {0,}; int64_t data_res_FFT_imag[DATA_L*2] = {0,}; int64_t data_res_FFT_abs[DATA_L] = {0,}; fft_fp_prepare(); data_generator(data_X, data_Y, DATA_L); FFT_fp(data_Y, DATA_L, data_res_FFT_imag); imagery2abs(data_res_FFT_imag, DATA_L, data_res_FFT_abs); FILE *logfile_ptr; logfile_ptr = fopen(logfilename, "w"); fprintf(logfile_ptr, "X, Y, FFT\n"); for (uint32_t i = 0; i < DATA_L; ++i){ fprintf(logfile_ptr, "%lld, %lg, %lg \n", (long long)data_X[i], ((double)data_Y[i])/(double)FP_acc , (double)data_res_FFT_abs[i]/(double)FP_acc); } fclose(logfile_ptr); }