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

语音压缩

开发平台:

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 : UTIL.C
  17.  Used for the floating point version of both
  18.  G.729 main body and G.729A
  19. */
  20. /*****************************************************************************/
  21. /* auxiliary functions                                                       */
  22. /*****************************************************************************/
  23. #include "typedef.h"
  24. #include "version.h"
  25. #ifdef VER_G729A
  26.  #include "ld8a.h"
  27. #else
  28.  #include "ld8k.h"
  29. #endif
  30. /*-------------------------------------------------------------------*
  31.  * Function  set zero()                                              *
  32.  *           ~~~~~~~~~~                                              *
  33.  * Set vector x[] to zero                                            *
  34.  *-------------------------------------------------------------------*/
  35. void set_zero(
  36.   FLOAT  x[],       /* (o)    : vector to clear     */
  37.   int L             /* (i)    : length of vector    */
  38. )
  39. {
  40.    int i;
  41.    for (i = 0; i < L; i++)
  42.      x[i] = (F)0.0;
  43.    return;
  44. }
  45. /*-------------------------------------------------------------------*
  46.  * Function  copy:                                                   *
  47.  *           ~~~~~                                                   *
  48.  * Copy vector x[] to y[]                                            *
  49.  *-------------------------------------------------------------------*/
  50. void copy(
  51.   FLOAT  x[],      /* (i)   : input vector   */
  52.   FLOAT  y[],      /* (o)   : output vector  */
  53.   int L            /* (i)   : vector length  */
  54. )
  55. {
  56.    int i;
  57.    for (i = 0; i < L; i++)
  58.      y[i] = x[i];
  59.    return;
  60. }
  61. /* Random generator  */
  62. INT16 random_g729(void)
  63. {
  64.   static INT16 seed = 21845;
  65.   seed = (INT16) (seed * 31821L + 13849L);
  66.   return(seed);
  67. }
  68. /*-----------------------------------------------------------*
  69.  * fwrite16 - writes a FLOAT array as a Short to a a file    *
  70.  *-----------------------------------------------------------*/
  71. void fwrite16(
  72.  FLOAT *data,           /* input: inputdata */
  73.  int length,          /* input: length of data array */
  74.  FILE *fp               /* input: file pointer */
  75. )
  76. {
  77.    int  i;
  78.    INT16 sp16[L_FRAME];
  79.    FLOAT temp;
  80.    if (length > L_FRAME) {
  81.       printf("error in fwrite16n");
  82.       exit(16);
  83.    }
  84.    for(i=0; i<length; i++)
  85.     {
  86.       /* round and convert to int  */
  87.       temp = data[i];
  88.       if (temp >= (F)0.0)
  89.             temp += (F)0.5;
  90.       else  temp -= (F)0.5;
  91.       if (temp >  (F)32767.0 ) temp =  (F)32767.0;
  92.       if (temp < (F)-32768.0 ) temp = (F)-32768.0;
  93.       sp16[i] = (INT16) temp;
  94.     }
  95.     fwrite( sp16, sizeof(INT16), length, fp);
  96. }