www.pudn.com > source.rar > LSPDEC.C
/* ITU-T G.729 Software Package Release 2 (November 2006) */
/*
ITU-T G.729 Annex C - Reference C code for floating point
implementation of G.729
Version 1.01 of 15.September.98
*/
/*
----------------------------------------------------------------------
COPYRIGHT NOTICE
----------------------------------------------------------------------
ITU-T G.729 Annex C ANSI C source code
Copyright (C) 1998, AT&T, France Telecom, NTT, University of
Sherbrooke. All rights reserved.
----------------------------------------------------------------------
*/
/*
File : LSPDEC.C
Used for the floating point version of both
G.729 main body and G.729A
*/
#include
#include "typedef.h"
#include "version.h"
#ifdef VER_G729A
#include "ld8a.h"
#include "tab_ld8a.h"
#else
#include "ld8k.h"
#include "tab_ld8k.h"
#endif
/* Prototype definitions of static functions */
static void lsp_iqua_cs( int prm[], FLOAT lsp[], int erase);
/* static memory */
static FLOAT freq_prev[MA_NP][M]; /* previous LSP vector */
static FLOAT freq_prev_reset[M] = { /* previous LSP vector(init) */
(F)0.285599, (F)0.571199, (F)0.856798, (F)1.142397, (F)1.427997,
(F)1.713596, (F)1.999195, (F)2.284795, (F)2.570394, (F)2.855993
}; /* PI*(float)(j+1)/(float)(M+1) */
/* static memory for frame erase operation */
static int prev_ma; /* previous MA prediction coef.*/
static FLOAT prev_lsp[M]; /* previous LSP vector */
/*----------------------------------------------------------------------------
* Lsp_decw_reset - set the previous LSP vectors
*----------------------------------------------------------------------------
*/
void lsp_decw_reset(void)
{
int i;
for(i=0; i> NC0_B) & 1;
code0 = prm[0] & (INT16)(NC0 - 1);
code1 = (prm[1] >> NC1_B) & (INT16)(NC1 - 1);
code2 = prm[1] & (INT16)(NC1 - 1);
lsp_get_quant(lspcb1, lspcb2, code0, code1, code2, fg[mode_index],
freq_prev, lsp_q, fg_sum[mode_index]);
copy(lsp_q, prev_lsp, M );
prev_ma = mode_index;
}
else /* Frame erased */
{
copy(prev_lsp, lsp_q, M );
/* update freq_prev */
lsp_prev_extract(prev_lsp, buf,
fg[prev_ma], freq_prev, fg_sum_inv[prev_ma]);
lsp_prev_update(buf, freq_prev);
}
return;
}
/*----------------------------------------------------------------------------
* d_lsp - decode lsp parameters
*----------------------------------------------------------------------------
*/
void d_lsp(
int index[], /* input : indexes */
FLOAT lsp_q[], /* output: decoded lsp */
int bfi /* input : frame erase information */
)
{
int i;
lsp_iqua_cs(index, lsp_q,bfi); /* decode quantized information */
/* Convert LSFs to LSPs */
for (i=0; i