Mercurial > libavcodec.hg
changeset 9122:0613e9b5514c libavcodec
Part 1 of 2 of Kenan Gillet's 'make ff_qcelp_lspf2lpc
more general' changeset. This one splits ff_qcelp_lspf2lpc
into the QCELP-especific ff_qcelp_lspf2lpc + the more general
ff_qcelp_lspf2lpc.
author | reynaldo |
---|---|
date | Wed, 04 Mar 2009 01:28:07 +0000 |
parents | 7f11c330c5d6 |
children | 36a5caff8540 |
files | qcelp_lsp.c |
diffstat | 1 files changed, 33 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/qcelp_lsp.c Wed Mar 04 01:08:26 2009 +0000 +++ b/qcelp_lsp.c Wed Mar 04 01:28:07 2009 +0000 @@ -48,16 +48,16 @@ * * TIA/EIA/IS-733 2.4.3.3.5-1/2 */ -static void lsp2polyf(const float *lspf, double *f, int lp_half_order) +static void lsp2polyf(const double *lspf, double *f, int lp_half_order) { int i, j; f[0] = 1.0; - f[1] = -2 * cos(M_PI * lspf[0]); + f[1] = -2 * lspf[0]; lspf -= 2; for(i=2; i<=lp_half_order; i++) { - double val = -2 * cos(M_PI * lspf[2*i]); + double val = -2 * lspf[2*i]; f[i] = val * f[i-1] + 2*f[i-2]; for(j=i-1; j>1; j--) f[j] += f[j-1] * val + f[j-2]; @@ -66,6 +66,30 @@ } /** + * Reconstructs LPC coefficients from the line spectral pair frequencies. + * + * @param lspf line spectral pair frequencies + * @param lpc linear predictive coding coefficients + */ +void ff_celp_lspf2lpc(const double *lspf, float *lpc) +{ + double pa[6], qa[6]; + int i; + + lsp2polyf(lspf, pa, 5); + lsp2polyf(lspf + 1, qa, 5); + + for (i=4; i>=0; i--) + { + double paf = pa[i+1] + pa[i]; + double qaf = qa[i+1] - qa[i]; + + lpc[i ] = 0.5 * (paf+qaf); + lpc[9-i] = 0.5 * (paf-qaf); + } +} + +/** * Reconstructs LPC coefficients from the line spectral pair frequencies * and performs bandwidth expansion. * @@ -79,21 +103,15 @@ */ void ff_qcelp_lspf2lpc(const float *lspf, float *lpc) { - double pa[6], qa[6]; + double lsf[10]; + double bandwith_expansion_coeff = QCELP_BANDWITH_EXPANSION_COEFF; int i; - double bandwith_expansion_coeff = QCELP_BANDWITH_EXPANSION_COEFF * 0.5; - - lsp2polyf(lspf, pa, 5); - lsp2polyf(lspf + 1, qa, 5); - for (i=4; i>=0; i--) - { - double paf = pa[i+1] + pa[i]; - double qaf = qa[i+1] - qa[i]; + for (i=0; i<10; i++) + lsf[i] = cos(M_PI * lspf[i]); - lpc[i ] = paf + qaf; - lpc[9-i] = paf - qaf; - } + ff_celp_lspf2lpc(lsf, lpc); + for (i=0; i<10; i++) { lpc[i] *= bandwith_expansion_coeff;