Blame doc/examples/fftreal.c

Packit 67cb25
#include <stdio.h>
Packit 67cb25
#include <math.h>
Packit 67cb25
#include <gsl/gsl_errno.h>
Packit 67cb25
#include <gsl/gsl_fft_real.h>
Packit 67cb25
#include <gsl/gsl_fft_halfcomplex.h>
Packit 67cb25
Packit 67cb25
int
Packit 67cb25
main (void)
Packit 67cb25
{
Packit 67cb25
  int i, n = 100;
Packit 67cb25
  double data[n];
Packit 67cb25
Packit 67cb25
  gsl_fft_real_wavetable * real;
Packit 67cb25
  gsl_fft_halfcomplex_wavetable * hc;
Packit 67cb25
  gsl_fft_real_workspace * work;
Packit 67cb25
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      data[i] = 0.0;
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  for (i = n / 3; i < 2 * n / 3; i++)
Packit 67cb25
    {
Packit 67cb25
      data[i] = 1.0;
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      printf ("%d: %e\n", i, data[i]);
Packit 67cb25
    }
Packit 67cb25
  printf ("\n");
Packit 67cb25
Packit 67cb25
  work = gsl_fft_real_workspace_alloc (n);
Packit 67cb25
  real = gsl_fft_real_wavetable_alloc (n);
Packit 67cb25
Packit 67cb25
  gsl_fft_real_transform (data, 1, n, 
Packit 67cb25
                          real, work);
Packit 67cb25
Packit 67cb25
  gsl_fft_real_wavetable_free (real);
Packit 67cb25
Packit 67cb25
  for (i = 11; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      data[i] = 0;
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  hc = gsl_fft_halfcomplex_wavetable_alloc (n);
Packit 67cb25
Packit 67cb25
  gsl_fft_halfcomplex_inverse (data, 1, n, 
Packit 67cb25
                               hc, work);
Packit 67cb25
  gsl_fft_halfcomplex_wavetable_free (hc);
Packit 67cb25
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      printf ("%d: %e\n", i, data[i]);
Packit 67cb25
    }
Packit 67cb25
Packit 67cb25
  gsl_fft_real_workspace_free (work);
Packit 67cb25
  return 0;
Packit 67cb25
}