Commit 39ef66f5 authored by Justin Ruggles's avatar Justin Ruggles Committed by Martin Storsjö
Browse files

lpc: Add a function for calculating reflection coefficients from autocorrelation coefficients


Signed-off-by: default avatarMartin Storsjö <martin@martin.st>
parent dc579306
...@@ -110,6 +110,37 @@ void ff_lpc_end(LPCContext *s); ...@@ -110,6 +110,37 @@ void ff_lpc_end(LPCContext *s);
#define LPC_TYPE float #define LPC_TYPE float
#endif #endif
/**
* Schur recursion.
* Produces reflection coefficients from autocorrelation data.
*/
static inline void compute_ref_coefs(const LPC_TYPE *autoc, int max_order,
LPC_TYPE *ref, LPC_TYPE *error)
{
int i, j;
LPC_TYPE err;
LPC_TYPE gen0[MAX_LPC_ORDER], gen1[MAX_LPC_ORDER];
for (i = 0; i < max_order; i++)
gen0[i] = gen1[i] = autoc[i + 1];
err = autoc[0];
ref[0] = -gen1[0] / err;
err += gen1[0] * ref[0];
if (error)
error[0] = err;
for (i = 1; i < max_order; i++) {
for (j = 0; j < max_order - i; j++) {
gen1[j] = gen1[j + 1] + ref[i - 1] * gen0[j];
gen0[j] = gen1[j + 1] * ref[i - 1] + gen0[j];
}
ref[i] = -gen1[0] / err;
err += gen1[0] * ref[i];
if (error)
error[i] = err;
}
}
/** /**
* Levinson-Durbin recursion. * Levinson-Durbin recursion.
* Produce LPC coefficients from autocorrelation data. * Produce LPC coefficients from autocorrelation data.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment