Browse Source

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

Signed-off-by: Martin Storsjö <martin@martin.st>
tags/n1.1
Justin Ruggles Martin Storsjö 13 years ago
parent
commit
39ef66f530
1 changed files with 31 additions and 0 deletions
  1. +31
    -0
      libavcodec/lpc.h

+ 31
- 0
libavcodec/lpc.h View File

@@ -110,6 +110,37 @@ void ff_lpc_end(LPCContext *s);
#define LPC_TYPE float
#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.
* Produce LPC coefficients from autocorrelation data.


Loading…
Cancel
Save