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

📄 cod_ld8a.c

📁 C源程序---G.729a语音代码G.729a语音代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    /*--------------------------------------------------------------------*     * Find interpolated LPC parameters in all subframes                  *     * The interpolated parameters are in array Aq_t[].                   *     *--------------------------------------------------------------------*/    Int_qlpc(lsp_old_q, lsp_new_q, Aq_t);    /* Compute A(z/gamma) */    Weight_Az(&Aq_t[0],   GAMMA1, M, &Ap_t[0]);    Weight_Az(&Aq_t[MP1], GAMMA1, M, &Ap_t[MP1]);    /* update the LSPs for the next frame */    Copy(lsp_new,   lsp_old,   M);    Copy(lsp_new_q, lsp_old_q, M);  } /*----------------------------------------------------------------------*  * - Find the weighted input speech w_sp[] for the whole speech frame   *  * - Find the open-loop pitch delay                                     *  *----------------------------------------------------------------------*/  Residu(&Aq_t[0], &speech[0], &exc[0], L_SUBFR);  Residu(&Aq_t[MP1], &speech[L_SUBFR], &exc[L_SUBFR], L_SUBFR);  {    Word16 Ap1[MP1];    Ap = Ap_t;    Ap1[0] = 4096;    for(i=1; i<=M; i++)    /* Ap1[i] = Ap[i] - 0.7 * Ap[i-1]; */       Ap1[i] = sub(Ap[i], mult(Ap[i-1], 22938));    Syn_filt(Ap1, &exc[0], &wsp[0], L_SUBFR, mem_w, 1);    Ap += MP1;    for(i=1; i<=M; i++)    /* Ap1[i] = Ap[i] - 0.7 * Ap[i-1]; */       Ap1[i] = sub(Ap[i], mult(Ap[i-1], 22938));    Syn_filt(Ap1, &exc[L_SUBFR], &wsp[L_SUBFR], L_SUBFR, mem_w, 1);  }  /* Find open loop pitch lag */  T_op = Pitch_ol_fast(wsp, PIT_MAX, L_FRAME);  /* Range for closed loop pitch search in 1st subframe */  T0_min = sub(T_op, 3);  if (sub(T0_min,PIT_MIN)<0) {    T0_min = PIT_MIN;  }  T0_max = add(T0_min, 6);  if (sub(T0_max ,PIT_MAX)>0)  {     T0_max = PIT_MAX;     T0_min = sub(T0_max, 6);  } /*------------------------------------------------------------------------*  *          Loop for every subframe in the analysis frame                 *  *------------------------------------------------------------------------*  *  To find the pitch and innovation parameters. The subframe size is     *  *  L_SUBFR and the loop is repeated 2 times.                             *  *     - find the weighted LPC coefficients                               *  *     - find the LPC residual signal res[]                               *  *     - compute the target signal for pitch search                       *  *     - compute impulse response of weighted synthesis filter (h1[])     *  *     - find the closed-loop pitch parameters                            *  *     - encode the pitch delay                                           *  *     - find target vector for codebook search                           *  *     - codebook search                                                  *  *     - VQ of pitch and codebook gains                                   *  *     - update states of weighting filter                                *  *------------------------------------------------------------------------*/  Aq = Aq_t;    /* pointer to interpolated quantized LPC parameters */  Ap = Ap_t;    /* pointer to weighted LPC coefficients             */  for (i_subfr = 0;  i_subfr < L_FRAME; i_subfr += L_SUBFR)  {    /*---------------------------------------------------------------*     * Compute impulse response, h1[], of weighted synthesis filter  *     *---------------------------------------------------------------*/    h1[0] = 4096;    Set_zero(&h1[1], L_SUBFR-1);    Syn_filt(Ap, h1, h1, L_SUBFR, &h1[1], 0);   /*----------------------------------------------------------------------*    *  Find the target vector for pitch search:                            *    *----------------------------------------------------------------------*/    Syn_filt(Ap, &exc[i_subfr], xn, L_SUBFR, mem_w0, 0);    /*---------------------------------------------------------------------*     *                 Closed-loop fractional pitch search                 *     *---------------------------------------------------------------------*/    T0 = Pitch_fr3_fast(&exc[i_subfr], xn, h1, L_SUBFR, T0_min, T0_max,                    i_subfr, &T0_frac);    index = Enc_lag3(T0, T0_frac, &T0_min, &T0_max,PIT_MIN,PIT_MAX,i_subfr);    *ana++ = index;    if (i_subfr == 0) {      *ana++ = Parity_Pitch(index);    }   /*-----------------------------------------------------------------*    *   - find filtered pitch exc                                     *    *   - compute pitch gain and limit between 0 and 1.2              *    *   - update target vector for codebook search                    *    *-----------------------------------------------------------------*/    Syn_filt(Ap, &exc[i_subfr], y1, L_SUBFR, mem_zero, 0);    gain_pit = G_pitch(xn, y1, g_coeff, L_SUBFR);    /* clip pitch gain if taming is necessary */    taming = test_err(T0, T0_frac);    if( taming == 1){      if (sub(gain_pit, GPCLIP) > 0) {        gain_pit = GPCLIP;      }    }    /* xn2[i]   = xn[i] - y1[i] * gain_pit  */    for (i = 0; i < L_SUBFR; i++)    {      L_temp = L_mult(y1[i], gain_pit);      L_temp = L_shl(L_temp, 1);               /* gain_pit in Q14 */      xn2[i] = sub(xn[i], extract_h(L_temp));    }   /*-----------------------------------------------------*    * - Innovative codebook search.                       *    *-----------------------------------------------------*/    index = ACELP_Code_A(xn2, h1, T0, sharp, code, y2, &i);    *ana++ = index;        /* Positions index */    *ana++ = i;            /* Signs index     */   /*-----------------------------------------------------*    * - Quantization of gains.                            *    *-----------------------------------------------------*/    g_coeff_cs[0]     = g_coeff[0];            /* <y1,y1> */    exp_g_coeff_cs[0] = negate(g_coeff[1]);    /* Q-Format:XXX -> JPN */    g_coeff_cs[1]     = negate(g_coeff[2]);    /* (xn,y1) -> -2<xn,y1> */    exp_g_coeff_cs[1] = negate(add(g_coeff[3], 1)); /* Q-Format:XXX -> JPN */    Corr_xy2( xn, y1, y2, g_coeff_cs, exp_g_coeff_cs );  /* Q0 Q0 Q12 ^Qx ^Q0 */                         /* g_coeff_cs[3]:exp_g_coeff_cs[3] = <y2,y2>   */                         /* g_coeff_cs[4]:exp_g_coeff_cs[4] = -2<xn,y2> */                         /* g_coeff_cs[5]:exp_g_coeff_cs[5] = 2<y1,y2>  */    *ana++ = Qua_gain(code, g_coeff_cs, exp_g_coeff_cs,                         L_SUBFR, &gain_pit, &gain_code, taming);   /*------------------------------------------------------------*    * - Update pitch sharpening "sharp" with quantized gain_pit  *    *------------------------------------------------------------*/    sharp = gain_pit;    if (sub(sharp, SHARPMAX) > 0) { sharp = SHARPMAX;         }    if (sub(sharp, SHARPMIN) < 0) { sharp = SHARPMIN;         }   /*------------------------------------------------------*    * - Find the total excitation                          *    * - update filters memories for finding the target     *    *   vector in the next subframe                        *    *------------------------------------------------------*/    for (i = 0; i < L_SUBFR;  i++)    {      /* exc[i] = gain_pit*exc[i] + gain_code*code[i]; */      /* exc[i]  in Q0   gain_pit in Q14               */      /* code[i] in Q13  gain_cod in Q1                */      L_temp = L_mult(exc[i+i_subfr], gain_pit);      L_temp = L_mac(L_temp, code[i], gain_code);      L_temp = L_shl(L_temp, 1);      exc[i+i_subfr] = round(L_temp);    }    update_exc_err(gain_pit, T0);    for (i = L_SUBFR-M, j = 0; i < L_SUBFR; i++, j++)    {      temp       = extract_h(L_shl( L_mult(y1[i], gain_pit),  1) );      k          = extract_h(L_shl( L_mult(y2[i], gain_code), 2) );      mem_w0[j]  = sub(xn[i], add(temp, k));    }    Aq += MP1;           /* interpolated LPC parameters for next subframe */    Ap += MP1;  } /*--------------------------------------------------*  * Update signal for next frame.                    *  * -> shift to the left by L_FRAME:                 *  *     speech[], wsp[] and  exc[]                   *  *--------------------------------------------------*/  Copy(&old_speech[L_FRAME], &old_speech[0], L_TOTAL-L_FRAME);  Copy(&old_wsp[L_FRAME], &old_wsp[0], PIT_MAX);  Copy(&old_exc[L_FRAME], &old_exc[0], PIT_MAX+L_INTERPOL);  return;}

⌨️ 快捷键说明

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