CAMLprim value ml_gsl_wavelet_transform_bigarray (value w, value dir, value b, value ws) { struct caml_bigarray *bigarr = Bigarray_val(b); double *data = bigarr->data; size_t n = bigarr->dim[0]; gsl_wavelet_transform (Wavelet_val (w), data, 1, n, gsl_direction_val (dir), WS_val (ws)); return Val_unit; }
CAMLprim value ml_gsl_wavelet_transform (value w, value dir, value vf, value ws) { double *data = Double_array_val (Field (vf, 0)) + Long_val (Field (vf, 1)); size_t n = Long_val (Field (vf, 2)); size_t stride = Long_val (Field (vf, 3)); check_array (vf); gsl_wavelet_transform (Wavelet_val (w), data, stride, n, gsl_direction_val (dir), WS_val (ws)); return Val_unit; }
t_int *wlet_perform(t_int *w) { t_wlet *x = (t_wlet *)w[1]; t_float *inL = (t_float *)w[2]; t_float *outL = (t_float *)w[3]; int n = (int)w[4]; int i, j, result; long numTransforms = (long)n / (x->w_waveletLength); //double data = x->w_tmp; for(j = 0; j < numTransforms; j++){ for(i = 0; i < x->w_waveletLength; i++) x->w_tmp[i] = (double)inL[i + (x->w_waveletLength * j)]; result = gsl_wavelet_transform(x->w_wavelet, x->w_tmp, x->w_stride, x->w_waveletLength, x->w_direction, x->w_workspace); if(result) post("%d", result); for(i = 0; i < x->w_waveletLength; i++){ outL[i + (x->w_waveletLength * j)] = (t_float)x->w_tmp[i]; } } return (w + 5); }