FreeCalypso > hg > gsm-codec-lib
changeset 388:550d3594c878
libtwamr: integrate lsp.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 06 May 2024 06:43:22 +0000 |
parents | 7818f466a639 |
children | 9cd332a94c97 |
files | libtwamr/Makefile libtwamr/lsp.c libtwamr/lsp.h libtwamr/namespace.list |
diffstat | 4 files changed, 232 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/libtwamr/Makefile Mon May 06 06:36:40 2024 +0000 +++ b/libtwamr/Makefile Mon May 06 06:43:22 2024 +0000 @@ -8,7 +8,7 @@ dec_lag6.o dhf_check.o dhf_tables.o e_homing.o ec_gains.o enc_lag3.o \ enc_lag6.o ex_ctrl.o g_adapt.o g_code.o g_pitch.o gain_q.o gains_tab.o \ gc_pred.o gmed_n.o graytab.o hp_max.o int_lpc.o int_lsf.o inter_36.o \ - inv_sqrt.o lag_wind.o levinson.o log2.o lpc.o lsfwt.o lsp_az.o \ + inv_sqrt.o lag_wind.o levinson.o log2.o lpc.o lsfwt.o lsp.o lsp_az.o \ lsp_lsf.o lsp_tab.o mac_32.o oper_32b.o pow2.o prmno.o q_gain_c.o \ q_gain_p.o q_plsf.o q_plsf3_tab.o q_plsf5_tab.o q_plsf_3.o q_plsf_5.o \ qgain475.o qgain795.o qua_gain.o qua_gain_tab.o reorder.o s10_8pf.o \
--- /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; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/lsp.h Mon May 06 06:43:22 2024 +0000 @@ -0,0 +1,90 @@ +/* +******************************************************************************** +* +* 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.h +* Purpose : Conversion from A(z) to LSP. Quantization and +* interpolation of LSPs. +* +******************************************************************************** +*/ +#ifndef lsp_h +#define lsp_h "$Id $" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "tw_amr.h" +#include "typedef.h" +#include "q_plsf.h" + +/* +******************************************************************************** +* LOCAL VARIABLES AND TABLES +******************************************************************************** +*/ + +/* +******************************************************************************** +* DEFINITION OF DATA TYPES +******************************************************************************** +*/ +typedef struct { + /* Past LSPs */ + Word16 lsp_old[M]; + Word16 lsp_old_q[M]; + + /* Quantization state */ + Q_plsfState qSt; +} lspState; + +/* +******************************************************************************** +* DECLARATION OF PROTOTYPES +******************************************************************************** +*/ + +/* +************************************************************************** +* +* Function : lsp_reset +* Purpose : Resets state memory +* Returns : 0 on success +* +************************************************************************** +*/ +void lsp_reset (lspState *st); + +/* +************************************************************************** +* +* Function : lsp +* Purpose : Conversion from LP coefficients to LSPs. +* Quantization of LSPs. +* Description : Generates 2 sets of LSPs from 2 sets of +* LP coefficients for mode 12.2. For the other +* modes 1 set of LSPs is generated from 1 set of +* LP coefficients. These LSPs are quantized with +* Matrix/Vector quantization (depending on the mode) +* and interpolated for the subframes not yet having +* their own LSPs. +* +************************************************************************** +*/ +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 */ + ); + +#endif
--- a/libtwamr/namespace.list Mon May 06 06:36:40 2024 +0000 +++ b/libtwamr/namespace.list Mon May 06 06:43:22 2024 +0000 @@ -40,7 +40,7 @@ gainQuant gainQuant_reset gc_pred gc_pred_copy gc_pred_reset gc_pred_update gc_pred_average_limited gmed_n hp_max -lpc lpc_reset +lpc lpc_reset lsp lsp_reset q_gain_code q_gain_pitch Bits2prm Prm2bits