Пример #1
0
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]);

	}
}
Пример #2
0
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]);
	}
}