ftp.nice.ch/pub/next/unix/audio/Cmix.N.s.tar.gz#/cmix/lpc/synthesis/inters.c

This is inters.c in view mode; [Download] [Up]

/* inters.f -- translated by f2c (version of 26 January 1990  18:57:16).
   You must link the resulting object file with the libraries:
        -lF77 -lI77 -lm -lc   (in that order)
*/

#include "../../H/f2c.h"

/* Subroutine */ int inters_(bold, bnew, deltb, npols, b)
real *bold, *bnew;
real *deltb;
integer *npols;
real *b;
{
    /* System generated locals */
    integer i_1, i_2;
    doublereal d_1;

    /* Local variables */
    static doublereal aold[576] /* was [24][24] */, anew[576]   /* was [24][
            24] */, rold[25], rnew[25];
    static integer ncom1, ncom2;
    static doublereal a[576]    /* was [24][24] */;
    static integer i, j, k;
    static doublereal r[25], delta;
    static integer iminus, npolsm, npolsp;
    static real sum1, sum2;

    /* Parameter adjustments */
    --bold;
    --bnew;
    --b;

    /* Function Body */
    delta = *deltb;
    ncom1 = *npols + 1;
    i_1 = *npols;
    for (i = 1; i <= i_1; ++i) {
        ncom2 = ncom1 - i;
        aold[*npols + i * 24 - 25] = bold[ncom2];
/* L10: */
        anew[*npols + i * 24 - 25] = bnew[ncom2];
    }
    npolsm = *npols - 1;
    npolsp = *npols + 1;
    i_1 = npolsm;
    for (k = 1; k <= i_1; ++k) {
        i = *npols - k;
        i_2 = i;
        for (j = 1; j <= i_2; ++j) {
/* Computing 2nd power */
            d_1 = aold[i + 1 + (i + 1) * 24 - 25];
            aold[i + j * 24 - 25] = (aold[i + 1 + j * 24 - 25] + aold[i + 1 + 
                    (i + 1) * 24 - 25] * aold[i + 1 + (i + 1 - j) * 24 - 25]) 
                    / ((float)1. - d_1 * d_1);
/* L20: */
/* Computing 2nd power */
            d_1 = anew[i + 1 + (i + 1) * 24 - 25];
            anew[i + j * 24 - 25] = (anew[i + 1 + j * 24 - 25] + anew[i + 1 + 
                    (i + 1) * 24 - 25] * anew[i + 1 + (i + 1 - j) * 24 - 25]) 
                    / ((float)1. - d_1 * d_1);
        }
    }
/* ......COMPUTE AUTOCORRELATION COEFFICIENTS RTEMP(I) WITH R(0) = 1 */
    rold[0] = (float)1.;
    rnew[0] = (float)1.;
    i_2 = *npols;
    for (i = 1; i <= i_2; ++i) {
        sum1 = (float)0.;
        sum2 = (float)0.;
        i_1 = i;
        for (j = 1; j <= i_1; ++j) {
            sum1 += aold[i + j * 24 - 25] * rold[i + 1 - j - 1];
/* L40: */
            sum2 += anew[i + j * 24 - 25] * rnew[i + 1 - j - 1];
        }
        rold[i] = sum1;
/* L30: */
        rnew[i] = sum2;
    }
/* ......COMPUTE R(0) FROM RTEMP(I) */
    i_2 = *npols;
    for (i = 1; i <= i_2; ++i) {
        rold[0] -= aold[*npols + i * 24 - 25] * rold[i];
/* L60: */
        rnew[0] -= anew[*npols + i * 24 - 25] * rnew[i];
    }
    rold[0] = 1. / rold[0];
    rnew[0] = 1. / rnew[0];
/* ......COMPUTE AUTOCORRELATION COEFFICIENTS R(I) WITH CORRECT R(0) */
    i_2 = npolsp;
    for (i = 2; i <= i_2; ++i) {
        rold[i - 1] = rold[0] * rold[i - 1];
/* L50: */
        rnew[i - 1] = rnew[0] * rnew[i - 1];
    }
/* ......INTERPOLATE AUTOCORRELATION COEFFICIENTS */
    i_2 = npolsp;
    for (i = 1; i <= i_2; ++i) {
/* L70: */
        r[i - 1] = delta * (rnew[i - 1] - rold[i - 1]) + rold[i - 1];
    }
/* ......INSERT TEST FOR SINGULARITY OF NEW AUTOCORRELATION MATRIX */
/* ......COMPUTE NEW PREDICTOR COEFFICIENTS */
    a[0] = r[1] / r[0];
    i_2 = *npols;
    for (i = 2; i <= i_2; ++i) {
        sum1 = r[0];
        sum2 = r[i];
        iminus = i - 1;
        i_1 = iminus;
        for (j = 1; j <= i_1; ++j) {
            sum1 -= r[j] * a[i - 1 + j * 24 - 25];
/* L90: */
            sum2 -= r[i - j] * a[i - 1 + j * 24 - 25];
        }
        a[i + i * 24 - 25] = sum2 / sum1;
        i_1 = iminus;
        for (j = 1; j <= i_1; ++j) {
/* L100: */
            a[i + j * 24 - 25] = a[i - 1 + j * 24 - 25] - a[i + i * 24 - 25] *
                     a[i - 1 + (i - j) * 24 - 25];
        }
/* L80: */
    }
    i_2 = *npols;
    for (i = 1; i <= i_2; ++i) {
        ncom2 = ncom1 - i;
/* L110: */
        b[i] = a[*npols + ncom2 * 24 - 25];
    }
    return 0;
} /* inters_ */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.