+++ /dev/null
-#include <stdlib.h>
-#include "Util/types.h"
-#include <math.h>
-#include <gsl/gsl_wavelet.h>
-#include <gsl/gsl_spline.h>
-
-// compute rows of the matrix of reduced coordinates
-void compute_coefficients(PowerCurve* powerCurves, uint32_t nbSeries, uint32_t nbValues,
- float* reducedCoordinates, uint32_t index, uint32_t nbReducedCoordinates)
-{
- uint32_t D = (1 << nbReducedCoordinates);
- double* x = (double*) malloc(nbValues*sizeof(double));
- for (uint32_t i=0; i<nbValues; i++)
- x[i] = i;
- double* y = (double*) malloc(nbValues*sizeof(double));
- double* interpolatedTranformedCurve = (double*) malloc(D*sizeof(double));
- gsl_interp* linearInterpolation = gsl_interp_alloc(gsl_interp_linear, nbValues);
- gsl_interp_accel* acc = gsl_interp_accel_alloc();
- gsl_wavelet_workspace* work = gsl_wavelet_workspace_alloc(D);
- //gsl_wavelet* w = gsl_wavelet_alloc(gsl_wavelet_bspline, 206); //used for starlight
- gsl_wavelet* w = gsl_wavelet_alloc(gsl_wavelet_daubechies, 6); //used for power curves
- //gsl_wavelet* w = gsl_wavelet_alloc(gsl_wavelet_haar, 2);
- for (uint32_t i = 0; i < nbSeries; i++)
- {
- //Spline interpolation to have D = 2^u sample points
- for (uint32_t j=0; j<nbValues; j++)
- y[j] = powerCurves[i].values[j];
- gsl_interp_init(linearInterpolation, x, y, nbValues);
- for (uint32_t j=0; j<D; j++)
- {
- interpolatedTranformedCurve[j] =
- gsl_interp_eval(linearInterpolation, x, y, j*((float)(nbValues-1)/(D-1)), acc);
- }
- //DWT transform (in place) on interpolated curve [TODO: clarify stride parameter]
- gsl_wavelet_transform_forward(w, interpolatedTranformedCurve, 1, D, work);
- //Fill reducedCoordinates with energy contributions
- uint32_t t0 = 1;
- uint32_t t1 = 1;
- for (uint32_t j=0; j<nbReducedCoordinates; j++)
- {
- t1 += (1 << j);
- //reducedCoordinates[(index+i)*nbReducedCoordinates+j] = sqrt( sum( x[t0:t1]^2 ) )
- float sumOnSegment = 0.0;
- for (uint32_t u=t0; u<t1; u++)
- sumOnSegment += interpolatedTranformedCurve[u]*interpolatedTranformedCurve[u];
- reducedCoordinates[(index+i)*nbReducedCoordinates+j] = sqrt(sumOnSegment);
- t0 = t1;
- }
- }
- gsl_interp_free(linearInterpolation);
- gsl_interp_accel_free(acc);
- free(x);
- free(y);
- free(interpolatedTranformedCurve);
- gsl_wavelet_free(w);
- gsl_wavelet_workspace_free(work);
-}