|
|
|
@@ -31,38 +31,38 @@ |
|
|
|
static void compute_lpc_coefs(const double *autoc, int max_order, |
|
|
|
double lpc[][MAX_LPC_ORDER], double *ref) |
|
|
|
{ |
|
|
|
int i, j, i2; |
|
|
|
double r, err, tmp; |
|
|
|
double lpc_tmp[MAX_LPC_ORDER]; |
|
|
|
|
|
|
|
for(i=0; i<max_order; i++) lpc_tmp[i] = 0; |
|
|
|
err = autoc[0]; |
|
|
|
|
|
|
|
for(i=0; i<max_order; i++) { |
|
|
|
r = -autoc[i+1]; |
|
|
|
for(j=0; j<i; j++) { |
|
|
|
r -= lpc_tmp[j] * autoc[i-j]; |
|
|
|
} |
|
|
|
r /= err; |
|
|
|
ref[i] = fabs(r); |
|
|
|
|
|
|
|
err *= 1.0 - (r * r); |
|
|
|
|
|
|
|
i2 = (i >> 1); |
|
|
|
lpc_tmp[i] = r; |
|
|
|
for(j=0; j<i2; j++) { |
|
|
|
tmp = lpc_tmp[j]; |
|
|
|
lpc_tmp[j] += r * lpc_tmp[i-1-j]; |
|
|
|
lpc_tmp[i-1-j] += r * tmp; |
|
|
|
} |
|
|
|
if(i & 1) { |
|
|
|
lpc_tmp[j] += lpc_tmp[j] * r; |
|
|
|
} |
|
|
|
|
|
|
|
for(j=0; j<=i; j++) { |
|
|
|
lpc[i][j] = -lpc_tmp[j]; |
|
|
|
} |
|
|
|
} |
|
|
|
int i, j, i2; |
|
|
|
double r, err, tmp; |
|
|
|
double lpc_tmp[MAX_LPC_ORDER]; |
|
|
|
|
|
|
|
for(i=0; i<max_order; i++) lpc_tmp[i] = 0; |
|
|
|
err = autoc[0]; |
|
|
|
|
|
|
|
for(i=0; i<max_order; i++) { |
|
|
|
r = -autoc[i+1]; |
|
|
|
for(j=0; j<i; j++) { |
|
|
|
r -= lpc_tmp[j] * autoc[i-j]; |
|
|
|
} |
|
|
|
r /= err; |
|
|
|
ref[i] = fabs(r); |
|
|
|
|
|
|
|
err *= 1.0 - (r * r); |
|
|
|
|
|
|
|
i2 = (i >> 1); |
|
|
|
lpc_tmp[i] = r; |
|
|
|
for(j=0; j<i2; j++) { |
|
|
|
tmp = lpc_tmp[j]; |
|
|
|
lpc_tmp[j] += r * lpc_tmp[i-1-j]; |
|
|
|
lpc_tmp[i-1-j] += r * tmp; |
|
|
|
} |
|
|
|
if(i & 1) { |
|
|
|
lpc_tmp[j] += lpc_tmp[j] * r; |
|
|
|
} |
|
|
|
|
|
|
|
for(j=0; j<=i; j++) { |
|
|
|
lpc[i][j] = -lpc_tmp[j]; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|