123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- /*
- ********************************************************************************
- *
- * 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 "pred_lt.h"
- const char pred_lt_id[] = "@(#)$Id $" pred_lt_h;
-
- /*
- ********************************************************************************
- * INCLUDE FILES
- ********************************************************************************
- */
- #include "typedef.h"
- #include "basic_op.h"
- #include "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_ex (frac);
- test();
- if (flag3 != 0)
- {
- frac = shl_ex (frac, 1); /* inter_3l[k] = inter_6[2*k] -> k' = 2*k */
- }
-
- test ();
- if (frac < 0)
- {
- frac = add_ex (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_ex (UP_SAMP_MAX, frac)];
- s = 0; move32 ();
- for (i = 0, k = 0; i < L_INTER10; i++, k += UP_SAMP_MAX)
- {
- s = L_mac_ex (s, x1[-i], c1[k]);
- s = L_mac_ex (s, x2[i], c2[k]);
- }
- exc[j] = round_ex (s); move16 ();
- }
- return;
- }
|