changeset 386:9adfe3863a41

libtwamr: integrate lpc.c
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 06 May 2024 06:24:26 +0000
parents c713061b6edf
children 7818f466a639
files libtwamr/Makefile libtwamr/lpc.c libtwamr/lpc.h libtwamr/namespace.list
diffstat 4 files changed, 166 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libtwamr/Makefile	Mon May 06 06:01:56 2024 +0000
+++ b/libtwamr/Makefile	Mon May 06 06:24:26 2024 +0000
@@ -8,11 +8,11 @@
 	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 lsfwt.o lsp_az.o lsp_lsf.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 set_sign.o sqrt_l.o \
-	tls_flags.o window.o
+	inv_sqrt.o lag_wind.o levinson.o log2.o lpc.o lsfwt.o lsp_az.o \
+	lsp_lsf.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 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/lpc.c	Mon May 06 06:24:26 2024 +0000
@@ -0,0 +1,97 @@
+/*
+********************************************************************************
+*
+*      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             : lpc.c
+*
+********************************************************************************
+*/
+
+/*
+********************************************************************************
+*                         MODULE INCLUDE FILE AND VERSION ID
+********************************************************************************
+*/
+#include "namespace.h"
+#include "lpc.h"
+
+/*
+********************************************************************************
+*                         INCLUDE FILES
+********************************************************************************
+*/
+#include "tw_amr.h"
+#include "typedef.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "autocorr.h"
+#include "lag_wind.h"
+#include "levinson.h"
+#include "cnst.h"
+#include "no_count.h"
+#include "window.h"
+
+/*
+********************************************************************************
+*                         PUBLIC PROGRAM CODE
+********************************************************************************
+*/
+ 
+/*************************************************************************
+*
+*  Function:   lpc_reset
+*
+**************************************************************************
+*/
+void lpc_reset (lpcState *state)
+{
+  Levinson_reset(&state->levinsonSt);
+}
+
+int lpc(
+    lpcState *st,     /* i/o: State struct                */
+    enum Mode mode,   /* i  : coder mode                  */
+    Word16 x[],       /* i  : Input signal           Q15  */
+    Word16 x_12k2[],  /* i  : Input signal (EFR)     Q15  */
+    Word16 a[]        /* o  : predictor coefficients Q12  */
+)
+{
+   Word16 rc[4];                  /* First 4 reflection coefficients Q15 */
+   Word16 rLow[MP1], rHigh[MP1];  /* Autocorrelations low and hi      */
+                                  /* No fixed Q value but normalized  */
+                                  /* so that overflow is avoided      */
+   
+   test ();
+   if ( sub (mode, MR122) == 0)
+   {
+       /* Autocorrelations */
+       Autocorr(x_12k2, M, rHigh, rLow, window_160_80);              
+       /* Lag windowing    */
+       Lag_window(M, rHigh, rLow);                                   
+       /* Levinson Durbin  */
+       Levinson(&st->levinsonSt, rHigh, rLow, &a[MP1], rc);
+
+       /* Autocorrelations */
+       Autocorr(x_12k2, M, rHigh, rLow, window_232_8);                  
+       /* Lag windowing    */
+       Lag_window(M, rHigh, rLow);                                  
+       /* Levinson Durbin  */
+       Levinson(&st->levinsonSt, rHigh, rLow, &a[MP1 * 3], rc);
+   }
+   else
+   {
+       /* Autocorrelations */
+       Autocorr(x, M, rHigh, rLow, window_200_40);                 
+       /* Lag windowing    */
+       Lag_window(M, rHigh, rLow);                                   
+       /* Levinson Durbin  */
+       Levinson(&st->levinsonSt, rHigh, rLow, &a[MP1 * 3], rc);
+   }
+
+   return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/lpc.h	Mon May 06 06:24:26 2024 +0000
@@ -0,0 +1,63 @@
+/*
+********************************************************************************
+*
+*      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             : lpc.h
+*      Purpose          : 2 LP analyses centered at 2nd and 4th subframe
+*                         for mode 12.2. For all other modes a
+*                         LP analysis centered at 4th subframe is 
+*                         performed.
+*
+********************************************************************************
+*/
+#ifndef lpc_h
+#define lpc_h "$Id $"
+
+/*
+********************************************************************************
+*                         INCLUDE FILES
+********************************************************************************
+*/
+#include "tw_amr.h"
+#include "typedef.h"
+#include "levinson.h"
+
+/*
+********************************************************************************
+*                         LOCAL VARIABLES AND TABLES
+********************************************************************************
+*/
+/*
+********************************************************************************
+*                         DEFINITION OF DATA TYPES
+********************************************************************************
+*/
+typedef struct {
+   LevinsonState levinsonSt;
+} lpcState;
+
+/*
+********************************************************************************
+*                         DECLARATION OF PROTOTYPES
+********************************************************************************
+*/
+ 
+void lpc_reset (lpcState *st);
+/* reset of pre processing state (i.e. set state memory to zero)
+   returns 0 on success
+ */
+
+int lpc(
+    lpcState *st,     /* i/o: State struct                */
+    enum Mode mode,   /* i  : coder mode                  */
+    Word16 x[],       /* i  : Input signal           Q15  */
+    Word16 x_12k2[],  /* i  : Input signal (EFR)     Q15  */
+    Word16 a[]        /* o  : predictor coefficients Q12  */
+);
+
+#endif
--- a/libtwamr/namespace.list	Mon May 06 06:01:56 2024 +0000
+++ b/libtwamr/namespace.list	Mon May 06 06:24:26 2024 +0000
@@ -40,6 +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
 q_gain_code q_gain_pitch
 
 Bits2prm Prm2bits