fftw3

FFTのコーディングの仕方を勉強してたら、fftwっていうライブラリがあると聞いたので、それを使うことにした。

Fastest Fourier Transform in the Westの略らしい。西側でもっともはやい。

complex.hをcで使うとき、虚数単位にIを使ったり、実部とりだすのにreal、虚部にはimagを使えばいいらしい。

チュトリアルみて、コーディングしたら、あっさりとFFTできた。

すてき。

コンパイルはライブラリをインストールした後、次のように。

$ gcc -lm -lfftw3 -o sample sample.c

コード例



#include <stdio.h>

#include <complex.h>

#include <fftw3.h>

#include <math.h>

#define N 10

#define PI 3.14159265358979323



int main(int *argc, char *argv[])

{

  fftw_complex *in, *out;

  fftw_plan p;

  int i;



  in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);

  out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);

  

  for(i=0; i<N; i++){

    

    in[i] = sin(2*PI*(double)i/(double)(N*5));

  }

  

  p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);

  

  fftw_execute(p);



  for(i=0; i<N; i++){

    printf("%lf %lf\n", __real__ out[i], __imag__ out[i]);

  }

  fftw_destroy_plan(p);

  fftw_free(in); fftw_free(out);



  return 0;

}