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

📄 cod_ld8a.c

📁 g729a 语音编码,再linux c 环境下实现,有非常的好的移植性,通话质量好
💻 C
📖 第 1 页 / 共 2 页
字号:
/*

   ITU-T G.729 Annex C - Reference C code for floating point

                         implementation of G.729 Annex A

                         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 : COD_LD8A.C

 Used for the floating point version of G.729A only

 (not for G.729 main body)

*/



/*-----------------------------------------------------------------*

 *   Functions coder_ld8a and init_coder_ld8a                      *

 *             ~~~~~~~~~~     ~~~~~~~~~~~~~~~                      *

 *                                                                 *

 *  init_coder_ld8a(void);                                         *

 *                                                                 *

 *   ->Initialization of variables for the coder section.          *

 *                                                                 *

 *                                                                 *

 *  coder_ld8a(Short ana[]);                                       *

 *                                                                 *

 *   ->Main coder function.                                        *

 *                                                                 *

 *                                                                 *

 *  Input:                                                         *

 *                                                                 *

 *    80 speech data should have beee copy to vector new_speech[]. *

 *    This vector is global and is declared in this function.      *

 *                                                                 *

 *  Ouputs:                                                        *

 *                                                                 *

 *    ana[]      ->analysis parameters.                            *

 *                                                                 *

 *-----------------------------------------------------------------*/



#include <math.h>

#include "typedef.h"

#include "ld8a.h"





/*-----------------------------------------------------------*

 *    Coder constant parameters (defined in "ld8a.h")        *

 *-----------------------------------------------------------*

 *   L_WINDOW    : LPC analysis window size.                 *

 *   L_NEXT      : Samples of next frame needed for autocor. *

 *   L_FRAME     : Frame size.                               *

 *   L_SUBFR     : Sub-frame size.                           *

 *   M           : LPC order.                                *

 *   MP1         : LPC order+1                               *

 *   L_TOTAL     : Total size of speech buffer.              *

 *   PIT_MIN     : Minimum pitch lag.                        *

 *   PIT_MAX     : Maximum pitch lag.                        *

 *   L_INTERPOL  : Length of filter for interpolation        *

 *-----------------------------------------------------------*/



/*--------------------------------------------------------*

 *         Static memory allocation.                      *

 *--------------------------------------------------------*/



        /* Speech vector */



 static FLOAT old_speech[L_TOTAL];

 static FLOAT *speech, *p_window;

 FLOAT *new_speech;                    /* Global variable */



        /* Weighted speech vector */



 static FLOAT old_wsp[L_FRAME+PIT_MAX];

 static FLOAT *wsp;



        /* Excitation vector */



 static FLOAT old_exc[L_FRAME+PIT_MAX+L_INTERPOL];

 static FLOAT *exc;



        /* LSP Line spectral frequencies */



 static FLOAT lsp_old[M] =

     { (F)0.9595,  (F)0.8413,  (F)0.6549,  (F)0.4154,  (F)0.1423,

      (F)-0.1423, (F)-0.4154, (F)-0.6549, (F)-0.8413, (F)-0.9595};



 static FLOAT lsp_old_q[M];



        /* Filter's memory */



 static FLOAT  mem_w0[M], mem_w[M], mem_zero[M];

 static FLOAT  sharp;



/*-----------------------------------------------------------------*

 *   Function  init_coder_ld8a                                     *

 *            ~~~~~~~~~~~~~~~                                      *

 *                                                                 *

 *  init_coder_ld8a(void);                                         *

 *                                                                 *

 *   ->Initialization of variables for the coder section.          *

 *       - initialize pointers to speech buffer                    *

 *       - initialize static  pointers                             *

 *       - set static vectors to zero                              *

 *-----------------------------------------------------------------*/



void init_coder_ld8a(void)

{



  /*----------------------------------------------------------------------*

  *      Initialize pointers to speech vector.                            *

  *                                                                       *

  *                                                                       *

  *   |--------------------|-------------|-------------|------------|     *

  *     previous speech           sf1           sf2         L_NEXT        *

  *                                                                       *

  *   <----------------  Total speech vector (L_TOTAL)   ----------->     *

  *   <----------------  LPC analysis window (L_WINDOW)  ----------->     *

  *   |                   <-- present frame (L_FRAME) -->                 *

  * old_speech            |              <-- new speech (L_FRAME) -->     *

  * p_window              |              |                                *

  *                     speech           |                                *

  *                             new_speech                                *

  *-----------------------------------------------------------------------*/



   new_speech = old_speech + L_TOTAL - L_FRAME;         /* New speech     */

   speech     = new_speech - L_NEXT;                    /* Present frame  */

   p_window   = old_speech + L_TOTAL - L_WINDOW;        /* For LPC window */



   /* Initialize static pointers */



   wsp    = old_wsp + PIT_MAX;

   exc    = old_exc + PIT_MAX + L_INTERPOL;



   /* Static vectors to zero */



   set_zero(old_speech, L_TOTAL);

   set_zero(old_exc, PIT_MAX+L_INTERPOL);

   set_zero(old_wsp, PIT_MAX);

   set_zero(mem_w,   M);

   set_zero(mem_w0,  M);

   set_zero(mem_zero, M);

   sharp = SHARPMIN;



   copy(lsp_old, lsp_old_q, M);



   lsp_encw_reset() ;

   init_exc_err();



   return;

}



/*-----------------------------------------------------------------*

 *   Function coder_ld8a                                           *

 *            ~~~~~~~~~~                                           *

 *  coder_ld8a(int    ana[]);                                      *

 *                                                                 *

 *   ->Main coder function.                                        *

 *                                                                 *

 *                                                                 *

 *  Input:                                                         *

 *                                                                 *

 *    80 speech data should have beee copy to vector new_speech[]. *

 *    This vector is global and is declared in this function.      *

 *                                                                 *

 *  Ouputs:                                                        *

 *                                                                 *

 *    ana[]      ->analysis parameters.                            *

 *                                                                 *

 *-----------------------------------------------------------------*/



void coder_ld8a(

 int ana[]                   /* output: analysis parameters */

)

{

   /* LPC coefficients */



   FLOAT Aq_t[(MP1)*2];         /* A(z) quantized for the 2 subframes   */

   FLOAT Ap_t[(MP1)*2];         /* A(z) with spectral expansion         */

   FLOAT *Aq, *Ap;              /* Pointer on Aq_t  and Ap_t            */



   /* Other vectors */



   FLOAT h1[L_SUBFR];           /* Impulse response h1[]              */

   FLOAT xn[L_SUBFR];           /* Target vector for pitch search     */

   FLOAT xn2[L_SUBFR];          /* Target vector for codebook search  */

   FLOAT code[L_SUBFR];         /* Fixed codebook excitation          */

   FLOAT y1[L_SUBFR];           /* Filtered adaptive excitation       */

   FLOAT y2[L_SUBFR];           /* Filtered fixed codebook excitation */

   FLOAT g_coeff[5];            /* Correlations between xn, y1, & y2:

                                   <y1,y1>, <xn,y1>, <y2,y2>, <xn,y2>,<y1,y2>*/



   /* Scalars */



   int i, j, i_subfr;

   int T_op, T0, T0_min, T0_max, T0_frac;

   int index;

   FLOAT   gain_pit, gain_code;

   int     taming;



/*------------------------------------------------------------------------*

 *  - Perform LPC analysis:                                               *

 *       * autocorrelation + lag windowing                                *

 *       * Levinson-durbin algorithm to find a[]                          *

 *       * convert a[] to lsp[]                                           *

 *       * quantize and code the LSPs                                     *

⌨️ 快捷键说明

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