Loading lib_com/prot_fx.h +10 −9 Original line number Diff line number Diff line Loading @@ -3015,6 +3015,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( const Word32 extl_brate, /* i : extension layer bitarte */ const Word16 MSFlag, /* i : Multi Source flag */ Word16 EnvSHBres_4k[], /* i/o: TD envelope of the SHB residual signal */ Word16 Q_EnvSHBres_4k, Word32 *prev_pow_exc16kWhtnd, /* i/o: power of the LB excitation signal in the previous frame */ Word16 *prev_mix_factor, /* i/o: mixing factor in the previous frame */ Word16 *Env_error, /* o : error in SHB residual envelope modelling*/ Loading lib_com/swb_tbe_com_fx.c +67 −73 Original line number Diff line number Diff line Loading @@ -2853,6 +2853,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( const Word32 extl_brate, /* i : extension layer bitarte */ const Word16 MSFlag, /* i : Multi Source flag */ Word16 EnvSHBres_4k[], /* i/o: TD envelope of the SHB residual signal */ Word16 Q_EnvSHBres_4k, Word32 *prev_pow_exc16kWhtnd, /* i/o: power of the LB excitation signal in the previous frame */ Word16 *prev_mix_factor, /* i/o: mixing factor in the previous frame */ Word16 *Env_error, /* o : error in SHB residual envelope modelling Q0 */ Loading @@ -2872,6 +2873,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( Word16 excTmp2[L_FRAME16k]; Word16 *White_exc16k; Word16 Q_White_exc16k; Word16 excNoisyEnv[L_FRAME16k]; Word16 csfilt_num2[1] = { 6554 }; /*0.2 in Q15 */ move16(); Loading Loading @@ -2899,7 +2901,6 @@ void GenShapedSHBExcitation_ivas_enc_fx( Word16 White_exc16k_FB_temp[L_FRAME16k]; Word32 White_exc16k_32[L_FRAME16k]; Word16 White_exc16k_tmp[L_FRAME16k]; Word16 Q_temp; Word16 prev_Q_bwe_exc_fb; Word16 chk1, chk2; chk1 = 0; Loading Loading @@ -3089,7 +3090,6 @@ void GenShapedSHBExcitation_ivas_enc_fx( } White_exc16k = exc16k; move16(); Word16 Q_excTmp2 = add( getScaleFactor16( excTmp2, L_FRAME16k ), *Q_bwe_exc ); IF( *mem_csfilt ) { Loading Loading @@ -3168,12 +3168,12 @@ void GenShapedSHBExcitation_ivas_enc_fx( /* generate gaussian (white) excitation */ FOR( k = 0; k < L_FRAME16k; k++ ) { White_exc16k[k] = own_random( &bwe_seed[0] ); White_exc16k[k] = own_random( &bwe_seed[0] ); // Q0 move16(); } /* 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; // Q31 move32(); move32(); pow22 = POW_EXC16k_WHTND_FX; Loading @@ -3189,27 +3189,20 @@ void GenShapedSHBExcitation_ivas_enc_fx( // v_multc_fixed_16_16(White_exc16k, round_fx(temp_pow), White_exc16k, L_FRAME16k); L_tmp = 0; move32(); Q_White_exc16k = add( getScaleFactor16( White_exc16k, L_FRAME16k ), norm_l( temp_pow ) ); FOR( k = 0; k < L_FRAME16k; k++ ) { White_exc16k_32[k] = Mpy_32_16_1( temp_pow, White_exc16k[k] ); White_exc16k_32[k] = Mpy_32_16_1( temp_pow, White_exc16k[k] ); // Q31 + Q0 - Q15 = Q16 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], Q_White_exc16k ) ); // Q16 + Q_White_exc16k - Q16 = Q_White_exc16k move16(); L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) ); } Q_temp = norm_l( L_tmp ); IF( L_tmp == 0 ) { Q_temp = 31; move16(); } } ELSE #endif { /* create a random excitation - Reuse exc16k memory */ White_exc16k = exc16k; move16(); 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 Loading @@ -3222,12 +3215,6 @@ void GenShapedSHBExcitation_ivas_enc_fx( move32(); L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) ); } Q_temp = norm_l( L_tmp ); IF( L_tmp == 0 ) { Q_temp = 31; move16(); } /*Copy_Scale_sig( White_exc16k, White_exc16k, L_FRAME16k, sub(NOISE_QFAC, 5) );)*/ /* White_exc16k in Q6 */ Loading @@ -3235,22 +3222,23 @@ void GenShapedSHBExcitation_ivas_enc_fx( /* pow22=0.00001f */ tmp = sub( shl( sub( *Q_bwe_exc, NOISE_QADJ ), 1 ), 31 ); 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 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 move16(); chk2 = s_or( chk2, White_exc16k[k] ); /* 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]; */ sum = W_mac0_16_16( sum, 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)*/ } Q_pow22 = W_norm( sum ); pow22 = W_extract_h( W_shl( sum, Q_pow22 ) ); // 2*(Q_excTmp2-NOISE_QADJ)+Q_pow22-32 Q_pow22 = sub( add( Q_pow22, shl( sub( Q_excTmp2, NOISE_QADJ ), 1 ) ), 32 ); Scale_sig( White_exc16k, L_FRAME16k, sub( *Q_bwe_exc, Q_excTmp2 ) ); 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 Loading @@ -3272,7 +3260,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( { FOR( k = 0; k < L_FRAME16k; k++ ) { White_exc16k_tmp[k] = round_fx( L_shl( White_exc16k_32[k], *Q_bwe_exc ) ); White_exc16k_tmp[k] = shl( White_exc16k[k], sub( *Q_bwe_exc, Q_White_exc16k ) ); move16(); } Loading @@ -3298,8 +3286,8 @@ void GenShapedSHBExcitation_ivas_enc_fx( move32(); temp1 = add( shl( *Q_bwe_exc, 1 ), 1 ); temp2 = add( add( Q_shb, *Q_bwe_exc ), 1 ); temp3 = add( shl( Q_shb, 1 ), 1 ); temp2 = add( add( Q_EnvSHBres_4k, *Q_bwe_exc ), 1 ); temp3 = add( shl( Q_EnvSHBres_4k, 1 ), 1 ); FOR( i = 0; i < NUM_SHB_SUBGAINS; i++ ) { // c0_part[i] = sum2_f( &EnvExc16kWhtnd_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); Loading Loading @@ -3474,7 +3462,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( #endif { Estimate_mix_factors_fx( shb_res, Q_shb, exc16kWhtnd, *Q_bwe_exc, White_exc16k, ( *Q_bwe_exc - NOISE_QADJ ), pow1, Q_pow1, pow22, Q_pow22, voiceFacEst, vf_ind ); Q_White_exc16k, pow1, Q_pow1, pow22, Q_pow22, voiceFacEst, vf_ind ); tmp = voiceFacEst[0]; tmp2 = MAX_16; move16(); Loading Loading @@ -3538,6 +3526,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( } } #if 1 // def ADD_IVAS_TBE_CODE Scale_sig( White_exc16k, L_FRAME16k, sub( *Q_bwe_exc, Q_White_exc16k ) ); // Q_bwe_exc test(); IF( GE_16( element_mode, IVAS_CPE_DFT ) && nlExc16k != NULL ) { Loading @@ -3553,24 +3542,25 @@ void GenShapedSHBExcitation_ivas_enc_fx( // 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( White_exc16k[k], temp_fac ); // Q_bwe_exc 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_bwe_exc */ move16(); } 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_bwe_exc; move16(); 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) */ /* i/o: White_exc16k (Q_bwe_exc) */ /* i: tbe_demph (Q_bwe_exc) */ #if 1 // def ADD_IVAS_TBE_CODE test(); Loading @@ -3585,34 +3575,39 @@ void GenShapedSHBExcitation_ivas_enc_fx( // old_scale = Sqrt16(old_scale, &old_scale_exp); // old_scale = shl(old_scale, old_scale_exp); //Q15 L_tmp = root_a_over_b_fx( *prev_pow_exc16kWhtnd, 0, pow1, Q_pow1, &exp ); old_scale = round_fx_sat( L_shl_sat( L_tmp, exp ) ); // Q15 // new_scale = 1.0f; new_scale = 32767; IF( exp < 0 ) { L_tmp = L_shl( L_tmp, exp ); exp = 0; move16(); } old_scale = round_fx_sat( L_tmp ); // exp // new_scale = 1.0f; new_scale = shr( 32767, exp ); // exp // step_scale = (new_scale - old_scale) / (L_FRAME16k / 2); step_scale = mult_r( sub( new_scale, old_scale ), 205 ); scale = old_scale; step_scale = mult_r( sub( new_scale, old_scale ), 205 ); // exp scale = old_scale; // exp move16(); /* interpolate between the old and the new value of the mixing factor */ old_fact = *prev_mix_factor; old_fact = *prev_mix_factor; // Q15 move16(); new_fact = mix_factor; new_fact = mix_factor; // Q15 move16(); // step = (new_fact - old_fact) / (L_FRAME16k / 2); step = mult_r( sub( new_fact, old_fact ), 205 ); fact = old_fact; step = mult_r( sub( new_fact, old_fact ), 205 ); // Q15 fact = old_fact; // Q15 move16(); /* 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 ); L_tmp = L_add_sat( L_shl_sat( L_mult( fact, mult_r( White_exc16k[k], scale ) ), exp ), // Q15 + Q_bwe_exc + (Q15-exp) - Q15 + exp + Q1 L_mult( sub( 32767, fact ), exc16kWhtnd[k] ) ); // Q_bwe_exc + Q16 exc16kWhtnd[k] = round_fx_sat( L_tmp ); // Q_bwe_exc move16(); fact = add_sat( fact, step ); scale = add_sat( scale, step_scale ); fact = add_sat( fact, step ); // Q15 scale = add_sat( scale, step_scale ); // exp } /* mixing of LB and gaussian excitation in the second half of the frame */ Loading @@ -3620,14 +3615,14 @@ void GenShapedSHBExcitation_ivas_enc_fx( { // 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 ); L_tmp = L_add( L_mult( new_fact, White_exc16k[k] ), mult_r( sub( 32767, new_fact ), exc16kWhtnd[k] ) ); // Q_bwe_exc + Q15 + Q1 => Q_bwe_exc + Q16 exc16kWhtnd[k] = round_fx( L_tmp ); // Q_bwe_exc move16(); } } // preemph(exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph); PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); // Q_bwe_exc } ELSE #endif Loading @@ -3650,13 +3645,13 @@ void GenShapedSHBExcitation_ivas_enc_fx( 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 = L_mult( White_exc16k[k], scale ); // Q_bwe_exc + Q15 + Q1 => Q_bwe_exc + Q16 /* L_tmp: (Q_bwe_exc-NOISE_QADJ) + 15 + 1 */ exc16kWhtnd[k] = round_fx_sat( L_shl_sat( L_tmp, NOISE_QADJ ) ); exc16kWhtnd[k] = round_fx_sat( L_tmp ); // Q_bwe_exc move16(); /* exc16kWhtnd: Q_bwe_exc */ } PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); // Q_bwe_exc /* i/o: exc16kWhtnd (Q_bwe_exc) */ /* i/o: tbe_premph (Q_bwe_exc) */ } Loading Loading @@ -3721,9 +3716,8 @@ void GenShapedSHBExcitation_ivas_enc_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) */ exc16kWhtnd[k + j] = mac_r_sat( L_tmp, temp1, exc16kWhtnd[k + j] ); L_tmp = L_mult( temp2, White_exc16k[k + j] ); /* 16+(Q_bwe_exc)*/ exc16kWhtnd[k + j] = mac_r_sat( L_tmp, temp1, exc16kWhtnd[k + j] ); // Q_bwe_exc move16(); /* Q_bwe_exc */ } Loading @@ -3740,7 +3734,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( temp = div_s( temp, temp2 ); /* Q15 */ temp = mult_r( PREEMPH_FAC, temp ); PREEMPH_FX( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph ); PREEMPH_FX( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph ); // Q_bwe_exc /* exc16kWhtnd: Q_bwe_exc; tbe_premph: Q_bwe_exc*/ } Loading @@ -3753,7 +3747,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( IF( LT_32( bitrate, ACELP_24k40 ) ) #endif { Syn_filt_s( 0, lpc_shb, LPC_SHB_ORDER, exc16kWhtnd, excSHB, L_FRAME16k, state_lpc_syn, 1 ); syn_filt_fx( 0, lpc_shb, LPC_SHB_ORDER, exc16kWhtnd, excSHB, L_FRAME16k, state_lpc_syn, 1 ); /* i: exc16kWhtnd in Q_bwe_exc */ /* o: excSHB in Q_bwe_exc */ } Loading lib_com/syn_filt_fx.c +7 −5 Original line number Diff line number Diff line Loading @@ -185,7 +185,8 @@ void syn_filt_fx( { Word16 i, j; Word16 buf[L_FRAME48k + L_FRAME48k / 2 + TCXLTP_LTP_ORDER]; /* temporary synthesis buffer */ Word16 s, *yy; Word16 *yy; Word32 s; Word16 q; Flag Overflow = 0; move16(); Loading @@ -212,15 +213,16 @@ void syn_filt_fx( FOR( i = 0; i < l; i++ ) { s = mult_r( shl_o( a0, q, &Overflow ), x[i] ); s = L_mult( a0, x[i] ); FOR( j = 1; j <= m; j++ ) { s = msu_ro( L_deposit_h( s ), shl_o( a[j], q, &Overflow ), yy[i - j], &Overflow ); s = L_msu_sat( s, a[j], yy[i - j] ); } yy[i] = s; s = L_shl_sat( s, q ); yy[i] = extract_h( s ); move16(); y[i] = s; y[i] = extract_h( s ); move16(); } Loading lib_enc/ivas_ism_param_enc.c +2 −2 Original line number Diff line number Diff line Loading @@ -374,8 +374,8 @@ void ivas_param_ism_stereo_dmx_fx( tmp_1 = W_norm( ene_data ); tmp_2 = W_norm( ene_dmx ); ene_data = W_shl( ene_data, tmp_1 ); ene_dmx = W_add( W_shl( ene_dmx, tmp_2 ), 1 ); dmx_gain = BASOP_Util_Divide3232_Scale( W_extract_h( ene_data ), W_extract_h( ene_dmx ), &dmx_gain_e ); ene_dmx = W_shl( ene_dmx, tmp_2 ); dmx_gain = BASOP_Util_Divide3232_Scale( W_extract_h( ene_data ), L_add_sat( W_extract_h( ene_dmx ), 1 ), &dmx_gain_e ); dmx_gain_e = sub( dmx_gain_e, sub( tmp_1, tmp_2 ) ); dmx_gain = Sqrt16( dmx_gain, &dmx_gain_e ); Loading lib_enc/swb_tbe_enc_fx.c +23 −6 Original line number Diff line number Diff line Loading @@ -2940,7 +2940,7 @@ void swb_tbe_enc_ivas_fx( Word16 formant_fac_fx; // int16_t stab_check = 1; Word16 MSFlag; Word16 *nlExc16k_fx, *mixExc16k_fx; Word16 *nlExc16k_fx, *mixExc16k_fx, *mixExc16k_e; Word16 shaped_shb_excitationTemp_fx[L_FRAME16k]; Loading @@ -2948,6 +2948,9 @@ void swb_tbe_enc_ivas_fx( Word16 acorr_EnvSHBres[ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN], *p_acorr, shb_env_tilt_fx; Word16 buf_EnvSHBres_fx[2 * L_FRAME4k], *p_buf, EnvSHBres_fx[L_FRAME16k], EnvSHBres_4k_fx[L_FRAME4k], EnvSHBres_4k_norm_fx[L_FRAME4k], env_mean_normf_fx[L_FRAME4k]; Word32 tmp_buf[L_FRAME4k]; Word16 Q_EnvSHBres_4k_norm = Q31; move16(); Word16 GainShape_Interp_fx[NUM_SHB_SUBGAINS], GainShape_tilt_fx; /* Q15 */ Word16 seg_mean[4], den_seg_mean[4], *p_env, step; Word16 temp, scale_fx, scale_e, pow_e, tmp_e, tmp1_e; Loading Loading @@ -2995,6 +2998,7 @@ void swb_tbe_enc_ivas_fx( { nlExc16k_fx = hStereoICBWE->nlExc16k_fx; mixExc16k_fx = hStereoICBWE->mixExc16k_fx; mixExc16k_e = &hStereoICBWE->mixExc16k_e; MSFlag = hStereoICBWE->MSFlag; move16(); } Loading @@ -3002,6 +3006,7 @@ void swb_tbe_enc_ivas_fx( { nlExc16k_fx = NULL; mixExc16k_fx = NULL; mixExc16k_e = NULL; MSFlag = 0; move16(); } Loading Loading @@ -3503,7 +3508,13 @@ void swb_tbe_enc_ivas_fx( /* normalize residual SHB envelope with its long-term mean envelope */ FOR( k = 0; k < L_FRAME4k; k++ ) { EnvSHBres_4k_norm_fx[k] = mult( EnvSHBres_4k_fx[k], env_mean_normf_fx[k] ); tmp_buf[k] = L_mult( EnvSHBres_4k_fx[k], env_mean_normf_fx[k] ); // Q_shb + Q15 + Q1 => Q_shb + Q16 move32(); } Q_EnvSHBres_4k_norm = sub( getScaleFactor32( tmp_buf, L_FRAME4k ), 1 /* Guard bit */ ); FOR( k = 0; k < L_FRAME4k; k++ ) { EnvSHBres_4k_norm_fx[k] = extract_h( L_shl( tmp_buf[k], Q_EnvSHBres_4k_norm ) ); // Q_shb + Q16 + Q_EnvSHBres_4k_norm - Q16 => Q_EnvSHBres_4k_norm + Q_shb move16(); } Loading @@ -3515,15 +3526,16 @@ void swb_tbe_enc_ivas_fx( /* subtract mean value from the normalized SHB residual envelope */ p_buf = &buf_EnvSHBres_fx[L_FRAME4k]; temp = mean_no_sat_fx( EnvSHBres_4k_norm_fx, L_FRAME4k ); temp = mean_no_sat_fx( EnvSHBres_4k_norm_fx, L_FRAME4k ); // Q_EnvSHBres_4k_norm + Q_shb FOR( k = 0; k < L_FRAME4k; k++ ) { *p_buf++ = sub( EnvSHBres_4k_norm_fx[k], temp ); *p_buf++ = shr( sub( EnvSHBres_4k_norm_fx[k], temp ), Q_EnvSHBres_4k_norm ); // Q_shb move16(); } Q_EnvSHBres_4k_norm = add( Q_EnvSHBres_4k_norm, Q_shb ); /* update memory */ Copy( &buf_EnvSHBres_fx[L_FRAME4k], hBWE_TD->old_EnvSHBres_fx, L_FRAME4k ); Copy( &buf_EnvSHBres_fx[L_FRAME4k], hBWE_TD->old_EnvSHBres_fx, L_FRAME4k ); // Q_shb /* calculate energy normalization factor for the auto-correlation function */ // pow0 = sum2_f( &buf_EnvSHBres[L_FRAME4k], L_FRAME4k ) + 1.0f; Loading Loading @@ -3698,7 +3710,12 @@ void swb_tbe_enc_ivas_fx( &( hBWE_TD->tbe_demph_fx ), &( hBWE_TD->tbe_premph_fx ), lpc_shb_sf_fx, shb_ener_sf_Q31, shb_res_gshape_fx, shb_res_fx, &vf_ind_fx, formant_fac_fx, hBWE_TD->fb_state_lpc_syn_fx, &( hBWE_TD->fb_tbe_demph_fx ), &Q_bwe_exc, &Q_bwe_exc_fb, Q_shb, n_mem2, st_fx->prev_Q_bwe_syn, st_fx->total_brate, 0, st_fx->element_mode, st_fx->flag_ACELP16k, nlExc16k_fx, mixExc16k_fx, st_fx->extl_brate, MSFlag, EnvSHBres_4k_norm_fx, &( hBWE_TD->prev_pow_exc16kWhtnd_fx32 ), &( hBWE_TD->prev_mix_factor_fx ), &Env_error_fx, Env_error_part_fx ); EnvSHBres_4k_norm_fx, Q_EnvSHBres_4k_norm, &( hBWE_TD->prev_pow_exc16kWhtnd_fx32 ), &( hBWE_TD->prev_mix_factor_fx ), &Env_error_fx, Env_error_part_fx ); IF( mixExc16k_e ) { *mixExc16k_e = sub( Q15, Q_bwe_exc ); move16(); } *Q_white_exc = Q_bwe_exc_fb; move16(); Loading Loading
lib_com/prot_fx.h +10 −9 Original line number Diff line number Diff line Loading @@ -3015,6 +3015,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( const Word32 extl_brate, /* i : extension layer bitarte */ const Word16 MSFlag, /* i : Multi Source flag */ Word16 EnvSHBres_4k[], /* i/o: TD envelope of the SHB residual signal */ Word16 Q_EnvSHBres_4k, Word32 *prev_pow_exc16kWhtnd, /* i/o: power of the LB excitation signal in the previous frame */ Word16 *prev_mix_factor, /* i/o: mixing factor in the previous frame */ Word16 *Env_error, /* o : error in SHB residual envelope modelling*/ Loading
lib_com/swb_tbe_com_fx.c +67 −73 Original line number Diff line number Diff line Loading @@ -2853,6 +2853,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( const Word32 extl_brate, /* i : extension layer bitarte */ const Word16 MSFlag, /* i : Multi Source flag */ Word16 EnvSHBres_4k[], /* i/o: TD envelope of the SHB residual signal */ Word16 Q_EnvSHBres_4k, Word32 *prev_pow_exc16kWhtnd, /* i/o: power of the LB excitation signal in the previous frame */ Word16 *prev_mix_factor, /* i/o: mixing factor in the previous frame */ Word16 *Env_error, /* o : error in SHB residual envelope modelling Q0 */ Loading @@ -2872,6 +2873,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( Word16 excTmp2[L_FRAME16k]; Word16 *White_exc16k; Word16 Q_White_exc16k; Word16 excNoisyEnv[L_FRAME16k]; Word16 csfilt_num2[1] = { 6554 }; /*0.2 in Q15 */ move16(); Loading Loading @@ -2899,7 +2901,6 @@ void GenShapedSHBExcitation_ivas_enc_fx( Word16 White_exc16k_FB_temp[L_FRAME16k]; Word32 White_exc16k_32[L_FRAME16k]; Word16 White_exc16k_tmp[L_FRAME16k]; Word16 Q_temp; Word16 prev_Q_bwe_exc_fb; Word16 chk1, chk2; chk1 = 0; Loading Loading @@ -3089,7 +3090,6 @@ void GenShapedSHBExcitation_ivas_enc_fx( } White_exc16k = exc16k; move16(); Word16 Q_excTmp2 = add( getScaleFactor16( excTmp2, L_FRAME16k ), *Q_bwe_exc ); IF( *mem_csfilt ) { Loading Loading @@ -3168,12 +3168,12 @@ void GenShapedSHBExcitation_ivas_enc_fx( /* generate gaussian (white) excitation */ FOR( k = 0; k < L_FRAME16k; k++ ) { White_exc16k[k] = own_random( &bwe_seed[0] ); White_exc16k[k] = own_random( &bwe_seed[0] ); // Q0 move16(); } /* 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; // Q31 move32(); move32(); pow22 = POW_EXC16k_WHTND_FX; Loading @@ -3189,27 +3189,20 @@ void GenShapedSHBExcitation_ivas_enc_fx( // v_multc_fixed_16_16(White_exc16k, round_fx(temp_pow), White_exc16k, L_FRAME16k); L_tmp = 0; move32(); Q_White_exc16k = add( getScaleFactor16( White_exc16k, L_FRAME16k ), norm_l( temp_pow ) ); FOR( k = 0; k < L_FRAME16k; k++ ) { White_exc16k_32[k] = Mpy_32_16_1( temp_pow, White_exc16k[k] ); White_exc16k_32[k] = Mpy_32_16_1( temp_pow, White_exc16k[k] ); // Q31 + Q0 - Q15 = Q16 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], Q_White_exc16k ) ); // Q16 + Q_White_exc16k - Q16 = Q_White_exc16k move16(); L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) ); } Q_temp = norm_l( L_tmp ); IF( L_tmp == 0 ) { Q_temp = 31; move16(); } } ELSE #endif { /* create a random excitation - Reuse exc16k memory */ White_exc16k = exc16k; move16(); 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 Loading @@ -3222,12 +3215,6 @@ void GenShapedSHBExcitation_ivas_enc_fx( move32(); L_tmp = L_max( L_tmp, L_abs( White_exc16k_32[k] ) ); } Q_temp = norm_l( L_tmp ); IF( L_tmp == 0 ) { Q_temp = 31; move16(); } /*Copy_Scale_sig( White_exc16k, White_exc16k, L_FRAME16k, sub(NOISE_QFAC, 5) );)*/ /* White_exc16k in Q6 */ Loading @@ -3235,22 +3222,23 @@ void GenShapedSHBExcitation_ivas_enc_fx( /* pow22=0.00001f */ tmp = sub( shl( sub( *Q_bwe_exc, NOISE_QADJ ), 1 ), 31 ); 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 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 move16(); chk2 = s_or( chk2, White_exc16k[k] ); /* 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]; */ sum = W_mac0_16_16( sum, 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)*/ } Q_pow22 = W_norm( sum ); pow22 = W_extract_h( W_shl( sum, Q_pow22 ) ); // 2*(Q_excTmp2-NOISE_QADJ)+Q_pow22-32 Q_pow22 = sub( add( Q_pow22, shl( sub( Q_excTmp2, NOISE_QADJ ), 1 ) ), 32 ); Scale_sig( White_exc16k, L_FRAME16k, sub( *Q_bwe_exc, Q_excTmp2 ) ); 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 Loading @@ -3272,7 +3260,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( { FOR( k = 0; k < L_FRAME16k; k++ ) { White_exc16k_tmp[k] = round_fx( L_shl( White_exc16k_32[k], *Q_bwe_exc ) ); White_exc16k_tmp[k] = shl( White_exc16k[k], sub( *Q_bwe_exc, Q_White_exc16k ) ); move16(); } Loading @@ -3298,8 +3286,8 @@ void GenShapedSHBExcitation_ivas_enc_fx( move32(); temp1 = add( shl( *Q_bwe_exc, 1 ), 1 ); temp2 = add( add( Q_shb, *Q_bwe_exc ), 1 ); temp3 = add( shl( Q_shb, 1 ), 1 ); temp2 = add( add( Q_EnvSHBres_4k, *Q_bwe_exc ), 1 ); temp3 = add( shl( Q_EnvSHBres_4k, 1 ), 1 ); FOR( i = 0; i < NUM_SHB_SUBGAINS; i++ ) { // c0_part[i] = sum2_f( &EnvExc16kWhtnd_4k[i * L_FRAME4k / NUM_SHB_SUBGAINS], L_FRAME4k / NUM_SHB_SUBGAINS ); Loading Loading @@ -3474,7 +3462,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( #endif { Estimate_mix_factors_fx( shb_res, Q_shb, exc16kWhtnd, *Q_bwe_exc, White_exc16k, ( *Q_bwe_exc - NOISE_QADJ ), pow1, Q_pow1, pow22, Q_pow22, voiceFacEst, vf_ind ); Q_White_exc16k, pow1, Q_pow1, pow22, Q_pow22, voiceFacEst, vf_ind ); tmp = voiceFacEst[0]; tmp2 = MAX_16; move16(); Loading Loading @@ -3538,6 +3526,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( } } #if 1 // def ADD_IVAS_TBE_CODE Scale_sig( White_exc16k, L_FRAME16k, sub( *Q_bwe_exc, Q_White_exc16k ) ); // Q_bwe_exc test(); IF( GE_16( element_mode, IVAS_CPE_DFT ) && nlExc16k != NULL ) { Loading @@ -3553,24 +3542,25 @@ void GenShapedSHBExcitation_ivas_enc_fx( // 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( White_exc16k[k], temp_fac ); // Q_bwe_exc 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_bwe_exc */ move16(); } 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_bwe_exc; move16(); 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) */ /* i/o: White_exc16k (Q_bwe_exc) */ /* i: tbe_demph (Q_bwe_exc) */ #if 1 // def ADD_IVAS_TBE_CODE test(); Loading @@ -3585,34 +3575,39 @@ void GenShapedSHBExcitation_ivas_enc_fx( // old_scale = Sqrt16(old_scale, &old_scale_exp); // old_scale = shl(old_scale, old_scale_exp); //Q15 L_tmp = root_a_over_b_fx( *prev_pow_exc16kWhtnd, 0, pow1, Q_pow1, &exp ); old_scale = round_fx_sat( L_shl_sat( L_tmp, exp ) ); // Q15 // new_scale = 1.0f; new_scale = 32767; IF( exp < 0 ) { L_tmp = L_shl( L_tmp, exp ); exp = 0; move16(); } old_scale = round_fx_sat( L_tmp ); // exp // new_scale = 1.0f; new_scale = shr( 32767, exp ); // exp // step_scale = (new_scale - old_scale) / (L_FRAME16k / 2); step_scale = mult_r( sub( new_scale, old_scale ), 205 ); scale = old_scale; step_scale = mult_r( sub( new_scale, old_scale ), 205 ); // exp scale = old_scale; // exp move16(); /* interpolate between the old and the new value of the mixing factor */ old_fact = *prev_mix_factor; old_fact = *prev_mix_factor; // Q15 move16(); new_fact = mix_factor; new_fact = mix_factor; // Q15 move16(); // step = (new_fact - old_fact) / (L_FRAME16k / 2); step = mult_r( sub( new_fact, old_fact ), 205 ); fact = old_fact; step = mult_r( sub( new_fact, old_fact ), 205 ); // Q15 fact = old_fact; // Q15 move16(); /* 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 ); L_tmp = L_add_sat( L_shl_sat( L_mult( fact, mult_r( White_exc16k[k], scale ) ), exp ), // Q15 + Q_bwe_exc + (Q15-exp) - Q15 + exp + Q1 L_mult( sub( 32767, fact ), exc16kWhtnd[k] ) ); // Q_bwe_exc + Q16 exc16kWhtnd[k] = round_fx_sat( L_tmp ); // Q_bwe_exc move16(); fact = add_sat( fact, step ); scale = add_sat( scale, step_scale ); fact = add_sat( fact, step ); // Q15 scale = add_sat( scale, step_scale ); // exp } /* mixing of LB and gaussian excitation in the second half of the frame */ Loading @@ -3620,14 +3615,14 @@ void GenShapedSHBExcitation_ivas_enc_fx( { // 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 ); L_tmp = L_add( L_mult( new_fact, White_exc16k[k] ), mult_r( sub( 32767, new_fact ), exc16kWhtnd[k] ) ); // Q_bwe_exc + Q15 + Q1 => Q_bwe_exc + Q16 exc16kWhtnd[k] = round_fx( L_tmp ); // Q_bwe_exc move16(); } } // preemph(exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph); PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); // Q_bwe_exc } ELSE #endif Loading @@ -3650,13 +3645,13 @@ void GenShapedSHBExcitation_ivas_enc_fx( 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 = L_mult( White_exc16k[k], scale ); // Q_bwe_exc + Q15 + Q1 => Q_bwe_exc + Q16 /* L_tmp: (Q_bwe_exc-NOISE_QADJ) + 15 + 1 */ exc16kWhtnd[k] = round_fx_sat( L_shl_sat( L_tmp, NOISE_QADJ ) ); exc16kWhtnd[k] = round_fx_sat( L_tmp ); // Q_bwe_exc move16(); /* exc16kWhtnd: Q_bwe_exc */ } PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); PREEMPH_FX( exc16kWhtnd, PREEMPH_FAC, L_FRAME16k, tbe_premph ); // Q_bwe_exc /* i/o: exc16kWhtnd (Q_bwe_exc) */ /* i/o: tbe_premph (Q_bwe_exc) */ } Loading Loading @@ -3721,9 +3716,8 @@ void GenShapedSHBExcitation_ivas_enc_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) */ exc16kWhtnd[k + j] = mac_r_sat( L_tmp, temp1, exc16kWhtnd[k + j] ); L_tmp = L_mult( temp2, White_exc16k[k + j] ); /* 16+(Q_bwe_exc)*/ exc16kWhtnd[k + j] = mac_r_sat( L_tmp, temp1, exc16kWhtnd[k + j] ); // Q_bwe_exc move16(); /* Q_bwe_exc */ } Loading @@ -3740,7 +3734,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( temp = div_s( temp, temp2 ); /* Q15 */ temp = mult_r( PREEMPH_FAC, temp ); PREEMPH_FX( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph ); PREEMPH_FX( &exc16kWhtnd[i * lSubFr], temp, lSubFr, tbe_premph ); // Q_bwe_exc /* exc16kWhtnd: Q_bwe_exc; tbe_premph: Q_bwe_exc*/ } Loading @@ -3753,7 +3747,7 @@ void GenShapedSHBExcitation_ivas_enc_fx( IF( LT_32( bitrate, ACELP_24k40 ) ) #endif { Syn_filt_s( 0, lpc_shb, LPC_SHB_ORDER, exc16kWhtnd, excSHB, L_FRAME16k, state_lpc_syn, 1 ); syn_filt_fx( 0, lpc_shb, LPC_SHB_ORDER, exc16kWhtnd, excSHB, L_FRAME16k, state_lpc_syn, 1 ); /* i: exc16kWhtnd in Q_bwe_exc */ /* o: excSHB in Q_bwe_exc */ } Loading
lib_com/syn_filt_fx.c +7 −5 Original line number Diff line number Diff line Loading @@ -185,7 +185,8 @@ void syn_filt_fx( { Word16 i, j; Word16 buf[L_FRAME48k + L_FRAME48k / 2 + TCXLTP_LTP_ORDER]; /* temporary synthesis buffer */ Word16 s, *yy; Word16 *yy; Word32 s; Word16 q; Flag Overflow = 0; move16(); Loading @@ -212,15 +213,16 @@ void syn_filt_fx( FOR( i = 0; i < l; i++ ) { s = mult_r( shl_o( a0, q, &Overflow ), x[i] ); s = L_mult( a0, x[i] ); FOR( j = 1; j <= m; j++ ) { s = msu_ro( L_deposit_h( s ), shl_o( a[j], q, &Overflow ), yy[i - j], &Overflow ); s = L_msu_sat( s, a[j], yy[i - j] ); } yy[i] = s; s = L_shl_sat( s, q ); yy[i] = extract_h( s ); move16(); y[i] = s; y[i] = extract_h( s ); move16(); } Loading
lib_enc/ivas_ism_param_enc.c +2 −2 Original line number Diff line number Diff line Loading @@ -374,8 +374,8 @@ void ivas_param_ism_stereo_dmx_fx( tmp_1 = W_norm( ene_data ); tmp_2 = W_norm( ene_dmx ); ene_data = W_shl( ene_data, tmp_1 ); ene_dmx = W_add( W_shl( ene_dmx, tmp_2 ), 1 ); dmx_gain = BASOP_Util_Divide3232_Scale( W_extract_h( ene_data ), W_extract_h( ene_dmx ), &dmx_gain_e ); ene_dmx = W_shl( ene_dmx, tmp_2 ); dmx_gain = BASOP_Util_Divide3232_Scale( W_extract_h( ene_data ), L_add_sat( W_extract_h( ene_dmx ), 1 ), &dmx_gain_e ); dmx_gain_e = sub( dmx_gain_e, sub( tmp_1, tmp_2 ) ); dmx_gain = Sqrt16( dmx_gain, &dmx_gain_e ); Loading
lib_enc/swb_tbe_enc_fx.c +23 −6 Original line number Diff line number Diff line Loading @@ -2940,7 +2940,7 @@ void swb_tbe_enc_ivas_fx( Word16 formant_fac_fx; // int16_t stab_check = 1; Word16 MSFlag; Word16 *nlExc16k_fx, *mixExc16k_fx; Word16 *nlExc16k_fx, *mixExc16k_fx, *mixExc16k_e; Word16 shaped_shb_excitationTemp_fx[L_FRAME16k]; Loading @@ -2948,6 +2948,9 @@ void swb_tbe_enc_ivas_fx( Word16 acorr_EnvSHBres[ENVSHBRES_ACORR_MAX - ENVSHBRES_ACORR_MIN], *p_acorr, shb_env_tilt_fx; Word16 buf_EnvSHBres_fx[2 * L_FRAME4k], *p_buf, EnvSHBres_fx[L_FRAME16k], EnvSHBres_4k_fx[L_FRAME4k], EnvSHBres_4k_norm_fx[L_FRAME4k], env_mean_normf_fx[L_FRAME4k]; Word32 tmp_buf[L_FRAME4k]; Word16 Q_EnvSHBres_4k_norm = Q31; move16(); Word16 GainShape_Interp_fx[NUM_SHB_SUBGAINS], GainShape_tilt_fx; /* Q15 */ Word16 seg_mean[4], den_seg_mean[4], *p_env, step; Word16 temp, scale_fx, scale_e, pow_e, tmp_e, tmp1_e; Loading Loading @@ -2995,6 +2998,7 @@ void swb_tbe_enc_ivas_fx( { nlExc16k_fx = hStereoICBWE->nlExc16k_fx; mixExc16k_fx = hStereoICBWE->mixExc16k_fx; mixExc16k_e = &hStereoICBWE->mixExc16k_e; MSFlag = hStereoICBWE->MSFlag; move16(); } Loading @@ -3002,6 +3006,7 @@ void swb_tbe_enc_ivas_fx( { nlExc16k_fx = NULL; mixExc16k_fx = NULL; mixExc16k_e = NULL; MSFlag = 0; move16(); } Loading Loading @@ -3503,7 +3508,13 @@ void swb_tbe_enc_ivas_fx( /* normalize residual SHB envelope with its long-term mean envelope */ FOR( k = 0; k < L_FRAME4k; k++ ) { EnvSHBres_4k_norm_fx[k] = mult( EnvSHBres_4k_fx[k], env_mean_normf_fx[k] ); tmp_buf[k] = L_mult( EnvSHBres_4k_fx[k], env_mean_normf_fx[k] ); // Q_shb + Q15 + Q1 => Q_shb + Q16 move32(); } Q_EnvSHBres_4k_norm = sub( getScaleFactor32( tmp_buf, L_FRAME4k ), 1 /* Guard bit */ ); FOR( k = 0; k < L_FRAME4k; k++ ) { EnvSHBres_4k_norm_fx[k] = extract_h( L_shl( tmp_buf[k], Q_EnvSHBres_4k_norm ) ); // Q_shb + Q16 + Q_EnvSHBres_4k_norm - Q16 => Q_EnvSHBres_4k_norm + Q_shb move16(); } Loading @@ -3515,15 +3526,16 @@ void swb_tbe_enc_ivas_fx( /* subtract mean value from the normalized SHB residual envelope */ p_buf = &buf_EnvSHBres_fx[L_FRAME4k]; temp = mean_no_sat_fx( EnvSHBres_4k_norm_fx, L_FRAME4k ); temp = mean_no_sat_fx( EnvSHBres_4k_norm_fx, L_FRAME4k ); // Q_EnvSHBres_4k_norm + Q_shb FOR( k = 0; k < L_FRAME4k; k++ ) { *p_buf++ = sub( EnvSHBres_4k_norm_fx[k], temp ); *p_buf++ = shr( sub( EnvSHBres_4k_norm_fx[k], temp ), Q_EnvSHBres_4k_norm ); // Q_shb move16(); } Q_EnvSHBres_4k_norm = add( Q_EnvSHBres_4k_norm, Q_shb ); /* update memory */ Copy( &buf_EnvSHBres_fx[L_FRAME4k], hBWE_TD->old_EnvSHBres_fx, L_FRAME4k ); Copy( &buf_EnvSHBres_fx[L_FRAME4k], hBWE_TD->old_EnvSHBres_fx, L_FRAME4k ); // Q_shb /* calculate energy normalization factor for the auto-correlation function */ // pow0 = sum2_f( &buf_EnvSHBres[L_FRAME4k], L_FRAME4k ) + 1.0f; Loading Loading @@ -3698,7 +3710,12 @@ void swb_tbe_enc_ivas_fx( &( hBWE_TD->tbe_demph_fx ), &( hBWE_TD->tbe_premph_fx ), lpc_shb_sf_fx, shb_ener_sf_Q31, shb_res_gshape_fx, shb_res_fx, &vf_ind_fx, formant_fac_fx, hBWE_TD->fb_state_lpc_syn_fx, &( hBWE_TD->fb_tbe_demph_fx ), &Q_bwe_exc, &Q_bwe_exc_fb, Q_shb, n_mem2, st_fx->prev_Q_bwe_syn, st_fx->total_brate, 0, st_fx->element_mode, st_fx->flag_ACELP16k, nlExc16k_fx, mixExc16k_fx, st_fx->extl_brate, MSFlag, EnvSHBres_4k_norm_fx, &( hBWE_TD->prev_pow_exc16kWhtnd_fx32 ), &( hBWE_TD->prev_mix_factor_fx ), &Env_error_fx, Env_error_part_fx ); EnvSHBres_4k_norm_fx, Q_EnvSHBres_4k_norm, &( hBWE_TD->prev_pow_exc16kWhtnd_fx32 ), &( hBWE_TD->prev_mix_factor_fx ), &Env_error_fx, Env_error_part_fx ); IF( mixExc16k_e ) { *mixExc16k_e = sub( Q15, Q_bwe_exc ); move16(); } *Q_white_exc = Q_bwe_exc_fb; move16(); Loading