diff libtwamr/agc.h @ 253:54f6bc41ed10

libtwamr: integrate a* modules
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 05 Apr 2024 06:08:15 +0000
parents
children 6b33f3ba4289
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/agc.h	Fri Apr 05 06:08:15 2024 +0000
@@ -0,0 +1,111 @@
+/*
+*****************************************************************************
+*
+*      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             : agc.h
+*      Purpose          : Scales the postfilter output on a subframe basis
+*                       : by automatic control of the subframe gain.
+*
+*****************************************************************************
+*/
+#ifndef agc_h
+#define agc_h "$Id $"
+ 
+/*
+*****************************************************************************
+*                         INCLUDE FILES
+*****************************************************************************
+*/
+#include "typedef.h"
+ 
+/*
+*****************************************************************************
+*                         DEFINITION OF DATA TYPES
+*****************************************************************************
+*/
+typedef struct {
+    Word16 past_gain;
+} agcState;
+
+/*
+*****************************************************************************
+*                         DECLARATION OF PROTOTYPES
+*****************************************************************************
+*/
+/*
+**************************************************************************
+*
+*  Function    : agc_init
+*  Purpose     : Allocates memory for agc state and initializes
+*                state memory
+*  Description : Stores pointer to agc status struct in *st. This pointer
+*                has to be passed to agc in each call.
+*  Returns     : 0 on success
+*
+**************************************************************************
+*/
+int agc_init(agcState **st);
+
+/*
+**************************************************************************
+*
+*  Function    : agc_reset
+*  Purpose     : Reset of agc (i.e. set state memory to 1.0)
+*  Returns     : 0 on success
+*
+**************************************************************************
+*/
+int agc_reset (agcState *st);
+
+/*
+**************************************************************************
+*
+*  Function    : agc_exit
+*  Purpose     : The memory used for state memory is freed,
+*                de-initialize agc
+*
+**************************************************************************
+*/
+void agc_exit (agcState **st);
+
+/*
+**************************************************************************
+*
+*  Function    : agc
+*  Purpose     : Scales the postfilter output on a subframe basis
+*  Description : sig_out[n] = sig_out[n] * gain[n];
+*                where gain[n] is the gain at the nth sample given by
+*                gain[n] = agc_fac * gain[n-1] + (1 - agc_fac) g_in/g_out
+*                g_in/g_out is the square root of the ratio of energy at 
+*                the input and output of the postfilter.
+*
+**************************************************************************
+*/
+int agc (
+    agcState *st,      /* i/o : agc state                         */
+    Word16 *sig_in,    /* i   : postfilter input signal, (l_trm)  */
+    Word16 *sig_out,   /* i/o : postfilter output signal, (l_trm) */
+    Word16 agc_fac,    /* i   : AGC factor                        */
+    Word16 l_trm       /* i   : subframe size                     */
+);
+
+/*
+**************************************************************************
+*
+*  Function:  agc2
+*  Purpose:   Scales the excitation on a subframe basis
+*
+**************************************************************************
+*/
+void agc2 (
+    Word16 *sig_in,    /* i   : postfilter input signal   */
+    Word16 *sig_out,   /* i/o : postfilter output signal  */
+    Word16 l_trm       /* i   : subframe size             */
+);
+
+#endif