PRED_LT3.C
上传用户:meifeng08
上传日期:2013-06-18
资源大小:5304k
文件大小:2k
源码类别:

语音压缩

开发平台:

C/C++

  1. /*
  2.    ITU-T G.729A Speech Coder    ANSI-C Source Code
  3.    Version 1.1    Last modified: September 1996
  4.    Copyright (c) 1996,
  5.    AT&T, France Telecom, NTT, Universite de Sherbrooke
  6.    All rights reserved.
  7. */
  8. /*-------------------------------------------------------------------*
  9.  * Function  Pred_lt_3()                                             *
  10.  *           ~~~~~~~~~~~                                             *
  11.  *-------------------------------------------------------------------*
  12.  * Compute the result of long term prediction with fractional        *
  13.  * interpolation of resolution 1/3.                                  *
  14.  *                                                                   *
  15.  * On return exc[0..L_subfr-1] contains the interpolated signal      *
  16.  *   (adaptive codebook excitation)                                  *
  17.  *-------------------------------------------------------------------*/
  18. #include "typedef.h"
  19. #include "basic_op.h"
  20. #include "ld8a.h"
  21. #include "tab_ld8a.h"
  22. void Pred_lt_3(
  23.   Word16   exc[],       /* in/out: excitation buffer */
  24.   Word16   T0,          /* input : integer pitch lag */
  25.   Word16   frac,        /* input : fraction of lag   */
  26.   Word16   L_subfr      /* input : subframe size     */
  27. )
  28. {
  29.   Word16   i, j, k;
  30.   Word16   *x0, *x1, *x2, *c1, *c2;
  31.   Word32  s;
  32.   x0 = &exc[-T0];
  33.   frac = negate(frac);
  34.   if (frac < 0)
  35.   {
  36.     frac = add(frac, UP_SAMP);
  37.     x0--;
  38.   }
  39.   for (j=0; j<L_subfr; j++)
  40.   {
  41.     x1 = x0++;
  42.     x2 = x0;
  43.     c1 = &inter_3l[frac];
  44.     c2 = &inter_3l[sub(UP_SAMP,frac)];
  45.     s = 0;
  46.     for(i=0, k=0; i< L_INTER10; i++, k+=UP_SAMP)
  47.     {
  48.       s = L_mac(s, x1[-i], c1[k]);
  49.       s = L_mac(s, x2[i],  c2[k]);
  50.     }
  51.     exc[j] = round(s);
  52.   }
  53.   return;
  54. }