Commit 759c862d authored by vaclav's avatar vaclav
Browse files

harmonize GenShapedWBExcitation_ivas_fx()

parent 488dde7e
Loading
Loading
Loading
Loading
+52 −13
Original line number Diff line number Diff line
@@ -1429,8 +1429,7 @@ void GenShapedWBExcitation_ivas_fx(
    }
    ELSE
    {
        autocorr_fx( exc4k, LPC_WHTN_ORDER_WB + 1, R_h, R_l, &Q_R,
                     L_FRAME16k / 4, win_flatten_4k_fx, 0, 1 );
        autocorr_fx( exc4k, LPC_WHTN_ORDER_WB + 1, R_h, R_l, &Q_R, L_FRAME16k / 4, win_flatten_4k_fx, 0, 1 );

        /* Ensure R[0] isn't zero when entering Levinson Durbin */
        R_l[0] = s_max( R_l[0], 1 );
@@ -1445,8 +1444,7 @@ void GenShapedWBExcitation_ivas_fx(

        Copy_Scale_sig( lpc_whtn, lpc_whtn, LPC_WHTN_ORDER_WB + 1, sub( norm_s( lpc_whtn[0] ), 2 ) );

        fir_fx( exc4k, lpc_whtn, exc4kWhtnd, wht_fil_mem, L_FRAME16k / 4,
                LPC_WHTN_ORDER_WB, 0, 3 );
        fir_fx( exc4k, lpc_whtn, exc4kWhtnd, wht_fil_mem, L_FRAME16k / 4, LPC_WHTN_ORDER_WB, 0, 3 );

        /* Ensure pow1 is greater than zero when computing normalization */
        max_val = 0;
@@ -1496,6 +1494,7 @@ void GenShapedWBExcitation_ivas_fx(

        /* Ensure pow22 is greater than zero when computing normalization */
        Lmax = 0;
        move32();
        FOR( i = 0; i < L_FRAME16k / 4; i++ )
        {
            exc4k_32[i] = Mult_32_16( excNoisyEnv[i], exc4k[i] );
@@ -1519,21 +1518,48 @@ void GenShapedWBExcitation_ivas_fx(
                exc4k_frac[i] = extract_h( L_shl( exc4k_32[i], n2 ) ); /* Q(14-n2) */
                move16();
            }
            n2 = 30 - n2 - ( Q_bwe_exc + 6 );
            n2 = sub( sub( 30, n2 ), add( Q_bwe_exc, 6 ) );
            pow22 = 1;
            move32();
#ifdef HARMONIZE_TBE2
            IF( element_mode == EVS_MONO )
            {
                FOR( i = 0; i < L_FRAME16k / 4; i++ )
                {
                    L_tmp = L_mult_sat( exc4k_frac[i], exc4k_frac[i] ); /* Q29 */
                    pow22 = L_add( pow22, L_shr( L_tmp, 7 ) );          /* Q22 */
                }
            }
            ELSE
#endif
            {
                FOR( i = 0; i < L_FRAME16k / 4; i++ )
                {
                    L_tmp = L_mult_sat( exc4k_frac[i], exc4k_frac[i] ); /* Q29 */
                    pow22 = L_add( pow22, L_shr( L_tmp, 10 ) );         /* Q22 */
                }
            }
        }

#ifdef HARMONIZE_TBE2
        Word16 Q_root = Q19;
        move16();
        if ( element_mode == EVS_MONO )
        {
            Q_root = Q22;
            move16();
        }
#endif

        test();
        test();
        IF( EQ_16( coder_type, UNVOICED ) || ( igf_flag != 0 && LT_16( avg_voice_fac, 6654 /* 0.2 in Q15 */ ) ) )
        {
#ifdef HARMONIZE_TBE2
            L_tmp = root_a_over_b_fx( pow1, sub( Q_root, shl( n1, 1 ) ), pow22, sub( Q_root, shl( n2, 1 ) ), &exp );
#else
            L_tmp = root_a_over_b_fx( pow1, sub( 19, shl( n1, 1 ) ), pow22, sub( 19, shl( n2, 1 ) ), &exp );
#endif
            scale = round_fx_sat( L_shl_sat( L_tmp, exp ) ); /*Q15 */
            sc = sub( add( n2, Q_bwe_exc ), 14 );
            FOR( i = 0; i < L_FRAME16k / 4; i++ )
@@ -1565,7 +1591,11 @@ void GenShapedWBExcitation_ivas_fx(
                Ltemp1 = root_a_fx( L_deposit_h( tmp_vfac ), 31, &exp );
                temp1 = round_fx_sat( L_shl_sat( Ltemp1, exp ) );   /* Q15 */
                L_tmp = Mult_32_16( pow1, sub( 32767, tmp_vfac ) ); /* Q22*/
#ifdef HARMONIZE_TBE2
                Ltemp2 = root_a_over_b_fx( L_tmp, sub( Q_root, shl( n1, 1 ) ), pow22, sub( Q_root, shl( n2, 1 ) ), &exp );
#else
                Ltemp2 = root_a_over_b_fx( L_tmp, sub( 19, shl( n1, 1 ) ), pow22, sub( 19, shl( n2, 1 ) ), &exp );
#endif
                temp2 = round_fx_sat( L_shl_sat( Ltemp2, exp ) ); /* Q15 */
                FOR( j = 0; j < L_FRAME16k / 16; j++ )
                {
@@ -1573,18 +1603,27 @@ void GenShapedWBExcitation_ivas_fx(
                    L_tmp = L_add_sat( L_tmp, L_shl_sat( L_mult_sat( temp2, exc4k_frac[k] ), sc ) ); /* Q(16+Q_bwe_exc) */
                    exc4kWhtnd[k] = round_fx_sat( L_tmp );                                           /* Q_bwe_exc */
                    move16();
                    k++;
                    k = add( k, 1 );
                }
            }
        }
    }

#ifdef HARMONIZE_TBE2
    IF( element_mode == EVS_MONO )
    {
        Syn_filt_s( 0, lpc_shb, LPC_SHB_ORDER_WB, exc4kWhtnd, excSHB, L_FRAME16k / 4, state_lpc_syn, 1 );
    }
    ELSE
#endif
    {
        Scale_sig( state_lpc_syn, LPC_SHB_ORDER, -Q2 ); /* Q(Q_bwe_exc) -> Q(Q_bwe_exc - 2) */

        Syn_filt_s( Q2, lpc_shb, LPC_SHB_ORDER_WB, exc4kWhtnd, excSHB, L_FRAME16k / 4, state_lpc_syn, 1 );

        Scale_sig( state_lpc_syn, LPC_SHB_ORDER, Q2 ); /* Q(Q_bwe_exc - 2) -> Q(Q_bwe_exc) */
        Scale_sig( excSHB, L_FRAME16k / 4, Q2 );       /* Q(Q_bwe_exc - 2) -> Q(Q_bwe_exc) */
    }

    return;
}
+7 −0
Original line number Diff line number Diff line
@@ -977,6 +977,12 @@ void ivas_wb_tbe_dec_fx(

        Q_bwe_exc_ext = sub( Q_bwe_exc, 16 );

#ifdef HARMONIZE_TBE2aa
        GenShapedWBExcitation_ivas_fx( shaped_wb_excitation + L_SHB_LAHEAD / 4, lpc_wb, exc4kWhtnd, hBWE_TD->mem_csfilt_fx,
                                       hBWE_TD->mem_genSHBexc_filt_down_shb_fx, hBWE_TD->mem_genSHBexc_filt_down_wb2_fx,
                                       hBWE_TD->mem_genSHBexc_filt_down_wb3_fx, hBWE_TD->state_lpc_syn_fx, coder_type, st_fx->element_mode,
                                       bwe_exc_extended_16, Q_bwe_exc_ext, hBWE_TD->bwe_seed, vf_modified, uv_flag, st_fx->igf );
#else
#ifdef HARMONIZE_TBE
        IF( st_fx->element_mode == EVS_MONO )
        {
@@ -993,6 +999,7 @@ void ivas_wb_tbe_dec_fx(
                                           hBWE_TD->mem_genSHBexc_filt_down_wb3_fx, hBWE_TD->state_lpc_syn_fx, coder_type, st_fx->element_mode,
                                           bwe_exc_extended_16, Q_bwe_exc_ext, hBWE_TD->bwe_seed, vf_modified, uv_flag, st_fx->igf );
        }
#endif

        curr_pow = 0;
        move32();
+7 −0
Original line number Diff line number Diff line
@@ -1712,6 +1712,12 @@ void wb_tbe_enc_ivas_fx(
    Copy( hBWE_TD->state_syn_shbexc_fx, shaped_wb_excitation, L_SHB_LAHEAD / 4 );
    Q_bwe_exc_ext = sub( Q_bwe_exc, 16 );

#ifdef HARMONIZE_TBE2aa
    GenShapedWBExcitation_ivas_fx( shaped_wb_excitation + L_SHB_LAHEAD / 4, lpc_wb, exc4kWhtnd, hBWE_TD->mem_csfilt_fx,
                                   hBWE_TD->mem_genSHBexc_filt_down_shb_fx, hBWE_TD->mem_genSHBexc_filt_down_wb2_fx, 
                                   hBWE_TD->mem_genSHBexc_filt_down_wb3_fx, hBWE_TD->state_lpc_syn_fx, st_fx->coder_type, st_fx->element_mode, 
                                   bwe_exc_extended_16, Q_bwe_exc_ext, hBWE_TD->bwe_seed, vf_modified_fx, uv_flag, st_fx->igf );
#else
#ifdef HARMONIZE_TBE
    IF( st_fx->element_mode == EVS_MONO )
    {
@@ -1728,6 +1734,7 @@ void wb_tbe_enc_ivas_fx(
                                       hBWE_TD->state_lpc_syn_fx, st_fx->coder_type, st_fx->element_mode, bwe_exc_extended_16, Q_bwe_exc_ext, hBWE_TD->bwe_seed,
                                       vf_modified_fx, uv_flag, st_fx->igf );
    }
#endif

    curr_pow = 0;
    move32();