Loading lib_com/swb_tbe_com_fx.c +21 −26 Original line number Diff line number Diff line Loading @@ -2866,29 +2866,29 @@ void GenShapedSHBExcitation_ivas_fx( FOR( i = 0; i < L_FRAME32k; i = i + 2 ) { exc32k[i] = negate( bwe_exc_extended[i] ); exc32k[i] = negate( bwe_exc_extended[i] ); // Q_bwe_exc move16(); exc32k[i + 1] = bwe_exc_extended[i + 1]; exc32k[i + 1] = bwe_exc_extended[i + 1]; // Q_bwe_exc move16(); } /* Decimate by 2 */ Decimate_allpass_steep_fx( exc32k, mem_genSHBexc_filt_down_shb, 2 * L_FRAME16k, exc16k ); Decimate_allpass_steep_fx( exc32k, mem_genSHBexc_filt_down_shb, 2 * L_FRAME16k, exc16k ); // Q_bwe_exc /* i: exc32k in Q_bwe_exc */ /* o: exc16k in Q_bwe_exc */ autocorr_fx( exc16k, LPC_WHTN_ORDER + 1, R_h, R_l, &Q_R, L_FRAME16k, win_flatten_fx, 0, 1 ); autocorr_fx( exc16k, LPC_WHTN_ORDER + 1, R_h, R_l, &Q_R, L_FRAME16k, win_flatten_fx, 0, 1 ); // Q_R /* Ensure R[0] isn't zero when entering Levinson Durbin */ R_l[0] = s_max( R_l[0], 1 ); move16(); FOR( i = 1; i <= LPC_WHTN_ORDER; i++ ) { L_tmp = Mpy_32( R_h[i], R_l[i], wac_h[i - 1], wac_l[i - 1] ); L_Extract( L_tmp, &R_h[i], &R_l[i] ); L_Extract( L_tmp, &R_h[i], &R_l[i] ); // Q_R } E_LPC_lev_dur( R_h, R_l, lpc_whtn, LepsP, LPC_WHTN_ORDER, NULL ); Copy_Scale_sig( lpc_whtn, lpc_whtn, LPC_WHTN_ORDER + 1, sub( norm_s( lpc_whtn[0] ), 2 ) ); fir_fx( exc16k, lpc_whtn, exc16kWhtnd, wht_fil_mem, L_FRAME16k, LPC_WHTN_ORDER, 0, 3 ); Copy_Scale_sig( lpc_whtn, lpc_whtn, LPC_WHTN_ORDER + 1, sub( norm_s( lpc_whtn[0] ), 2 ) ); // Q12 fir_fx( exc16k, lpc_whtn, exc16kWhtnd, wht_fil_mem, L_FRAME16k, LPC_WHTN_ORDER, 0, 3 ); // Q_bwe_exc /* i: exc16k in Q_bwe_exc */ /* o: exc16kWhtnd in Q_bwe_exc */ Loading @@ -2907,7 +2907,7 @@ void GenShapedSHBExcitation_ivas_fx( move16(); FOR( i = 0; i < 80; i++ ) { exc16kWhtnd[temp2 + i] = round_fx( L_shl( L_mult( exc16kWhtnd[temp2 + i], temp1 ), 1 ) ); exc16kWhtnd[temp2 + i] = round_fx( L_shl( L_mult( exc16kWhtnd[temp2 + i], temp1 ), 1 ) ); // Q_bwe_exc move16(); /* exc16kWhtnd in Q_bwe_exc, shb_res_gshape in Q14 */ } Loading Loading @@ -2982,9 +2982,9 @@ void GenShapedSHBExcitation_ivas_fx( varEnvShape = s_max( varEnvShape, 9830 /*0.3f Q15*/ ); varEnvShape = s_min( varEnvShape, 16368 /*0.4995f Q15*/ ); varEnvShape = shl( varEnvShape, 1 ); csfilt_num2[0] = sub( MAX_16, varEnvShape ); csfilt_num2[0] = sub( MAX_16, varEnvShape ); // Q15 move16(); neg_csfilt_den2[1] = varEnvShape; neg_csfilt_den2[1] = varEnvShape; // Q15 move16(); test(); Loading Loading @@ -3036,7 +3036,7 @@ void GenShapedSHBExcitation_ivas_fx( White_exc16k = exc16k; move16(); Word16 Q_excTmp2 = add( getScaleFactor16( excTmp2, L_FRAME16k ), *Q_bwe_exc ); Word16 Q_excTmp2 = sub( add( s_min( getScaleFactor16( excTmp2, L_FRAME16k ), norm_l( *mem_csfilt ) ), *Q_bwe_exc ), 1 ); test(); /* Track the low band envelope */ IF( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) Loading Loading @@ -3079,7 +3079,7 @@ void GenShapedSHBExcitation_ivas_fx( #endif { /* Track the low band envelope */ L_tmp = *mem_csfilt; L_tmp = L_shl( *mem_csfilt, sub( Q_excTmp2, *Q_bwe_exc ) ); move32(); FOR( i = 0; i < L_FRAME16k; i++ ) { Loading @@ -3089,7 +3089,7 @@ void GenShapedSHBExcitation_ivas_fx( *mem_csfilt: Q_excTmp2+16, excTmp2: Q_excTmp2, csfilt_num2[0] Q_excTmp2 */ L_tmp = L_mult( excNoisyEnv[i], neg_csfilt_den2[1] ); /* Q_excTmp2 + 16 */ } *mem_csfilt = L_tmp; *mem_csfilt = L_shr( L_tmp, sub( Q_excTmp2, *Q_bwe_exc ) ); move32(); } #if 1 // def ADD_IVAS_TBE_CODE Loading Loading @@ -3141,20 +3141,15 @@ void GenShapedSHBExcitation_ivas_fx( /* create a random excitation - Reuse exc16k memory */ White_exc16k = exc16k; move16(); create_random_vector_fx( White_exc16k, L_FRAME, bwe_seed ); create_random_vector_fx( White_exc16k + L_FRAME, L_FRAME16k - L_FRAME, bwe_seed ); create_random_vector_fx( White_exc16k, L_FRAME, bwe_seed ); // Q5 create_random_vector_fx( White_exc16k + L_FRAME, L_FRAME16k - L_FRAME, bwe_seed ); // Q5 L_tmp = L_deposit_l( 0 ); tmp = add( *Q_bwe_exc, 1 ); FOR( k = 0; k < L_FRAME16k; k++ ) { #ifdef BASOP_NOGLOB L_tmp4 = L_shl_sat( L_deposit_l( White_exc16k[k] ), tmp ); #else L_tmp4 = L_shl( L_deposit_l( White_exc16k[k] ), tmp ); #endif L_tmp4 = L_mult( shr( excNoisyEnv[k], sub( Q_excTmp2, *Q_bwe_exc ) ), White_exc16k[k] ); /* (Q_bwe_exc) +5 +1*/ White_exc16k_32[k] = L_tmp4; L_tmp4 = L_mult( shr( excNoisyEnv[k], sub( Q_excTmp2, *Q_bwe_exc ) ), White_exc16k[k] ); /* (Q_excTmp2) +5 +1*/ White_exc16k_32[k] = L_tmp4; /* (Q_excTmp2) +5 +1*/ move32(); L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) ); } Loading @@ -3175,10 +3170,10 @@ void GenShapedSHBExcitation_ivas_fx( FOR( k = 0; k < L_FRAME16k; k++ ) { /* White_exc16k[k] *= excNoisyEnv[k]; */ White_exc16k[k] = mult_r( excNoisyEnv[k], shl( White_exc16k[k], tmp ) ); White_exc16k[k] = mult_r( excNoisyEnv[k], shl( White_exc16k[k], tmp ) ); // Q_excTmp2 + 5 + 1 - 15 ==> Q_excTmp2 - 9 move16(); chk2 = s_or( chk2, White_exc16k[k] ); /* i: excNoisyEnv in (Q_bwe_exc) */ /* i: excNoisyEnv in (Q_excTmp2) */ /* i: White_exc16k in Q6 */ /* o: White_exc16k in (Q_bwe_exc-NOISE_QADJ) */ /* pow22 += White_exc16k[k] * White_exc16k[k]; */ Loading Loading @@ -3500,11 +3495,11 @@ void GenShapedSHBExcitation_ivas_fx( tmp = sub( Q_temp, 3 ); FOR( k = 0; k < L_FRAME16k; k++ ) { White_exc16k_FB[k] = round_fx( L_shl( White_exc16k_32[k], tmp ) ); /* Q_bwe_exc +5 +1 +Q_temp -16 -3 */ White_exc16k_FB[k] = White_exc16k[k]; /* Q_bwe_exc-NOISE_QADJ */ } prev_Q_bwe_exc_fb = *Q_bwe_exc_fb; move16(); *Q_bwe_exc_fb = sub( add( *Q_bwe_exc, Q_temp ), 13 ); *Q_bwe_exc_fb = sub( *Q_bwe_exc, NOISE_QADJ ); move16(); deemph_fx( White_exc16k, PREEMPH_FAC, L_FRAME16k, tbe_demph ); /* i/o: White_exc16k (Q_bwe_exc-NOISE_QADJ) */ Loading Loading
lib_com/swb_tbe_com_fx.c +21 −26 Original line number Diff line number Diff line Loading @@ -2866,29 +2866,29 @@ void GenShapedSHBExcitation_ivas_fx( FOR( i = 0; i < L_FRAME32k; i = i + 2 ) { exc32k[i] = negate( bwe_exc_extended[i] ); exc32k[i] = negate( bwe_exc_extended[i] ); // Q_bwe_exc move16(); exc32k[i + 1] = bwe_exc_extended[i + 1]; exc32k[i + 1] = bwe_exc_extended[i + 1]; // Q_bwe_exc move16(); } /* Decimate by 2 */ Decimate_allpass_steep_fx( exc32k, mem_genSHBexc_filt_down_shb, 2 * L_FRAME16k, exc16k ); Decimate_allpass_steep_fx( exc32k, mem_genSHBexc_filt_down_shb, 2 * L_FRAME16k, exc16k ); // Q_bwe_exc /* i: exc32k in Q_bwe_exc */ /* o: exc16k in Q_bwe_exc */ autocorr_fx( exc16k, LPC_WHTN_ORDER + 1, R_h, R_l, &Q_R, L_FRAME16k, win_flatten_fx, 0, 1 ); autocorr_fx( exc16k, LPC_WHTN_ORDER + 1, R_h, R_l, &Q_R, L_FRAME16k, win_flatten_fx, 0, 1 ); // Q_R /* Ensure R[0] isn't zero when entering Levinson Durbin */ R_l[0] = s_max( R_l[0], 1 ); move16(); FOR( i = 1; i <= LPC_WHTN_ORDER; i++ ) { L_tmp = Mpy_32( R_h[i], R_l[i], wac_h[i - 1], wac_l[i - 1] ); L_Extract( L_tmp, &R_h[i], &R_l[i] ); L_Extract( L_tmp, &R_h[i], &R_l[i] ); // Q_R } E_LPC_lev_dur( R_h, R_l, lpc_whtn, LepsP, LPC_WHTN_ORDER, NULL ); Copy_Scale_sig( lpc_whtn, lpc_whtn, LPC_WHTN_ORDER + 1, sub( norm_s( lpc_whtn[0] ), 2 ) ); fir_fx( exc16k, lpc_whtn, exc16kWhtnd, wht_fil_mem, L_FRAME16k, LPC_WHTN_ORDER, 0, 3 ); Copy_Scale_sig( lpc_whtn, lpc_whtn, LPC_WHTN_ORDER + 1, sub( norm_s( lpc_whtn[0] ), 2 ) ); // Q12 fir_fx( exc16k, lpc_whtn, exc16kWhtnd, wht_fil_mem, L_FRAME16k, LPC_WHTN_ORDER, 0, 3 ); // Q_bwe_exc /* i: exc16k in Q_bwe_exc */ /* o: exc16kWhtnd in Q_bwe_exc */ Loading @@ -2907,7 +2907,7 @@ void GenShapedSHBExcitation_ivas_fx( move16(); FOR( i = 0; i < 80; i++ ) { exc16kWhtnd[temp2 + i] = round_fx( L_shl( L_mult( exc16kWhtnd[temp2 + i], temp1 ), 1 ) ); exc16kWhtnd[temp2 + i] = round_fx( L_shl( L_mult( exc16kWhtnd[temp2 + i], temp1 ), 1 ) ); // Q_bwe_exc move16(); /* exc16kWhtnd in Q_bwe_exc, shb_res_gshape in Q14 */ } Loading Loading @@ -2982,9 +2982,9 @@ void GenShapedSHBExcitation_ivas_fx( varEnvShape = s_max( varEnvShape, 9830 /*0.3f Q15*/ ); varEnvShape = s_min( varEnvShape, 16368 /*0.4995f Q15*/ ); varEnvShape = shl( varEnvShape, 1 ); csfilt_num2[0] = sub( MAX_16, varEnvShape ); csfilt_num2[0] = sub( MAX_16, varEnvShape ); // Q15 move16(); neg_csfilt_den2[1] = varEnvShape; neg_csfilt_den2[1] = varEnvShape; // Q15 move16(); test(); Loading Loading @@ -3036,7 +3036,7 @@ void GenShapedSHBExcitation_ivas_fx( White_exc16k = exc16k; move16(); Word16 Q_excTmp2 = add( getScaleFactor16( excTmp2, L_FRAME16k ), *Q_bwe_exc ); Word16 Q_excTmp2 = sub( add( s_min( getScaleFactor16( excTmp2, L_FRAME16k ), norm_l( *mem_csfilt ) ), *Q_bwe_exc ), 1 ); test(); /* Track the low band envelope */ IF( element_mode == IVAS_CPE_TD || element_mode == IVAS_CPE_DFT ) Loading Loading @@ -3079,7 +3079,7 @@ void GenShapedSHBExcitation_ivas_fx( #endif { /* Track the low band envelope */ L_tmp = *mem_csfilt; L_tmp = L_shl( *mem_csfilt, sub( Q_excTmp2, *Q_bwe_exc ) ); move32(); FOR( i = 0; i < L_FRAME16k; i++ ) { Loading @@ -3089,7 +3089,7 @@ void GenShapedSHBExcitation_ivas_fx( *mem_csfilt: Q_excTmp2+16, excTmp2: Q_excTmp2, csfilt_num2[0] Q_excTmp2 */ L_tmp = L_mult( excNoisyEnv[i], neg_csfilt_den2[1] ); /* Q_excTmp2 + 16 */ } *mem_csfilt = L_tmp; *mem_csfilt = L_shr( L_tmp, sub( Q_excTmp2, *Q_bwe_exc ) ); move32(); } #if 1 // def ADD_IVAS_TBE_CODE Loading Loading @@ -3141,20 +3141,15 @@ void GenShapedSHBExcitation_ivas_fx( /* create a random excitation - Reuse exc16k memory */ White_exc16k = exc16k; move16(); create_random_vector_fx( White_exc16k, L_FRAME, bwe_seed ); create_random_vector_fx( White_exc16k + L_FRAME, L_FRAME16k - L_FRAME, bwe_seed ); create_random_vector_fx( White_exc16k, L_FRAME, bwe_seed ); // Q5 create_random_vector_fx( White_exc16k + L_FRAME, L_FRAME16k - L_FRAME, bwe_seed ); // Q5 L_tmp = L_deposit_l( 0 ); tmp = add( *Q_bwe_exc, 1 ); FOR( k = 0; k < L_FRAME16k; k++ ) { #ifdef BASOP_NOGLOB L_tmp4 = L_shl_sat( L_deposit_l( White_exc16k[k] ), tmp ); #else L_tmp4 = L_shl( L_deposit_l( White_exc16k[k] ), tmp ); #endif L_tmp4 = L_mult( shr( excNoisyEnv[k], sub( Q_excTmp2, *Q_bwe_exc ) ), White_exc16k[k] ); /* (Q_bwe_exc) +5 +1*/ White_exc16k_32[k] = L_tmp4; L_tmp4 = L_mult( shr( excNoisyEnv[k], sub( Q_excTmp2, *Q_bwe_exc ) ), White_exc16k[k] ); /* (Q_excTmp2) +5 +1*/ White_exc16k_32[k] = L_tmp4; /* (Q_excTmp2) +5 +1*/ move32(); L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) ); } Loading @@ -3175,10 +3170,10 @@ void GenShapedSHBExcitation_ivas_fx( FOR( k = 0; k < L_FRAME16k; k++ ) { /* White_exc16k[k] *= excNoisyEnv[k]; */ White_exc16k[k] = mult_r( excNoisyEnv[k], shl( White_exc16k[k], tmp ) ); White_exc16k[k] = mult_r( excNoisyEnv[k], shl( White_exc16k[k], tmp ) ); // Q_excTmp2 + 5 + 1 - 15 ==> Q_excTmp2 - 9 move16(); chk2 = s_or( chk2, White_exc16k[k] ); /* i: excNoisyEnv in (Q_bwe_exc) */ /* i: excNoisyEnv in (Q_excTmp2) */ /* i: White_exc16k in Q6 */ /* o: White_exc16k in (Q_bwe_exc-NOISE_QADJ) */ /* pow22 += White_exc16k[k] * White_exc16k[k]; */ Loading Loading @@ -3500,11 +3495,11 @@ void GenShapedSHBExcitation_ivas_fx( tmp = sub( Q_temp, 3 ); FOR( k = 0; k < L_FRAME16k; k++ ) { White_exc16k_FB[k] = round_fx( L_shl( White_exc16k_32[k], tmp ) ); /* Q_bwe_exc +5 +1 +Q_temp -16 -3 */ White_exc16k_FB[k] = White_exc16k[k]; /* Q_bwe_exc-NOISE_QADJ */ } prev_Q_bwe_exc_fb = *Q_bwe_exc_fb; move16(); *Q_bwe_exc_fb = sub( add( *Q_bwe_exc, Q_temp ), 13 ); *Q_bwe_exc_fb = sub( *Q_bwe_exc, NOISE_QADJ ); move16(); deemph_fx( White_exc16k, PREEMPH_FAC, L_FRAME16k, tbe_demph ); /* i/o: White_exc16k (Q_bwe_exc-NOISE_QADJ) */ Loading