Commit 5c478bc2 authored by Fabian Bauer's avatar Fabian Bauer
Browse files

Merge branch 'main' into 1439-complexity-overhead-stereo-to-stereo-32kbps-fb-float-vs-basop-BE

parents ee0587a7 a584f6ee
Loading
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -2998,10 +2998,11 @@ void acelp_fast_fx(
    BSTR_ENC_HANDLE hBstr,  /* i/o: encoder bitstream handle                      */
    const Word16 cdk_index, /* i  : codebook index                                */
    const Word16 dn_orig[L_SUBFR],
    /* i  : corr. between target and h[].                 */ // Q_new + 1
    /* i  : corr. between target and h[].                 */ // Q_dn
    Word16 Q_dn,
    const Word16 cn[L_SUBFR],
    /* i  : residual after long term prediction           */ // Q_new + 1
    /* i  : residual after long term prediction           */ // q_cn
    const Word16 q_cn,
    const Word16 H[L_SUBFR],
    /* i  : impulse response of weighted synthesis filter */ // e(norm_s(H[0])+1)
    Word16 code[L_SUBFR],                                    /* o  : algebraic (fixed) codebook excitation         */
+6 −4
Original line number Diff line number Diff line
@@ -2658,14 +2658,16 @@ static void ivas_calc_p_coeffs_per_band_enc_fx(
            factor = L_max( factor, tmp ); // q_factor
        }

        tmp = L_shl_sat( IVAS_FIX_EPS_Q40, sub( q_factor, 40 ) );
        tmp = L_shl_sat( 189 /* 1e-20 in Q74 */, sub( q_factor, 74 ) );

        Word16 factor_exp = 0;
        move16();
        IF( LE_32( factor, tmp ) )
        {
            factor = 1250000000;
            factor_exp = Q31 - ( -4 );
            factor = 22204; // (1 / 1e-20) in Q(-52)
            factor_exp = Q15 - ( -52 );
            move32();
            move16();
        }
        ELSE
        {
@@ -2688,7 +2690,7 @@ static void ivas_calc_p_coeffs_per_band_enc_fx(
                    {
                        q_tmp = W_norm( W_tmp );
                    }
                    cov_uu_re[i - num_dmx][j - num_dmx] = W_extract_h( W_shl( W_mult0_32_32( cov_uu_re[i - num_dmx][j - num_dmx], factor ), q_tmp ) ); /*q_cov_uu_re+15-factor_exp+q_tmp-32*/
                    cov_uu_re[i - num_dmx][j - num_dmx] = W_extract_h( W_shl( W_tmp, q_tmp ) ); /*q_cov_uu_re+15-factor_exp+q_tmp-32*/
                    move32();
                    q_cov_uu_re_per_value[i - num_dmx][j - num_dmx] = sub( add( add( q_cov_uu_re, sub( 15, factor_exp ) ), q_tmp ), 32 );
                    move16();
+1 −8
Original line number Diff line number Diff line
@@ -5077,14 +5077,7 @@ void fine_gain_quant_fx(
    Word16 *fg_pred,         /* i/o: Predicted gains / Corrected gains        Q12 */
    const Word16 *gopt       /* i  : Optimal gains                            Q12 */
);
void fine_gain_quant_ivas_fx(
    BSTR_ENC_HANDLE hBstr,   /* i/o: encoder bitstream handle                        */
    const Word16 *ord,       /* i  : Indices for energy order                 Q0     */
    const Word16 num_sfm,    /* i  : Number of bands                          Q0     */
    const Word16 *gain_bits, /* i  : Gain adjustment bits per sub band        Q0     */
    Word16 *fg_pred,         /* i/o: Predicted gains / Corrected gains i:Q12 / o:Q11 */
    const Word16 *gopt       /* i  : Optimal gains                            Q12    */
);
void get_max_pulses_fx(
    const Word16 *band_start, /* i  : Sub band start indices    */
    const Word16 *band_end,   /* i  : Sub band end indices      */
+0 −67
Original line number Diff line number Diff line
@@ -509,73 +509,6 @@ void apply_gain_fx(
 *
 * Fine gain quantization
 *--------------------------------------------------------------------------*/
void fine_gain_quant_ivas_fx(
    BSTR_ENC_HANDLE hBstr,   /* i/o: encoder bitstream handle                        */
    const Word16 *ord,       /* i  : Indices for energy order                 Q0     */
    const Word16 num_sfm,    /* i  : Number of bands                          Q0     */
    const Word16 *gain_bits, /* i  : Gain adjustment bits per sub band        Q0     */
    Word16 *fg_pred,         /* i/o: Predicted gains / Corrected gains i:Q12 / o:Q11 */
    const Word16 *gopt       /* i  : Optimal gains                            Q12    */
)
{
    Word16 band;
    Word16 gbits;
    Word16 idx;
    Word16 gain_db, gain_dbq;
    Word16 err;

    Word16 tmp1, tmp2, exp1, exp2;
    Word32 L_tmp;
    UWord16 lsb;
#ifdef BASOP_NOGLOB_DECLARE_LOCAL
    Flag Overflow = 0;
    move32();
#endif

    FOR( band = 0; band < num_sfm; band++ )
    {
        gbits = gain_bits[ord[band]]; /* Q0 */
        move16();
        test();
        IF( fg_pred[band] != 0 && gbits > 0 )
        {
            exp1 = norm_s( gopt[band] );
            exp1 = sub( exp1, 1 );
            tmp1 = shl( gopt[band], exp1 );
            exp2 = norm_s( fg_pred[band] );
            tmp2 = shl( fg_pred[band], exp2 ); /* Q12 + exp2 */
            exp1 = add( 15, sub( exp1, exp2 ) );
            err = div_s( tmp1, tmp2 ); /* Q15 */
            tmp1 = norm_s( err );
            exp2 = Log2_norm_lc( L_deposit_h( shl( err, tmp1 ) ) );
            tmp1 = sub( 14, tmp1 );
            tmp1 = sub( tmp1, exp1 );
            L_tmp = L_Comp( tmp1, exp2 );
            Mpy_32_16_ss( L_tmp, 24660, &L_tmp, &lsb ); /* 24660 = 20*log10(2) in Q12 */ /*16+12-15=13 */
            gain_db = round_fx_sat( L_shl_o( L_tmp, 17, &Overflow ) );                   /* Q14 */

            idx = squant_fx( gain_db, &gain_dbq, finegain_fx[gbits - 1], gain_cb_size[gbits - 1] ); /* Q0 */
            push_indice( hBstr, IND_PVQ_FINE_GAIN, idx, gbits );

            L_tmp = L_mult0( gain_dbq, 21771 ); /* 21771=0.05*log2(10) */ /* 14+17=31 */
            L_tmp = L_shr( L_tmp, 15 );                                   /* Q16 */
            tmp1 = L_Extract_lc( L_tmp, &exp1 );
            tmp1 = abs_s( tmp1 );
            tmp1 = extract_l( Pow2( 14, tmp1 ) );
            exp1 = sub( 14, exp1 );

            L_tmp = L_mult0( fg_pred[band], tmp1 );                      /*12+exp1 */
            fg_pred[band] = round_fx( L_shl( L_tmp, sub( 15, exp1 ) ) ); /*12+exp1+16-exp1-16=12 - 1-> Q11*/
            move16();
        }
        ELSE
        {
            fg_pred[band] = shr( fg_pred[band], 1 ); // Q12 -> Q11 To align all the fg_pred indices in same Q.
        }
    }

    return;
}
void fine_gain_quant_fx(
    BSTR_ENC_HANDLE hBstr,   /* i/o: encoder bitstream handle					  */
    const Word16 *ord,       /* i  : Indices for energy order                 Q0  */
+63 −62
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@

#define POW_EXC16k_WHTND                    1.14e11f   /* power of random excitation, length 320 samples, uniform distribution */
#define POW_EXC16k_WHTND_FX_INV_SQRT        6360       // Q31
#define POW_EXC16k_WHTND_FX_INV_SQRT_IN_Q49 1667313793 // Q49
#define POW_EXC16k_WHTND_FX                 178125000  // Q-6
#define THR_ENV_ERROR_PLOSIVE               200.0f     /* threshold for envelope error used in plosive detection */
#define THR_ENV_ERROR_PLOSIVE_FX            200        /* threshold for envelope error used in plosive detection Q0 */
@@ -3958,7 +3959,7 @@ void GenShapedSHBExcitation_ivas_dec_fx(
    Word16 exc32k[L_FRAME32k], exc16k[L_FRAME16k];
    Word32 pow1, pow22;
    Word16 scale, temp1, temp2, temp3;

    Word16 Q_White_exc16k;
    Word16 excTmp2[L_FRAME16k];
    Word16 *White_exc16k;
    Word16 excNoisyEnv[L_FRAME16k];
@@ -3989,12 +3990,13 @@ void GenShapedSHBExcitation_ivas_dec_fx(
    Word32 White_exc16k_32[L_FRAME16k];
    Word16 White_exc16k_tmp[L_FRAME16k];
    Word16 Q_temp;
    Word16 prev_Q_bwe_exc_fb;
    Word16 chk1, chk2;
    Word16 prev_Q_bwe_exc_fb, Q_exc16kWhtnd;
    Word16 chk1;
    Word32 chk2;
    chk1 = 0;
    chk2 = 0;
    move16();
    move16();
    move32();

#if 1 // def ADD_IVAS_TBE_CODE
    Word16 alpha, step, mem_csfilt_left, mem_csfilt_right, excNoisyEnvLeft[L_FRAME16k], excNoisyEnvRight[L_FRAME16k];
@@ -4262,7 +4264,7 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        }

        /* normalize the amplitude of the gaussian excitation to that of the LB exc. */
        Word32 pow22_inv = POW_EXC16k_WHTND_FX_INV_SQRT;
        Word32 pow22_inv = POW_EXC16k_WHTND_FX_INV_SQRT_IN_Q49;
        move32();
        move32();
        pow22 = POW_EXC16k_WHTND_FX;
@@ -4271,21 +4273,23 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        // v_multc(White_exc16k, (float)sqrt(pow1 / pow22), White_exc16k, L_FRAME16k);
        Word16 pow1_exp = sub( Q31, Q_pow1 );
        Word32 temp_pow = Sqrt32( pow1, &pow1_exp );
        temp_pow = L_shl( Mpy_32_32( temp_pow, pow22_inv ), pow1_exp );
        temp_pow = Mpy_32_32( temp_pow, pow22_inv );
        /*Word16 out_exp;
        Word32 temp_pow1 = root_a_over_b_fx(pow1, Q_pow1, pow22, Q_pow22, &out_exp);
        temp_pow1 = L_shl(temp_pow1, out_exp);*/
        // v_multc_fixed_16_16(White_exc16k, round_fx(temp_pow), White_exc16k, L_FRAME16k);
        L_tmp = 0;
        move32();
        shift = getScaleFactor16( White_exc16k, L_FRAME16k );
        FOR( k = 0; k < L_FRAME16k; k++ )
        {
            White_exc16k_32[k] = Mpy_32_16_1( temp_pow, White_exc16k[k] );
            move32();
            White_exc16k[k] = round_fx( L_shl( White_exc16k_32[k], sub( *Q_bwe_exc, NOISE_QADJ ) ) ); //  Q_bwe_exc - NOISE_QADJ
            White_exc16k[k] = round_fx( L_shl( White_exc16k_32[k], shift ) ); // Q_White_exc16k
            move16();
            L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) );
        }
        Q_White_exc16k = add( shift, sub( 49 - 31, pow1_exp ) );
        Q_temp = norm_l( L_tmp );
        IF( L_tmp == 0 )
        {
@@ -4323,22 +4327,24 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        /* calculate pow22 */
        /* pow22=0.00001f */
        tmp = sub( shl( sub( *Q_bwe_exc, NOISE_QADJ ), 1 ), 31 );
        pow22 = L_shl( 21475l /*0.00001f Q31*/, tmp ); /* 0.00001f in 2*(*Q_bwe_exc-NOISE_QADJ) */
        Word64 sum = W_shl( 21475l /*0.00001f Q31*/, tmp ); /* 0.00001f in 2*(*Q_bwe_exc-NOISE_QADJ) */
        Q_White_exc16k = getScaleFactor32( White_exc16k_32, L_FRAME16k );
        FOR( k = 0; k < L_FRAME16k; k++ )
        {
            /* White_exc16k[k] *= excNoisyEnv[k]; */
            White_exc16k[k] = mult_r( excNoisyEnv[k], shl( White_exc16k[k], 1 ) ); // Q_excTmp2 + 5 + 1 - 15 ==> Q_excTmp2 - 9
            move16();
            chk2 = s_or( chk2, White_exc16k[k] );

            White_exc16k[k] = extract_h( L_shl( White_exc16k_32[k], Q_White_exc16k ) ); // Q_excTmp2 + 6 + Q_White_exc16k - 16 ==> Q_excTmp2 + Q_White_exc16k - 10
            chk2 = L_or( chk2, White_exc16k_32[k] );
            /* i: excNoisyEnv in (Q_excTmp2)     */
            /* i: White_exc16k  in Q6               */
            /* o: White_exc16k in (Q_bwe_exc-NOISE_QADJ)  */
            /* o: White_exc16k in (Q_White_exc16k)  */
            /* pow22 += White_exc16k[k] * White_exc16k[k]; */
            pow22 = L_mac0_sat( pow22, White_exc16k[k], White_exc16k[k] ); /* 2*(Q_excTmp2-NOISE_QADJ)*/
            sum = W_mac0_16_16( sum, White_exc16k[k], White_exc16k[k] ); /* 2*(Q_excTmp2 + Q_White_exc16k - 10)*/
            move16();
        }
        /*Q_pow22 = sub( shl(*Q_bwe_exc,1), 18 );*/
        Q_pow22 = shl( sub( Q_excTmp2, NOISE_QADJ ), 1 );
        Scale_sig( White_exc16k, L_FRAME16k, sub( *Q_bwe_exc, Q_excTmp2 ) );
        Q_pow22 = W_norm( sum );
        pow22 = W_extract_h( W_shl( sum, Q_pow22 ) ); // 2*(Q_excTmp2 + Q_White_exc16k - 10)+Q_pow22-32
        Q_pow22 = sub( add( Q_pow22, shl( sub( add( Q_White_exc16k, Q_excTmp2 ), 10 ), 1 ) ), 32 );
        Q_White_exc16k = add( Q_White_exc16k, sub( Q_excTmp2, 10 ) );
    }

#if 1 // def ADD_IVAS_TBE_CODE
@@ -4625,7 +4631,6 @@ void GenShapedSHBExcitation_ivas_dec_fx(
            move16();
        }
    }
#if 1 // def ADD_IVAS_TBE_CODE
    test();
    IF( GE_16( element_mode, IVAS_CPE_DFT ) && nlExc16k != NULL )
    {
@@ -4638,29 +4643,42 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        temp_fac = Sqrt16(temp_fac, &temp_fac_exp);*/
        L_tmp = root_a_over_b_fx( pow1, Q_pow1, pow22, Q_pow22, &exp );
        Word16 temp_fac = round_fx_sat( L_shl_sat( L_tmp, exp ) ); // Q15
        shift = sub( sub( *Q_bwe_exc, NOISE_QADJ ), Q_White_exc16k );
        // v_multc_fixed_16_16(White_exc16k,shr(temp_fac, temp_fac_exp) , mixExc16k, L_FRAME16k);
        FOR( k = 0; k < L_FRAME16k; k++ )
        {
            mixExc16k[k] = mult_r( White_exc16k[k], temp_fac );
            mixExc16k[k] = mult_r( shl_sat( White_exc16k[k], shift ), temp_fac );
            move16();
        }
    }
#endif

    tmp = sub( Q_temp, 3 );
    FOR( k = 0; k < L_FRAME16k; k++ )
    {
        White_exc16k_FB[k] = White_exc16k[k]; /* Q_bwe_exc-NOISE_QADJ */
        White_exc16k_FB[k] = White_exc16k[k]; /* Q_White_exc16k */
    }
    prev_Q_bwe_exc_fb = *Q_bwe_exc_fb;
    move16();
    *Q_bwe_exc_fb = sub( *Q_bwe_exc, NOISE_QADJ );
    *Q_bwe_exc_fb = Q_White_exc16k;
    move16();
    *tbe_demph = shl_sat( *tbe_demph, sub( Q_White_exc16k, sub( *Q_bwe_exc, NOISE_QADJ ) ) );
    deemph_fx( White_exc16k, PREEMPH_FAC, L_FRAME16k, tbe_demph );
    /* i/o: White_exc16k (Q_bwe_exc-NOISE_QADJ) */
    /* i: tbe_demph (Q_bwe_exc-NOISE_QADJ) */
    *tbe_demph = shl_sat( *tbe_demph, sub( sub( *Q_bwe_exc, NOISE_QADJ ), Q_White_exc16k ) );

#if 1 // def ADD_IVAS_TBE_CODE
    Q_exc16kWhtnd = getScaleFactor16( exc16kWhtnd, L_FRAME16k );
    Q_exc16kWhtnd = add( Q_exc16kWhtnd, *Q_bwe_exc );

    shift = getScaleFactor16( White_exc16k, L_FRAME16k );

    shift = s_min( Q_exc16kWhtnd, add( shift, Q_White_exc16k ) );
    scale_sig( exc16kWhtnd, L_FRAME16k, sub( shift, *Q_bwe_exc ) );
    scale_sig( White_exc16k, L_FRAME16k, sub( shift, Q_White_exc16k ) );

    Q_exc16kWhtnd = Q_White_exc16k = shift;
    move16();
    move16();
    *tbe_premph = shl_sat( *tbe_premph, sub( Q_White_exc16k, sub( *Q_bwe_exc, NOISE_QADJ ) ) );
    move16();
    test();
    IF( EQ_32( extl_brate, SWB_TBE_1k10 ) || EQ_32( extl_brate, SWB_TBE_1k75 ) )
    {
@@ -4693,11 +4711,8 @@ void GenShapedSHBExcitation_ivas_dec_fx(
            /* mixing of LB and gaussian excitation in the first half of the frame */
            FOR( k = 0; k < L_FRAME16k / 2; k++ )
            {
                // exc16kWhtnd[k] = (float)fact * (White_exc16k[k] * scale) + (float)(1 - fact) * exc16kWhtnd[k];
                // exc16kWhtnd[k] = add(mult_r(fact, mult(shl(White_exc16k[k], *Q_bwe_exc), scale)), mult_r(sub(32767, fact), exc16kWhtnd[k]));
                L_tmp = L_add( L_shl( L_mult( fact, mult_r( White_exc16k[k], scale ) ), NOISE_QADJ ),
                               L_mult( sub( 32767, fact ), exc16kWhtnd[k] ) ); // Q_bwe_exc
                exc16kWhtnd[k] = round_fx( L_tmp );
                exc16kWhtnd[k] = mac_r( L_mult( fact, mult_r( White_exc16k[k], scale ) ),
                                        sub( 32767, fact ), exc16kWhtnd[k] ); // Q_exc16kWhtnd
                move16();
                fact = add_sat( fact, step );
                scale = add_sat( scale, step_scale );
@@ -4706,11 +4721,8 @@ void GenShapedSHBExcitation_ivas_dec_fx(
            /* mixing of LB and gaussian excitation in the second half of the frame */
            FOR( ; k < L_FRAME16k; k++ )
            {
                // exc16kWhtnd[k] = (float)new_fact * White_exc16k[k] + (float)(1 - new_fact) * exc16kWhtnd[k];
                // exc16kWhtnd[k] = add(mult_r(new_fact, shl(White_exc16k[k], *Q_bwe_exc)), mult_r(sub(32767, new_fact), exc16kWhtnd[k]));
                L_tmp = L_add( L_shl( L_mult( new_fact, White_exc16k[k] ), NOISE_QADJ ),
                               mult_r( sub( 32767, new_fact ), exc16kWhtnd[k] ) ); // Q_bwe_exc
                exc16kWhtnd[k] = round_fx( L_tmp );
                exc16kWhtnd[k] = mac_r( L_mult( new_fact, White_exc16k[k] ),
                                        sub( 32767, new_fact ), exc16kWhtnd[k] ); // Q_exc16kWhtnd
                move16();
            }
        }
@@ -4718,14 +4730,9 @@ void GenShapedSHBExcitation_ivas_dec_fx(
        PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph );
    }
    ELSE
#endif
    {
#if 1 // def ADD_IVAS_TBE_CODE
        test();
        IF( EQ_16( coder_type, UNVOICED ) || EQ_16( MSFlag, 1 ) )
#else
        IF( EQ_16( coder_type, UNVOICED ) )
#endif
        {
            L_tmp = root_a_over_b_fx( pow1, Q_pow1, pow22, Q_pow22, &exp );
            test();
@@ -4737,16 +4744,12 @@ void GenShapedSHBExcitation_ivas_dec_fx(
            scale = round_fx_sat( L_shl_sat( L_tmp, exp ) ); /*Q15 */
            FOR( k = 0; k < L_FRAME16k; k++ )
            {
                /* White_exc16k: (Q_bwe_exc-NOISE_QADJ), scale: Q15 */
                L_tmp = L_mult( White_exc16k[k], scale );
                /* L_tmp: (Q_bwe_exc-NOISE_QADJ) + 15 + 1 */
                exc16kWhtnd[k] = round_fx_sat( L_shl_sat( L_tmp, NOISE_QADJ ) );
                exc16kWhtnd[k] = mult_r_sat( White_exc16k[k], scale );
                move16();
                /* exc16kWhtnd:  Q_bwe_exc */
            }
            PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph );
            /* i/o: exc16kWhtnd  (Q_bwe_exc) */
            /* i/o: tbe_premph (Q_bwe_exc) */
            /* i/o: exc16kWhtnd  (Q_exc16kWhtnd) */
            /* i/o: tbe_premph (Q_exc16kWhtnd) */
        }
        ELSE
        {
@@ -4809,11 +4812,10 @@ void GenShapedSHBExcitation_ivas_dec_fx(
                FOR( j = 0; j < lSubFr; j++ )
                {
                    /*exc16kWhtnd[k+j] = temp1 * exc16kWhtnd[k+j] + temp2 * White_exc16k[k+j]; */
                    L_tmp = L_mult( temp2, White_exc16k[k + j] ); /* 16+(Q_bwe_exc-NOISE_QADJ)*/
                    L_tmp = L_shl_sat( L_tmp, NOISE_QADJ );       /* 16+(Q_bwe_exc) */
                    L_tmp = L_mult( temp2, White_exc16k[k + j] );
                    exc16kWhtnd[k + j] = mac_r_sat( L_tmp, temp1, exc16kWhtnd[k + j] );
                    move16();
                    /* Q_bwe_exc */
                    /* Q_exc16kWhtnd */
                }
                k = add( k, lSubFr );

@@ -4827,19 +4829,18 @@ void GenShapedSHBExcitation_ivas_dec_fx(
                temp2 = add( temp, shl( temp1, -1 ) ); /* shift right by 1 to avoid overflow */
                temp = div_s( temp, temp2 );           /* Q15 */
                temp = mult_r( PREEMPH_FAC, temp );

                PREEMPH_FX( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph );
                /* exc16kWhtnd: Q_bwe_exc;
                   tbe_premph: Q_bwe_exc*/
                /* exc16kWhtnd: Q_exc16kWhtnd;
                   tbe_premph: Q_exc16kWhtnd*/
            }
        }
    }
    *tbe_premph = shl_sat( *tbe_premph, sub( sub( *Q_bwe_exc, NOISE_QADJ ), Q_White_exc16k ) );
    move16();
    Scale_sig( White_exc16k, L_FRAME16k, sub( sub( *Q_bwe_exc, NOISE_QADJ ), Q_White_exc16k ) );
    Scale_sig( exc16kWhtnd, L_FRAME16k, sub( *Q_bwe_exc, Q_White_exc16k ) );

#if 1 // def ADD_IVAS_TBE_CODE
    IF( LT_32( extl_brate, SWB_TBE_2k8 ) )
#else
    IF( LT_32( bitrate, ACELP_24k40 ) )
#endif
    {
        Syn_filt_s( 0, lpc_shb, LPC_SHB_ORDER, exc16kWhtnd, excSHB, L_FRAME16k, state_lpc_syn, 1 );
        /* i: exc16kWhtnd in Q_bwe_exc */
Loading