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