|
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 |
}
|