FreeCalypso > hg > gsm-codec-lib
diff libtwamr/lsp.c @ 388:550d3594c878
libtwamr: integrate lsp.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 06 May 2024 06:43:22 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/lsp.c Mon May 06 06:43:22 2024 +0000 @@ -0,0 +1,140 @@ +/* +******************************************************************************** +* +* GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 +* R99 Version 3.3.0 +* REL-4 Version 4.1.0 +* +******************************************************************************** +* +* File : lsp.c +* Purpose : From A(z) to lsp. LSP quantization and interpolation +* +******************************************************************************** +*/ + +/* +******************************************************************************** +* MODULE INCLUDE FILE AND VERSION ID +******************************************************************************** +*/ +#include "namespace.h" +#include "lsp.h" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "tw_amr.h" +#include "typedef.h" +#include "basic_op.h" +#include "oper_32b.h" +#include "q_plsf.h" +#include "memops.h" +#include "az_lsp.h" +#include "int_lpc.h" +#include "no_count.h" +#include "lsp_tab.h" + +/* +******************************************************************************** +* PUBLIC PROGRAM CODE +******************************************************************************** +*/ + +/* +************************************************************************** +* +* Function : lsp_reset +* +************************************************************************** +*/ +void lsp_reset (lspState *st) +{ + /* Init lsp_old[] */ + Copy(lsp_init_data, &st->lsp_old[0], M); + + /* Initialize lsp_old_q[] */ + Copy(st->lsp_old, st->lsp_old_q, M); + + /* Reset quantization state */ + Q_plsf_reset(&st->qSt); +} + +/************************************************************************* + * + * FUNCTION: lsp() + * + ************************************************************************/ +int lsp(lspState *st, /* i/o : State struct */ + enum Mode req_mode, /* i : requested coder mode */ + enum Mode used_mode, /* i : used coder mode */ + Word16 az[], /* i/o : interpolated LP parameters Q12 */ + Word16 azQ[], /* o : quantization interpol. LP parameters Q12*/ + Word16 lsp_new[], /* o : new lsp vector */ + Word16 **anap /* o : analysis parameters */) +{ + Word16 lsp_new_q[M]; /* LSPs at 4th subframe */ + Word16 lsp_mid[M], lsp_mid_q[M]; /* LSPs at 2nd subframe */ + + Word16 pred_init_i; /* init index for MA prediction in DTX mode */ + + test (); + if ( sub (req_mode, MR122) == 0) + { + Az_lsp (&az[MP1], lsp_mid, st->lsp_old); + Az_lsp (&az[MP1 * 3], lsp_new, lsp_mid); + + /*--------------------------------------------------------------------* + * Find interpolated LPC parameters in all subframes (both quantized * + * and unquantized). * + * The interpolated parameters are in array A_t[] of size (M+1)*4 * + * and the quantized interpolated parameters are in array Aq_t[] * + *--------------------------------------------------------------------*/ + Int_lpc_1and3_2 (st->lsp_old, lsp_mid, lsp_new, az); + + test (); + if ( sub (used_mode, MRDTX) != 0) + { + /* LSP quantization (lsp_mid[] and lsp_new[] jointly quantized) */ + Q_plsf_5 (&st->qSt, lsp_mid, lsp_new, lsp_mid_q, lsp_new_q, *anap); + + Int_lpc_1and3 (st->lsp_old_q, lsp_mid_q, lsp_new_q, azQ); + + /* Advance analysis parameters pointer */ + (*anap) += add(0,5); move16 (); + } + } + else + { + Az_lsp(&az[MP1 * 3], lsp_new, st->lsp_old); /* From A(z) to lsp */ + + /*--------------------------------------------------------------------* + * Find interpolated LPC parameters in all subframes (both quantized * + * and unquantized). * + * The interpolated parameters are in array A_t[] of size (M+1)*4 * + * and the quantized interpolated parameters are in array Aq_t[] * + *--------------------------------------------------------------------*/ + + Int_lpc_1to3_2(st->lsp_old, lsp_new, az); + + test (); + if ( sub (used_mode, MRDTX) != 0) + { + /* LSP quantization */ + Q_plsf_3(&st->qSt, req_mode, lsp_new, lsp_new_q, *anap, &pred_init_i); + + Int_lpc_1to3(st->lsp_old_q, lsp_new_q, azQ); + + /* Advance analysis parameters pointer */ + (*anap) += add (0, 3); move16 (); + } + } + + /* update the LSPs for the next frame */ + Copy (lsp_new, st->lsp_old, M); + Copy (lsp_new_q, st->lsp_old_q, M); + + return 0; +}