⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.c

📁 语音编码G.729 语音编码G.729
💻 C
字号:
/*   ITU-T G.729 Annex C - Reference C code for floating point                         implementation of G.729                         Version 1.01 of 15.September.98*//*----------------------------------------------------------------------                    COPYRIGHT NOTICE----------------------------------------------------------------------   ITU-T G.729 Annex C ANSI C source code   Copyright (C) 1998, AT&T, France Telecom, NTT, University of   Sherbrooke.  All rights reserved.----------------------------------------------------------------------*//* File : UTIL.C Used for the floating point version of both G.729 main body and G.729A*//*****************************************************************************//* auxiliary functions                                                       *//*****************************************************************************/#include "typedef.h"#include "ld8a.h"#ifndef INLINE_FUNCS/*-------------------------------------------------------------------* * Function  set zero()                                              * *           ~~~~~~~~~~                                              * * Set vector x[] to zero                                            * *-------------------------------------------------------------------*/void set_zero(FLOAT dst[], int L){   int i;   for (i = 0; i < L; i++)     dst[i] = (F)0.0;}/*-------------------------------------------------------------------* * Function  copy:                                                   * *           ~~~~~                                                   * * Copy vector x[] to y[]                                            * *-------------------------------------------------------------------*/void copy(const FLOAT src[], FLOAT dst[], int L){   int i;   for (i = 0; i < L; i++)     dst[i] = src[i];}/* Random generator  */INT16 random_g729(INT16 *seed){	return *seed = (INT16) ((*seed) * 31821L + 13849L);}#endif /* INLINE_FUNCS */void get_freq_prev(const FLOAT freq_prev[MA_NP][M], FLOAT x[MA_NP][M]){	int i;	for (i=0; i<MA_NP; i++)		copy(&freq_prev[i][0], &x[i][0], M);}  void update_freq_prev(FLOAT freq_prev[MA_NP][M], const FLOAT x[MA_NP][M]){	int i;	for (i=0; i<MA_NP; i++)		copy(&x[i][0], &freq_prev[i][0], M);}/*-----------------------------------------------------------* * fwrite16 - writes a FLOAT array as a Short to a a file    * *-----------------------------------------------------------*/void fwrite16( FLOAT *data,           /* input: inputdata */ int length,          /* input: length of data array */ FILE *fp               /* input: file pointer */){   int  i;   INT16 sp16[L_FRAME];   FLOAT temp;   if (length > L_FRAME) {      printf("error in fwrite16\n");      exit(16);   }   for(i=0; i<length; i++)    {      /* round and convert to int  */      temp = data[i];      if (temp >= (F)0.0)            temp += (F)0.5;      else  temp -= (F)0.5;      if (temp >  (F)32767.0 ) temp =  (F)32767.0;      if (temp < (F)-32768.0 ) temp = (F)-32768.0;      sp16[i] = (INT16) temp;    }    fwrite( sp16, sizeof(INT16), length, fp);}/*****************************************************************************//* Functions used by VAD.C                                                   *//*****************************************************************************/void dvsub(FLOAT *in1, FLOAT *in2, FLOAT *out, int npts){    while (npts--)  *(out++) = *(in1++) - *(in2++);}FLOAT dvdot(FLOAT *in1, FLOAT *in2, int npts){    FLOAT accum;        accum = (F)0.0;    while (npts--)  accum += *(in1++) * *(in2++);    return(accum);}void dvwadd(FLOAT *in1, FLOAT scalar1, FLOAT *in2, FLOAT scalar2,                        FLOAT *out, int npts){    while (npts--)  *(out++) = *(in1++) * scalar1 + *(in2++) * scalar2;}void dvsmul(FLOAT *in, FLOAT scalar, FLOAT *out, int npts){    while (npts--)  *(out++) = *(in++) * scalar;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -