/*----------------------------------------------------------------------------
複素指数関数を使った離散フーリエ変換と逆離散フーリエ変換
discrete Fourier transform and inverse discrete Fourier transform
using complex exponential function
calc_complex_fourier.c
----------------------------------------------------------------------------*/
#include "complex_DFT.h"
// 複素指数関数を使った離散フーリエ変換
// データxを入力し、フーリエ係数Fを出力
// discrete Fourier transform using complex exponential function
// input the data x, output the Fourier coefficient F
void complex_fourier( int num, complex *x, complex *F )
{
int k, n;
double angle;
double complex sum;
for( k = 0; k < num; k++ ) {
sum = 0.0;
for( n = 0; n < num; n++ ) {
angle = ( -2.0 * M_PI * n * k )/(double)num;
sum += x[n] * cexp( angle * I );
}
F[k] = sum;
}
}
/*----------------------------------------------------------------------*/
// 複素指数関数を使った離散逆フーリエ変換
// フーリエ係数Fを入力し、データxを出力
// discrete inverse Fourier transform using complex exponential function
// input the Fourier coefficient F, output the data x
void complex_inv_fourier( int num, complex *x, complex *F )
{
int k, n;
double angle;
double complex sum;
for( n = 0; n < num; n++ ) {
sum = 0.0;
for( k = 0; k < num; k++ ) {
angle = ( 2.0 * M_PI * n * k )/(double)num;
sum += F[k] * cexp( angle * I );
}
x[n] = sum/(double)num;
}
}