dec_lag3.c
上传用户:zhouyunkk
上传日期:2013-01-10
资源大小:59k
文件大小:2k
源码类别:

语音压缩

开发平台:

C/C++

  1. /*
  2.    ITU-T G.729 Annex C - Reference C code for floating point
  3.                          implementation of G.729
  4.                          Version 1.01 of 15.September.98
  5. */
  6. /*
  7. ----------------------------------------------------------------------
  8.                     COPYRIGHT NOTICE
  9. ----------------------------------------------------------------------
  10.    ITU-T G.729 Annex C ANSI C source code
  11.    Copyright (C) 1998, AT&T, France Telecom, NTT, University of
  12.    Sherbrooke.  All rights reserved.
  13. ----------------------------------------------------------------------
  14. */
  15. /*
  16.  File : DEC_LAG3.C
  17.  Used for the floating point version of both
  18.  G.729 main body and G.729A
  19. */
  20. #include "typedef.h"
  21. #include "version.h"
  22. #ifdef VER_G729A
  23.  #include "ld8a.h"
  24. #else
  25.  #include "ld8k.h"
  26. #endif
  27. /*------------------------------------------------------------------------*
  28.  *    Function dec_lag3                                                   *
  29.  *             ~~~~~~~~                                                   *
  30.  *   Decoding of fractional pitch lag with 1/3 resolution.                *
  31.  * See "enc_lag3.c" for more details about the encoding procedure.        *
  32.  *------------------------------------------------------------------------*/
  33. void dec_lag3(     /* Decode the pitch lag                   */
  34.   int index,       /* input : received pitch index           */
  35.   int pit_min,     /* input : minimum pitch lag              */
  36.   int pit_max,     /* input : maximum pitch lag              */
  37.   int i_subfr,     /* input : subframe flag                  */
  38.   int *T0,         /* output: integer part of pitch lag      */
  39.   int *T0_frac     /* output: fractional part of pitch lag   */
  40. )
  41. {
  42.   int i;
  43.   int T0_min, T0_max;
  44.   if (i_subfr == 0)                  /* if 1st subframe */
  45.   {
  46.     if (index < 197)
  47.     {
  48.        *T0 = (index+2)/3 + 19;
  49.        *T0_frac = index - *T0*3 + 58;
  50.     }
  51.     else
  52.     {
  53.       *T0 = index - 112;
  54.       *T0_frac = 0;
  55.     }
  56.   }
  57.   else  /* second subframe */
  58.   {
  59.     /* find T0_min and T0_max for 2nd subframe */
  60.     T0_min = *T0 - 5;
  61.     if (T0_min < pit_min)
  62.       T0_min = pit_min;
  63.     T0_max = T0_min + 9;
  64.     if(T0_max > pit_max)
  65.     {
  66.       T0_max = pit_max;
  67.       T0_min = T0_max -9;
  68.     }
  69.     i = (index+2)/3 - 1;
  70.     *T0 = i + T0_min;
  71.     *T0_frac = index - 2 - i*3;
  72.   }
  73.   return;
  74. }