changeset 398:df14b0c17e6d

libtwamr: integrate pred_lt.c
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 06 May 2024 19:07:10 +0000
parents 9b699f30e6f3
children 3618b5cf25a6
files libtwamr/Makefile libtwamr/namespace.list libtwamr/pred_lt.c libtwamr/pred_lt.h
diffstat 4 files changed, 183 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/libtwamr/Makefile	Mon May 06 19:02:44 2024 +0000
+++ b/libtwamr/Makefile	Mon May 06 19:07:10 2024 +0000
@@ -10,10 +10,10 @@
 	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.o lsp_avg.o \
 	lsp_az.o lsp_lsf.o lsp_tab.o mac_32.o oper_32b.o ph_disp.o pitch_fr.o \
-	post_pro.o pow2.o pre_big.o pre_proc.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 residu.o s10_8pf.o \
-	set_sign.o sqrt_l.o syn_filt.o tls_flags.o weight_a.o window.o
+	post_pro.o pow2.o pre_big.o pre_proc.o pred_lt.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 residu.o \
+	s10_8pf.o set_sign.o sqrt_l.o syn_filt.o tls_flags.o weight_a.o window.o
 HDRS=	namespace.h
 LIB=	libtwamr.a
 
--- a/libtwamr/namespace.list	Mon May 06 19:02:44 2024 +0000
+++ b/libtwamr/namespace.list	Mon May 06 19:07:10 2024 +0000
@@ -30,6 +30,7 @@
 Pitch_fr Pitch_fr_reset
 Pre_Process Pre_Process_reset
 Post_Process Post_Process_reset
+Pred_lt_3or6
 Q_plsf_reset Q_plsf_3 Q_plsf_5 Qua_gain
 Residu Syn_filt Weight_Ai
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/pred_lt.c	Mon May 06 19:07:10 2024 +0000
@@ -0,0 +1,132 @@
+/*
+********************************************************************************
+*
+*      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             : pred_lt.c
+*      Purpose          : Compute the result of long term prediction
+*
+********************************************************************************
+*/
+
+/*
+********************************************************************************
+*                         MODULE INCLUDE FILE AND VERSION ID
+********************************************************************************
+*/
+#include "namespace.h"
+#include "pred_lt.h"
+ 
+/*
+********************************************************************************
+*                         INCLUDE FILES
+********************************************************************************
+*/
+#include "typedef.h"
+#include "basic_op.h"
+#include "no_count.h"
+#include "cnst.h"
+
+/*
+********************************************************************************
+*                         LOCAL VARIABLES AND TABLES
+********************************************************************************
+*/
+#define UP_SAMP_MAX  6
+#define L_INTER10    (L_INTERPOL-1)
+#define FIR_SIZE     (UP_SAMP_MAX*L_INTER10+1)
+
+/* 1/6 resolution interpolation filter  (-3 dB at 3600 Hz) */
+/* Note: the 1/3 resolution filter is simply a subsampled
+ *       version of the 1/6 resolution filter, i.e. it uses
+ *       every second coefficient:
+ *       
+ *          inter_3l[k] = inter_6[2*k], 0 <= k <= 3*L_INTER10
+ */
+static const Word16 inter_6[FIR_SIZE] =
+{
+    29443,
+    28346, 25207, 20449, 14701, 8693, 3143,
+    -1352, -4402, -5865, -5850, -4673, -2783,
+    -672, 1211, 2536, 3130, 2991, 2259,
+    1170, 0, -1001, -1652, -1868, -1666,
+    -1147, -464, 218, 756, 1060, 1099,
+    904, 550, 135, -245, -514, -634,
+    -602, -451, -231, 0, 191, 308,
+    340, 296, 198, 78, -36, -120,
+    -163, -165, -132, -79, -19, 34,
+    73, 91, 89, 70, 38, 0
+};
+
+/*
+********************************************************************************
+*                         PUBLIC PROGRAM CODE
+********************************************************************************
+*/
+/*************************************************************************
+ *
+ *  FUNCTION:   Pred_lt_3or6()
+ *
+ *  PURPOSE:  Compute the result of long term prediction with fractional
+ *            interpolation of resolution 1/3 or 1/6. (Interpolated past
+ *            excitation).
+ *
+ *  DESCRIPTION:
+ *       The past excitation signal at the given delay is interpolated at
+ *       the given fraction to build the adaptive codebook excitation.
+ *       On return exc[0..L_subfr-1] contains the interpolated signal
+ *       (adaptive codebook excitation).
+ *
+ *************************************************************************/
+void Pred_lt_3or6 (
+    Word16 exc[],     /* in/out: excitation buffer                         */
+    Word16 T0,        /* input : integer pitch lag                         */
+    Word16 frac,      /* input : fraction of lag                           */
+    Word16 L_subfr,   /* input : subframe size                             */
+    Word16 flag3      /* input : if set, upsampling rate = 3 (6 otherwise) */
+)
+{
+    Word16 i, j, k;
+    Word16 *x0, *x1, *x2;
+    const Word16 *c1, *c2;
+    Word32 s;
+
+    x0 = &exc[-T0];             move16 (); 
+
+    frac = negate (frac);
+    test();
+    if (flag3 != 0)
+    {
+      frac = shl (frac, 1);   /* inter_3l[k] = inter_6[2*k] -> k' = 2*k */
+    }
+    
+    test (); 
+    if (frac < 0)
+    {
+        frac = add (frac, UP_SAMP_MAX);
+        x0--;
+    }
+
+    for (j = 0; j < L_subfr; j++)
+    {
+        x1 = x0++;              move16 (); 
+        x2 = x0;                move16 (); 
+        c1 = &inter_6[frac];
+        c2 = &inter_6[sub (UP_SAMP_MAX, frac)];
+
+        s = 0;                  move32 (); 
+        for (i = 0, k = 0; i < L_INTER10; i++, k += UP_SAMP_MAX)
+        {
+            s = L_mac (s, x1[-i], c1[k]);
+            s = L_mac (s, x2[i], c2[k]);
+        }
+
+        exc[j] = round (s);     move16 (); 
+    }
+
+    return;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/pred_lt.h	Mon May 06 19:07:10 2024 +0000
@@ -0,0 +1,46 @@
+/*
+********************************************************************************
+*
+*      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             : pred_lt.h
+*      Purpose          : Compute the result of long term prediction.
+*
+*
+********************************************************************************
+*/
+#ifndef pred_lt_h
+#define pred_lt_h "$Id $"
+ 
+/*
+********************************************************************************
+*                         INCLUDE FILES
+********************************************************************************
+*/
+#include "typedef.h"
+ 
+/*
+********************************************************************************
+*                         DEFINITION OF DATA TYPES
+********************************************************************************
+*/
+ 
+/*
+********************************************************************************
+*                         DECLARATION OF PROTOTYPES
+********************************************************************************
+*/
+ 
+void Pred_lt_3or6 (
+    Word16 exc[],     /* in/out: excitation buffer                         */
+    Word16 T0,        /* input : integer pitch lag                         */
+    Word16 frac,      /* input : fraction of lag                           */
+    Word16 L_subfr,   /* input : subframe size                             */
+    Word16 flag3      /* input : if set, upsampling rate = 3 (6 otherwise) */
+);
+
+#endif