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

📄 g729ev_celp2s_acelp_ca.c

📁 最新的ITU-T的宽带语音编解码标准G.729.1,是对原先的G.729的最好的调整.码流输出速率可以进行自适应调整.满足未来通信要求.希望对大家有所帮助.
💻 C
📖 第 1 页 / 共 4 页
字号:
/* ITU-T G.729EV Optimization/Characterization Candidate                         *//* Version:       1.0.a                                                          *//* Revision Date: June 28, 2006                                                  *//*   ITU-T G.729EV Optimization/Characterization Candidate    ANSI-C Source Code   Copyright (c) 2006    France Telecom, Matsushita Electric, Mindspeed, Siemens AG, ETRI, VoiceAge Corp.   All rights reserved*/#include "G729EV_CELP2S_acelp_ca.h"/*--------------------------------------------------------------------------* * Function  G729EV_G729_cor_h_OTH()                            * * Compute  correlations of h[] needed for the codebook search.             * *--------------------------------------------------------------------------*/void G729EV_CELP2S_cor_h_OTH(Word16 * h,  /* (i) Q12 : Impulse response of filters  */                             Word16 * rr, /* (o)     : Correlation of H[]           */                             Word16 * y1){  Word32    cor;  Word32    ACC0;  Word32    tmp32[G729EV_G729_L_SUBFR];  Word32    Max_ACC0;  Word16    h_scaled[G729EV_G729_L_SUBFR];  Word16    tmp[G729EV_G729_L_SUBFR];  Word16   *rri0i0, *rri1i1, *rri2i2, *rri3i3, *rri4i4;  Word16   *rri0i1, *rri0i2, *rri0i3, *rri0i4;  Word16   *rri1i2, *rri1i3, *rri1i4;  Word16   *rri2i3, *rri2i4;  Word16   *p0, *p1, *p2, *p3, *p4;  Word16   *p01, *p02, *p03, *p04, *p12, *p13, *p14, *p23, *p24;  Word16   *ptr_hd, *ptr_hf, *ptr_h1, *ptr_h2;  Word16    rt0, rt1, rt2, rt3, rt4;  Word16    i, ii, j, jj;  Word16    k, kk, shift;  Word16    ldec, l_fin_sup, l_fin_inf;  Word16    r1;  Word16    tmp16;  Word16    shift_div;  Word16    shift_y1;  Word32   *ptr32;  Word16   *ptr16, *ptr16tmp;  /* Scaling h[] for maximum precision */  cor = (Word32) 0;#if (WMOPS)  move32();#endif  FOR(i = 0; i < G729EV_G729_L_SUBFR; i++)    cor = L_mac(cor, h[i], h[i]);  IF(sub(extract_h(cor), 32000) > 0)  {    /* shift right h --> h_scaled */    shift = (Word16) - 1;#if (WMOPS)    move16();#endif    ptr_hd = h_scaled;    FOR(i = 0; i < G729EV_G729_L_SUBFR; i++)    {#if (WMOPS)      move16();#endif      *ptr_hd++ = shr(h[i], 1);    }  }  ELSE  {    /* shift left h --> h_scaled */    shift = norm_l(cor);    shift = shr(shift, 1);    ptr_hd = h_scaled;    FOR(i = 0; i < G729EV_G729_L_SUBFR; i++)    {#if (WMOPS)      move16();#endif      *ptr_hd++ = shl(h[i], shift);    }  }  /*------------------------------------------------------------*   * Compute rri0i0[], rri1i1[], rri2i2[], rri3i3 and rri4i4[]  *   *------------------------------------------------------------*/  /* Init pointers */  rri0i0 = rr;  rri1i1 = rri0i0 + G729EV_G729_NB_POS; /* 8 */  rri2i2 = rri1i1 + G729EV_G729_NB_POS;  rri3i3 = rri2i2 + G729EV_G729_NB_POS;  rri4i4 = rri3i3 + G729EV_G729_NB_POS;  rri0i1 = rri4i4 + G729EV_G729_NB_POS;  rri0i2 = rri0i1 + G729EV_G729_MSIZE;  /* 16 */  rri0i3 = rri0i2 + G729EV_G729_MSIZE;  rri0i4 = rri0i3 + G729EV_G729_MSIZE;  rri1i2 = rri0i4 + G729EV_G729_MSIZE;  rri1i3 = rri1i2 + G729EV_G729_MSIZE;  rri1i4 = rri1i3 + G729EV_G729_MSIZE;  rri2i3 = rri1i4 + G729EV_G729_MSIZE;  rri2i4 = rri2i3 + G729EV_G729_MSIZE;  p0 = rri0i0 + G729EV_G729_NB_POS - 1; /* Init pointers to last position of rrixix[] */  p1 = rri1i1 + G729EV_G729_NB_POS - 1;  p2 = rri2i2 + G729EV_G729_NB_POS - 1;  p3 = rri3i3 + G729EV_G729_NB_POS - 1;  p4 = rri4i4 + G729EV_G729_NB_POS - 1;#if (WMOPS)  move32();#endif  ptr_h1 = h_scaled;  cor = (Word32) 0;  FOR(i = 0; i < G729EV_G729_NB_POS; i++)  {    cor = L_mac(cor, *ptr_h1, *ptr_h1);    ptr_h1++;    *p4-- = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h1);    ptr_h1++;    *p3-- = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h1);    ptr_h1++;    *p2-- = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h1);    ptr_h1++;    *p1-- = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h1);    ptr_h1++;    *p0-- = extract_h(cor);#if(WMOPS)    move16();#endif  }  /*-----------------------------------------------------------------*   * Compute elements of: rri2i3[], rri1i2[], rri0i1[] and rri0i4[]  *   *-----------------------------------------------------------------*/#if (WMOPS)  move16();  move16();  move16();#endif  l_fin_sup = G729EV_G729_MSIZE - 1;  l_fin_inf = l_fin_sup - 1;  ldec = G729EV_G729_NB_POS + 1;  ptr_hd = h_scaled;  ptr_hf = ptr_hd + 1;  FOR(k = 0; k < G729EV_G729_NB_POS; k++)  {    p3 = rri2i3 + l_fin_sup;    p2 = rri1i2 + l_fin_sup;    p1 = rri0i1 + l_fin_sup;    p0 = rri0i4 + l_fin_inf;#if (WMOPS)    move32();#endif    cor = (Word32) 0;    ptr_h1 = ptr_hd;    ptr_h2 = ptr_hf;    FOR(i = k + 1; i < G729EV_G729_NB_POS; i++)    {      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p3 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p2 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p1 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p0 = extract_h(cor);#if(WMOPS)      move16();#endif      p3 -= ldec;      p2 -= ldec;      p1 -= ldec;      p0 -= ldec;    }    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    *p3 = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    *p2 = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    *p1 = extract_h(cor);#if(WMOPS)    move16();#endif    l_fin_sup -= G729EV_G729_NB_POS;    l_fin_inf--;    ptr_hf += G729EV_G729_STEP;  }  /*---------------------------------------------------------------------*   * Compute elements of: rri2i4[], rri1i3[], rri0i2[], rri1i4[], rri0i3 *   *---------------------------------------------------------------------*/#if (WMOPS)  move16();  move16();#endif  ptr_hd = h_scaled;  ptr_hf = ptr_hd + 2;  l_fin_sup = G729EV_G729_MSIZE - 1;  l_fin_inf = l_fin_sup - 1;  FOR(k = 0; k < G729EV_G729_NB_POS; k++)  {    p4 = rri2i4 + l_fin_sup;    p3 = rri1i3 + l_fin_sup;    p2 = rri0i2 + l_fin_sup;    p1 = rri1i4 + l_fin_inf;    p0 = rri0i3 + l_fin_inf;#if (WMOPS)    move32();#endif    cor = (Word32) 0;    ptr_h1 = ptr_hd;    ptr_h2 = ptr_hf;    FOR(i = k + (Word16) 1; i < G729EV_G729_NB_POS; i++)    {      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p4 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p3 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p2 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p1 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p0 = extract_h(cor);#if(WMOPS)      move16();#endif      p4 -= ldec;      p3 -= ldec;      p2 -= ldec;      p1 -= ldec;      p0 -= ldec;    }    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    *p4 = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    *p3 = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    *p2 = extract_h(cor);#if(WMOPS)    move16();#endif    l_fin_sup -= G729EV_G729_NB_POS;    l_fin_inf--;    ptr_hf += G729EV_G729_STEP;  }  /*----------------------------------------------------------------------*   * Compute elements of: rri1i4[], rri0i3[], rri2i4[], rri1i3[], rri0i2  *   *----------------------------------------------------------------------*/#if (WMOPS)  move16();  move16();#endif  ptr_hd = h_scaled;  ptr_hf = ptr_hd + 3;  l_fin_sup = G729EV_G729_MSIZE - 1;  l_fin_inf = l_fin_sup - 1;  FOR(k = 0; k < G729EV_G729_NB_POS; k++)  {    p4 = rri1i4 + l_fin_sup;    p3 = rri0i3 + l_fin_sup;    p2 = rri2i4 + l_fin_inf;    p1 = rri1i3 + l_fin_inf;    p0 = rri0i2 + l_fin_inf;#if (WMOPS)    move32();#endif    ptr_h1 = ptr_hd;    ptr_h2 = ptr_hf;    cor = (Word32) 0;    FOR(i = k + (Word16) 1; i < G729EV_G729_NB_POS; i++)    {      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p4 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p3 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p2 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p1 = extract_h(cor);#if(WMOPS)      move16();#endif      cor = L_mac(cor, *ptr_h1, *ptr_h2);      ptr_h1++;      ptr_h2++;      *p0 = extract_h(cor);#if(WMOPS)      move16();#endif      p4 -= ldec;      p3 -= ldec;      p2 -= ldec;      p1 -= ldec;      p0 -= ldec;    }    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    *p4 = extract_h(cor);#if(WMOPS)    move16();#endif    cor = L_mac(cor, *ptr_h1, *ptr_h2);    ptr_h1++;    ptr_h2++;    *p3 = extract_h(cor);#if(WMOPS)    move16();#endif    l_fin_sup -= G729EV_G729_NB_POS;    l_fin_inf--;    ptr_hf += G729EV_G729_STEP;  }  /*----------------------------------------------------------------------*   * Compute elements of: rri0i4[], rri2i3[], rri1i2[], rri0i1[]          *   *----------------------------------------------------------------------*/#if (WMOPS)  move16();  move16();#endif  ptr_hd = h_scaled;  ptr_hf = ptr_hd + 4;  l_fin_sup = G729EV_G729_MSIZE - 1;  l_fin_inf = l_fin_sup - 1;  FOR(k = 0; k < G729EV_G729_NB_POS; k++)  {    p3 = rri0i4 + l_fin_sup;    p2 = rri2i3 + l_fin_inf;    p1 = rri1i2 + l_fin_inf;    p0 = rri0i1 + l_fin_inf;

⌨️ 快捷键说明

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