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

📄 g729ev_g729_qua_gain.c

📁 最新的ITU-T的宽带语音编解码标准G.729.1,是对原先的G.729的最好的调整.码流输出速率可以进行自适应调整.满足未来通信要求.希望对大家有所帮助.
💻 C
📖 第 1 页 / 共 2 页
字号:
  FOR(i = 0; i < 5; i++)  {    j = sub(exp_min[i], e_min);    L_tmp = L_deposit_h(g_coeff[i]);    L_tmp = L_shr(L_tmp, j);    /* L_tmp:Q[exp_g_coeff[i]+16-j] */    L_Extract(L_tmp, &coeff[i], &coeff_lsf[i]); /* DPF */  }  /* Codebook search */#if (WMOPS)  move32();  move16();  move16();#endif  L_dist_min = MAX_32;  /* initialization used only to suppress Microsoft Visual C++  warnings */  index1 = cand1;  index2 = cand2;  IF(sub(tameflag, 1) == 0)  {    FOR(i = 0; i < G729EV_G729_NCAN1; i++)    {      FOR(j = 0; j < G729EV_G729_NCAN2; j++)      {        g_pitch = add(gbk1[cand1 + i][0], gbk2[cand2 + j][0]);  /* Q14 */        IF(sub(g_pitch, G729EV_G729_GP0999) < 0)        {          L_acc = L_deposit_l(gbk1[cand1 + i][1]);          L_accb = L_deposit_l(gbk2[cand2 + j][1]); /* Q13 */          L_tmp = L_add(L_acc, L_accb);          tmp = extract_l(L_shr(L_tmp, 1)); /* Q12 */          g_code = mult(gcode0, tmp); /*  Q[exp_gcode0+12-15] */          g2_pitch = mult(g_pitch, g_pitch);  /* Q13 */          g2_code = mult(g_code, g_code); /* Q[2*exp_gcode0-6-15] */          g_pit_cod = mult(g_code, g_pitch);  /* Q[exp_gcode0-3+14-15] */          L_tmp = Mpy_32_16(coeff[0], coeff_lsf[0], g2_pitch);          L_tmp = L_add(L_tmp, Mpy_32_16(coeff[1], coeff_lsf[1], g_pitch));          L_tmp = L_add(L_tmp, Mpy_32_16(coeff[2], coeff_lsf[2], g2_code));          L_tmp = L_add(L_tmp, Mpy_32_16(coeff[3], coeff_lsf[3], g_code));          L_tmp = L_add(L_tmp, Mpy_32_16(coeff[4], coeff_lsf[4], g_pit_cod));          L_temp = L_sub(L_tmp, L_dist_min);          IF(L_temp < 0L)          {#if (WMOPS)            move32();#endif            L_dist_min = L_tmp;            index1 = add(cand1, i);            index2 = add(cand2, j);          }        }      }    }  }  ELSE  {    FOR(i = 0; i < G729EV_G729_NCAN1; i++)    {      FOR(j = 0; j < G729EV_G729_NCAN2; j++)      {        g_pitch = add(gbk1[cand1 + i][0], gbk2[cand2 + j][0]);  /* Q14 */        L_acc = L_deposit_l(gbk1[cand1 + i][1]);        L_accb = L_deposit_l(gbk2[cand2 + j][1]); /* Q13 */        L_tmp = L_add(L_acc, L_accb);        tmp = extract_l(L_shr(L_tmp, 1)); /* Q12 */        g_code = mult(gcode0, tmp); /*  Q[exp_gcode0+12-15] */        g2_pitch = mult(g_pitch, g_pitch);  /* Q13 */        g2_code = mult(g_code, g_code); /* Q[2*exp_gcode0-6-15] */        g_pit_cod = mult(g_code, g_pitch);  /* Q[exp_gcode0-3+14-15] */        L_tmp = Mpy_32_16(coeff[0], coeff_lsf[0], g2_pitch);        L_tmp = L_add(L_tmp, Mpy_32_16(coeff[1], coeff_lsf[1], g_pitch));        L_tmp = L_add(L_tmp, Mpy_32_16(coeff[2], coeff_lsf[2], g2_code));        L_tmp = L_add(L_tmp, Mpy_32_16(coeff[3], coeff_lsf[3], g_code));        L_tmp = L_add(L_tmp, Mpy_32_16(coeff[4], coeff_lsf[4], g_pit_cod));        L_temp = L_sub(L_tmp, L_dist_min);        IF(L_temp < 0L)        {#if (WMOPS)          move32();#endif          L_dist_min = L_tmp;          index1 = add(cand1, i);          index2 = add(cand2, j);        }      }    }  }  /* Read the quantized gain */  /*-----------------------------------------------------------------*   * *gain_pit = gbk1[indice1][0] + gbk2[indice2][0];                *   *-----------------------------------------------------------------*/#if (WMOPS)  move16();#endif  *gain_pit = add(gbk1[index1][0], gbk2[index2][0]);  /* Q14 */  /*-----------------------------------------------------------------*   * *gain_code = (gbk1[indice1][1]+gbk2[indice2][1]) * gcode0;      *   *-----------------------------------------------------------------*/  L_acc = L_deposit_l(gbk1[index1][1]);  L_accb = L_deposit_l(gbk2[index2][1]);  L_gbk12 = L_add(L_acc, L_accb); /* Q13 */  tmp = extract_l(L_shr(L_gbk12, 1)); /* Q12 */  L_acc = L_mult(tmp, gcode0);  /* Q[exp_gcode0+12+1] */  L_acc = L_shl(L_acc, add(negate(exp_gcode0), (-12 - 1 + 1 + 16)));  *gain_cod = extract_h(L_acc); /* Q1 */#if (WMOPS)  move16();#endif  /*----------------------------------------------*   * update table of past quantized energies      *   *----------------------------------------------*/  G729EV_G729_Gain_update(past_qua_en, L_gbk12);  return (add((Word16) (map1[index1] * (Word16) G729EV_G729_NCODE2), map2[index2]));}/*---------------------------------------------------------------------------* * Function G729EV_G729_Gbk_presel                                                       * * ~~~~~~~~~~~~~~~~~~~                                                       * *   - presearch for gain codebook -                                         * *---------------------------------------------------------------------------*/static void G729EV_G729_Gbk_presel(Word16 best_gain[],  /* (i) [0] Q9 : unquantized pitch gain     */                                                        /* (i) [1] Q2 : unquantized code gain      */                                   Word16 * cand1,      /* (o)    : index of best 1st stage vector */                                   Word16 * cand2,      /* (o)    : index of best 2nd stage vector */                                   Word16 gcode0        /* (i) Q4 : presearch for gain codebook    */    ){  Word32    L_acc, L_preg, L_cfbg, L_tmp, L_tmp_x, L_tmp_y;  Word32    L_temp;  Word16    acc_h;  Word16    sft_x, sft_y; /*--------------------------------------------------------------------------*   x = (best_gain[1]-(coef[0][0]*best_gain[0]+coef[1][1])*gcode0) * inv_coef;  *--------------------------------------------------------------------------*/  L_cfbg = L_mult(coef[0][0], best_gain[0]);  /* L_cfbg:Q20 -> !!y */  L_acc = L_shr(L_coef[1][1], 15);  /* L_acc:Q20     */  L_acc = L_add(L_cfbg, L_acc);  acc_h = extract_h(L_acc);     /* acc_h:Q4      */  L_preg = L_mult(acc_h, gcode0); /* L_preg:Q9     */  L_acc = L_shl(L_deposit_l(best_gain[1]), 7);  /* L_acc:Q9      */  L_acc = L_sub(L_acc, L_preg);  acc_h = extract_h(L_shl(L_acc, 2)); /* L_acc_h:Q[-5] */  L_tmp_x = L_mult(acc_h, G729EV_G729_INV_COEF);  /* L_tmp_x:Q15   */ /*--------------------------------------------------------------------------*   y = (coef[1][0]*(-coef[0][1]+best_gain[0]*coef[0][0])*gcode0                                      -coef[0][0]*best_gain[1]) * inv_coef;  *--------------------------------------------------------------------------*/  L_acc = L_shr(L_coef[0][1], 10);  /* L_acc:Q20   */  L_acc = L_sub(L_cfbg, L_acc); /* !!x -> L_cfbg:Q20 */  acc_h = extract_h(L_acc);     /* acc_h:Q4    */  acc_h = mult(acc_h, gcode0);  /* acc_h:Q[-7] */  L_tmp = L_mult(acc_h, coef[1][0]);  /* L_tmp:Q10   */  L_preg = L_mult(coef[0][0], best_gain[1]);  /* L_preg:Q13  */  L_acc = L_sub(L_tmp, L_shr(L_preg, 3)); /* L_acc:Q10   */  acc_h = extract_h(L_shl(L_acc, 2)); /* acc_h:Q[-4] */  L_tmp_y = L_mult(acc_h, G729EV_G729_INV_COEF);  /* L_tmp_y:Q16 */#if (WMOPS)  move16();  move16();#endif  sft_y = (14 + 4 + 1) - 16;    /* (Q[thr1]+Q[gcode0]+1)-Q[L_tmp_y] */  sft_x = (15 + 4 + 1) - 15;    /* (Q[thr2]+Q[gcode0]+1)-Q[L_tmp_x] */  IF(gcode0 > 0)  {#if (WMOPS)    move16();#endif      /*-- pre select codebook #1 --*/    *cand1 = 0;    DO    {      L_temp = L_sub(L_tmp_y, L_shr(L_mult(thr1[*cand1], gcode0), sft_y));      IF(L_temp > 0L)      {        (*cand1) = add(*cand1, 1);#if (WMOPS)        move16();#endif      }      ELSE BREAK;    }    WHILE(sub((*cand1), (G729EV_G729_NCODE1 - G729EV_G729_NCAN1)) < 0);      /*-- pre select codebook #2 --*/#if (WMOPS)    move16();#endif    *cand2 = 0;    DO    {      L_temp = L_sub(L_tmp_x, L_shr(L_mult(thr2[*cand2], gcode0), sft_x));      IF(L_temp > 0L)      {        (*cand2) = add(*cand2, 1);#if (WMOPS)        move16();#endif      }      ELSE BREAK;    }    WHILE(sub((*cand2), (G729EV_G729_NCODE2 - G729EV_G729_NCAN2)) < 0);  }  ELSE  {      /*-- pre select codebook #1 --*/#if (WMOPS)    move16();#endif    *cand1 = 0;    DO    {      L_temp = L_sub(L_tmp_y, L_shr(L_mult(thr1[*cand1], gcode0), sft_y));      IF(L_temp < 0L)      {        (*cand1) = add(*cand1, 1);#if (WMOPS)        move16();#endif      }      ELSE BREAK;    }    WHILE(sub((*cand1), (G729EV_G729_NCODE1 - G729EV_G729_NCAN1)) != 0);      /*-- pre select codebook #2 --*/#if (WMOPS)    move16();#endif    *cand2 = 0;    DO    {      L_temp = L_sub(L_tmp_x, L_shr(L_mult(thr2[*cand2], gcode0), sft_x));      IF(L_temp < 0L)      {        (*cand2) = add(*cand2, 1);#if (WMOPS)        move16();#endif      }      ELSE BREAK;    }    WHILE(sub((*cand2), (G729EV_G729_NCODE2 - G729EV_G729_NCAN2)) != 0);  }  return;}

⌨️ 快捷键说明

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