Loading lib_com/swb_tbe_com_fx.c +52 −13 Original line number Diff line number Diff line Loading @@ -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 ); Loading @@ -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; Loading Loading @@ -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] ); Loading @@ -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++ ) Loading Loading @@ -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++ ) { Loading @@ -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; } Loading lib_dec/swb_tbe_dec_fx.c +7 −0 Original line number Diff line number Diff line Loading @@ -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 ) { Loading @@ -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(); Loading lib_enc/swb_tbe_enc_fx.c +7 −0 Original line number Diff line number Diff line Loading @@ -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 ) { Loading @@ -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(); Loading Loading
lib_com/swb_tbe_com_fx.c +52 −13 Original line number Diff line number Diff line Loading @@ -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 ); Loading @@ -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; Loading Loading @@ -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] ); Loading @@ -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++ ) Loading Loading @@ -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++ ) { Loading @@ -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; } Loading
lib_dec/swb_tbe_dec_fx.c +7 −0 Original line number Diff line number Diff line Loading @@ -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 ) { Loading @@ -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(); Loading
lib_enc/swb_tbe_enc_fx.c +7 −0 Original line number Diff line number Diff line Loading @@ -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 ) { Loading @@ -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(); Loading