Blame doc/examples/fftmr.c

Packit 67cb25
#include <stdio.h>
Packit 67cb25
#include <math.h>
Packit 67cb25
#include <gsl/gsl_errno.h>
Packit 67cb25
#include <gsl/gsl_fft_complex.h>
Packit 67cb25
Packit 67cb25
#define REAL(z,i) ((z)[2*(i)])
Packit 67cb25
#define IMAG(z,i) ((z)[2*(i)+1])
Packit 67cb25
Packit 67cb25
int
Packit 67cb25
main (void)
Packit 67cb25
{
Packit 67cb25
  int i;
Packit 67cb25
  const int n = 630;
Packit 67cb25
  double data[2*n];
Packit 67cb25
Packit 67cb25
  gsl_fft_complex_wavetable * wavetable;
Packit 67cb25
  gsl_fft_complex_workspace * workspace;
Packit 67cb25
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      REAL(data,i) = 0.0;
Packit 67cb25
      IMAG(data,i) = 0.0;
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  data[0] = 1.0;
Packit 67cb25
Packit 67cb25
  for (i = 1; i <= 10; i++)
Packit 67cb25
    {
Packit 67cb25
      REAL(data,i) = REAL(data,n-i) = 1.0;
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      printf ("%d: %e %e\n", i, REAL(data,i), 
Packit 67cb25
                                IMAG(data,i));
Packit 67cb25
    }
Packit 67cb25
  printf ("\n");
Packit 67cb25
Packit 67cb25
  wavetable = gsl_fft_complex_wavetable_alloc (n);
Packit 67cb25
  workspace = gsl_fft_complex_workspace_alloc (n);
Packit 67cb25
Packit 67cb25
  for (i = 0; i < (int) wavetable->nf; i++)
Packit 67cb25
    {
Packit 67cb25
       printf ("# factor %d: %zu\n", i, 
Packit 67cb25
               wavetable->factor[i]);
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  gsl_fft_complex_forward (data, 1, n, 
Packit 67cb25
                           wavetable, workspace);
Packit 67cb25
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      printf ("%d: %e %e\n", i, REAL(data,i), 
Packit 67cb25
                                IMAG(data,i));
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  gsl_fft_complex_wavetable_free (wavetable);
Packit 67cb25
  gsl_fft_complex_workspace_free (workspace);
Packit 67cb25
  return 0;
Packit 67cb25
}