Exemplo n.º 1
0
  public void dec_gain(
      int index, /* input : quantizer index              */
      float code[], /* input : fixed code book vector       */
      int l_subfr, /* input : subframe size                */
      int bfi, /* input : bad frame indicator good = 0 */
      FloatPointer gain_pit, /* output: quantized acb gain           */
      FloatPointer gain_code /* output: quantized fcb gain           */) {

    int index1, index2;
    float g_code;
    FloatPointer gcode0 = new FloatPointer();

    /*----------------- Test erasure ---------------*/
    if (bfi != 0) {
      gain_pit.value *= (float) 0.9;
      if (gain_pit.value > (float) 0.9) gain_pit.value = (float) 0.9;
      gain_code.value *= (float) 0.98;

      /*----------------------------------------------*
       * update table of past quantized energies      *
       *                              (frame erasure) *
       *----------------------------------------------*/
      GainPred.gain_update_erasure(past_qua_en);

      return;
    }

    /*-------------- Decode pitch gain ---------------*/

    index1 = TabLD8k.imap1[index / LD8KConstants.NCODE2];
    index2 = TabLD8k.imap2[index % LD8KConstants.NCODE2];
    gain_pit.value = TabLD8k.gbk1[index1][0] + TabLD8k.gbk2[index2][0];

    /*-------------- Decode codebook gain ---------------*/

    /*---------------------------------------------------*
     *-  energy due to innovation                       -*
     *-  predicted energy                               -*
     *-  predicted codebook gain => gcode0[exp_gcode0]  -*
     *---------------------------------------------------*/

    GainPred.gain_predict(past_qua_en, code, l_subfr, gcode0);

    /*-----------------------------------------------------------------*
     * *gain_code = (gbk1[indice1][1]+gbk2[indice2][1]) * gcode0;      *
     *-----------------------------------------------------------------*/

    g_code = TabLD8k.gbk1[index1][1] + TabLD8k.gbk2[index2][1];
    gain_code.value = g_code * gcode0.value;

    /*----------------------------------------------*
     * update table of past quantized energies      *
     *----------------------------------------------*/

    GainPred.gain_update(past_qua_en, g_code);

    return;
  }