FreeCalypso > hg > gsm-codec-lib
changeset 364:3f27ca24c620
libtwamr: integrate ex_ctrl.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 06 May 2024 02:54:36 +0000 |
parents | 0349de7c45b7 |
children | 2a265be82195 |
files | libtwamr/Makefile libtwamr/ex_ctrl.c libtwamr/ex_ctrl.h libtwamr/namespace.list |
diffstat | 4 files changed, 196 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libtwamr/Makefile Mon May 06 02:46:19 2024 +0000 +++ b/libtwamr/Makefile Mon May 06 02:54:36 2024 +0000 @@ -6,10 +6,10 @@ d1035pf.o d2_11pf.o d2_9pf.o d3_14pf.o d4_17pf.o d8_31pf.o d_gain_c.o \ d_gain_p.o d_plsf.o d_plsf_3.o d_plsf_5.o dec_gain.o dec_lag3.o \ dec_lag6.o dhf_check.o dhf_tables.o e_homing.o ec_gains.o enc_lag3.o \ - enc_lag6.o gains_tab.o gc_pred.o gmed_n.o graytab.o inv_sqrt.o log2.o \ - lsp_lsf.o oper_32b.o pow2.o prmno.o q_plsf3_tab.o q_plsf5_tab.o \ - qua_gain_tab.o reorder.o s10_8pf.o set_sign.o sqrt_l.o tls_flags.o \ - window.o + enc_lag6.o ex_ctrl.o gains_tab.o gc_pred.o gmed_n.o graytab.o \ + inv_sqrt.o log2.o lsp_lsf.o oper_32b.o pow2.o prmno.o q_plsf3_tab.o \ + q_plsf5_tab.o qua_gain_tab.o reorder.o s10_8pf.o set_sign.o sqrt_l.o \ + tls_flags.o window.o HDRS= namespace.h LIB= libtwamr.a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/ex_ctrl.c Mon May 06 02:54:36 2024 +0000 @@ -0,0 +1,129 @@ +/************************************************************************* +* +* 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 : ex_ctrl.c +* Purpose : Excitation Control module in background noise +* +******************************************************************************** +*/ + +/* +******************************************************************************** +* MODULE INCLUDE FILE AND VERSION ID +******************************************************************************** +*/ +#include "namespace.h" +#include "ex_ctrl.h" + +#include "typedef.h" +#include "basic_op.h" +#include "no_count.h" +#include "cnst.h" +#include "memops.h" +#include "gmed_n.h" +#include "sqrt_l.h" + +/* +******************************************************************************** +* LOCAL VARIABLES AND TABLES +******************************************************************************** +*/ +/*-----------------------------------------------------------------* + * Decoder constant parameters (defined in "cnst.h") * + *-----------------------------------------------------------------* + * L_FRAME : Frame size. * + * L_SUBFR : Sub-frame size. * + *-----------------------------------------------------------------*/ + +/* +******************************************************************************** +* PUBLIC PROGRAM CODE +******************************************************************************** +*/ + +/* +************************************************************************** +* +* Function : Ex_ctrl +* Purpose : Charaterice synthesis speech and detect background noise +* Returns : background noise decision; 0 = no bgn, 1 = bgn +* +************************************************************************** +*/ +Word16 Ex_ctrl (Word16 excitation[], /*i/o: Current subframe excitation */ + Word16 excEnergy, /* i : Exc. Energy, sqrt(totEx*totEx)*/ + Word16 exEnergyHist[], /* i : History of subframe energies */ + Word16 voicedHangover, /* i : # of fr. after last voiced fr.*/ + Word16 prevBFI, /* i : Set i previous BFI */ + Word16 carefulFlag /* i : Restrict dymamic in scaling */ + ) +{ + Word16 i, exp; + Word16 testEnergy, scaleFactor, avgEnergy, prevEnergy; + Word32 t0; + + /* get target level */ + avgEnergy = gmed_n(exEnergyHist, 9); move16(); + + prevEnergy = shr( add (exEnergyHist[7], exEnergyHist[8]) ,1); + + test (); + if ( sub (exEnergyHist[8], prevEnergy) < 0) + { + prevEnergy = exEnergyHist[8]; move16 (); + } + + /* upscaling to avoid too rapid energy rises for some cases */ + test (); test (); + if ( sub (excEnergy, avgEnergy) < 0 && sub (excEnergy, 5) > 0) + { + testEnergy = shl(prevEnergy, 2); /* testEnergy = 4*prevEnergy; */ + + test (); test (); + if ( sub (voicedHangover, 7) < 0 || prevBFI != 0 ) + { + /* testEnergy = 3*prevEnergy */ + testEnergy = sub (testEnergy, prevEnergy); + } + + test (); + if ( sub (avgEnergy, testEnergy) > 0) + { + avgEnergy = testEnergy; move16 (); + } + + /* scaleFactor=avgEnergy/excEnergy in Q0 (const 29 below)*/ + exp = norm_s (excEnergy); + excEnergy = shl (excEnergy, exp); + excEnergy = div_s ((Word16) 16383, excEnergy); + t0 = L_mult (avgEnergy, excEnergy); + t0 = L_shr (t0, sub (20, exp)); /* const=30 for t0 in Q0, 20 for Q10 */ + if ( L_sub(t0, 32767) > 0 ) + { + t0 = 32767; move32 (); /* saturate */ + } + scaleFactor = extract_l (t0); + + /* test if scaleFactor > 3.0 */ + test (); test (); + if ( carefulFlag != 0 && sub(scaleFactor, 3072) > 0 ) + { + scaleFactor = 3072; move16 (); + } + + /* scale the excitation by scaleFactor */ + for (i = 0; i < L_SUBFR; i++) + { + t0 = L_mult (scaleFactor, excitation[i]); + t0 = L_shr (t0, 11); + excitation[i] = extract_l (t0); + } + } + + return 0; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtwamr/ex_ctrl.h Mon May 06 02:54:36 2024 +0000 @@ -0,0 +1,62 @@ +/* +******************************************************************************** +* +* 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 : ex_ctrl.h +* Purpose : Excitation Control module in background noise +* +******************************************************************************** +*/ +#ifndef ex_ctrl_h +#define ex_ctrl_h "$Id $" + +/* +******************************************************************************** +* INCLUDE FILES +******************************************************************************** +*/ +#include "typedef.h" +#include "cnst.h" + +/* +******************************************************************************** +* LOCAL VARIABLES AND TABLES +******************************************************************************** +*/ +#define L_ENERGYHIST 60 + +/* +******************************************************************************** +* DEFINITION OF DATA TYPES +******************************************************************************** +*/ + +/* +******************************************************************************** +* DECLARATION OF PROTOTYPES +******************************************************************************** +*/ + +/* +************************************************************************** +* +* Function : Ex_ctrl +* Purpose : Charaterice synthesis speech and detect background noise +* Returns : background noise decision; 0 = bgn, 1 = no bgn +* +************************************************************************** +*/ +Word16 Ex_ctrl (Word16 excitation[], /*i/o: Current subframe excitation */ + Word16 excEnergy, /* i : Exc. Energy, sqrt(totEx*totEx)*/ + Word16 exEnergyHist[], /* i : History of subframe energies */ + Word16 voicedHangover, /* i : # of fr. after last voiced fr.*/ + Word16 prevBFI, /* i : Set i previous BFI */ + Word16 carefulFlag /* i : Restrict dymamic in scaling */ +); + +#endif
--- a/libtwamr/namespace.list Mon May 06 02:46:19 2024 +0000 +++ b/libtwamr/namespace.list Mon May 06 02:54:36 2024 +0000 @@ -20,7 +20,7 @@ Convolve Dec_gain Dec_lag3 Dec_lag6 D_plsf_reset D_plsf_5 D_plsf_3 Init_D_plsf_3 -Enc_lag3 Enc_lag6 +Enc_lag3 Enc_lag6 Ex_ctrl Lsf_lsp Lsp_lsf Reorder_lsf agc agc2 agc_reset