Blame doc/examples/dwt.c

Packit 67cb25
#include <stdio.h>
Packit 67cb25
#include <math.h>
Packit 67cb25
#include <gsl/gsl_sort.h>
Packit 67cb25
#include <gsl/gsl_wavelet.h>
Packit 67cb25
Packit 67cb25
int
Packit 67cb25
main (int argc, char **argv)
Packit 67cb25
{
Packit 67cb25
  (void)(argc); /* avoid unused parameter warning */
Packit 67cb25
  int i, n = 256, nc = 20;
Packit 67cb25
  double *orig_data = malloc (n * sizeof (double));
Packit 67cb25
  double *data = malloc (n * sizeof (double));
Packit 67cb25
  double *abscoeff = malloc (n * sizeof (double));
Packit 67cb25
  size_t *p = malloc (n * sizeof (size_t));
Packit 67cb25
Packit 67cb25
  FILE * f;
Packit 67cb25
  gsl_wavelet *w;
Packit 67cb25
  gsl_wavelet_workspace *work;
Packit 67cb25
Packit 67cb25
  w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4);
Packit 67cb25
  work = gsl_wavelet_workspace_alloc (n);
Packit 67cb25
Packit 67cb25
  f = fopen (argv[1], "r");
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      fscanf (f, "%lg", &orig_data[i]);
Packit 67cb25
      data[i] = orig_data[i];
Packit 67cb25
    }
Packit 67cb25
  fclose (f);
Packit 67cb25
Packit 67cb25
  gsl_wavelet_transform_forward (w, data, 1, n, work);
Packit 67cb25
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      abscoeff[i] = fabs (data[i]);
Packit 67cb25
    }
Packit 67cb25
  
Packit 67cb25
  gsl_sort_index (p, abscoeff, 1, n);
Packit 67cb25
  
Packit 67cb25
  for (i = 0; (i + nc) < n; i++)
Packit 67cb25
    data[p[i]] = 0;
Packit 67cb25
  
Packit 67cb25
  gsl_wavelet_transform_inverse (w, data, 1, n, work);
Packit 67cb25
  
Packit 67cb25
  for (i = 0; i < n; i++)
Packit 67cb25
    {
Packit 67cb25
      printf ("%g %g\n", orig_data[i], data[i]);
Packit 67cb25
    }
Packit 67cb25
  
Packit 67cb25
  gsl_wavelet_free (w);
Packit 67cb25
  gsl_wavelet_workspace_free (work);
Packit 67cb25
Packit 67cb25
  free (data);
Packit 67cb25
  free (orig_data);
Packit 67cb25
  free (abscoeff);
Packit 67cb25
  free (p);
Packit 67cb25
  return 0;
Packit 67cb25
}