void invspline1D(double *c, int size, double *z, int npoles) { double lambda; int n, k; /* normalization */ for (k = npoles, lambda = 1.; k--;) lambda *= (1. - z[k]) * (1. - 1. / z[k]); for (n = size; n--;) c[n] *= lambda; /*----- Loop on poles -----*/ for (k = 0; k < npoles; k++) { /* forward recursion */ c[0] = initcausal(c, size, z[k]); for (n = 1; n < size; n++) c[n] += z[k] * c[n - 1]; /* backwards recursion */ c[size - 1] = initanticausal(c, size, z[k]); for (n = size - 1; n--;) c[n] = z[k] * (c[n + 1] - c[n]); } }
static void invspline1D(float *c, int step, int size, double *z, int npoles) { /* normalization */ double lambda=1; for (int k = npoles-1; k >= 0; k--) lambda *= (1-z[k])*(1-1/z[k]); for (int n = size-1; n >= 0; n--) c[step*n] *= lambda; for (int k = 0 ; k < npoles; k++) { // Loop on poles /* forward recursion */ c[0] = initcausal(c, step, size, z[k]); for (int n = 1; n < size; n++) c[step*n] += z[k]*c[step*(n-1)]; /* backward recursion */ c[step*(size-1)] = initanticausal(c, step, size, z[k]); for (int n = size-2; n >= 0; n--) c[step*n] = z[k]*(c[step*(n+1)]-c[step*n]); } }