diff --git a/lib_com/options.h b/lib_com/options.h index 00073632171e62e6bae6c2b00ec47587a38ff133..78df6747f9dd0996e122fc58cdb9e1a0f61ffa14 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -100,6 +100,7 @@ #define FIX_BASOP_2442_MASA2TC_TO_MONO_AND_AMBI /* Nokia: BASOP issue 2442: Increase accuracy of computations and add additional gain clamp for low energy decorrelated signal rendering. */ #define FIX_FMSW_DEC_EXT /* float issue 1566: fix EXT output in format switching */ #define FIX_BASOP_2612_RESET_DECIM_MEM /* FhG: BASOP #2612: reset (zero) the 16k resampler memory of the secondary channel on DFT->TD stereo switch (otherwise -> fx overshoot) */ +#define FIX_BASOP_2621_STEREO_CNG_NOISY_SPEECH_QSHIFT /* FhG: BASOP #2621: stereo_dft_generate_comfort_noise_fx flag_noisy_speech: compare (lp_speech-lp_noise) Q23 diff against 28.0 in Q23 (was vs integer 28 with q_lp_noise=0) */ /* ##################### End NON-BE switches ########################### */ diff --git a/lib_dec/fd_cng_dec_fx.c b/lib_dec/fd_cng_dec_fx.c index dc24fc6f95d392b159d59871821adf309a494eed..d11cceae092589073cd88de74a88b23c0f87a230 100644 --- a/lib_dec/fd_cng_dec_fx.c +++ b/lib_dec/fd_cng_dec_fx.c @@ -2128,7 +2128,7 @@ void noisy_speech_detection_fx( logTotalNoise = Mpy_32_16_1( L_add( logTotalNoise, logTotalNoiseExp ), 24660 /*0.75257498916 Q15*/ ); /*Q31 - logTotalNoiseExp*/ } - hFdCngDec->lp_noise = L_add( Mpy_32_16_1( hFdCngDec->lp_noise, 32604 /*0.995 Q15*/ ), L_shr( Mpy_32_16_1( logTotalNoise, 20972 /*0.64 Q15*/ ), 7 ) ); /*hFdCngDec->q_lp_noise*/ + hFdCngDec->lp_noise = L_add( Mpy_32_16_1( hFdCngDec->lp_noise, 32604 /*0.995 Q15*/ ), L_shr( Mpy_32_16_1( logTotalNoise, 20972 /*0.64 Q15*/ ), 7 ) ); /*Q23*/ move32(); } ELSE @@ -2175,7 +2175,7 @@ void noisy_speech_detection_fx( } } - hFdCngDec->lp_speech = L_add( Mpy_32_16_1( hFdCngDec->lp_speech, 32604 /*0.995 Q15*/ ), L_shr( Mpy_32_16_1( logEtot, 20972 /*0.64 Q15*/ ), 7 ) ); /*hFdCngDec->q_lp_speech*/ + hFdCngDec->lp_speech = L_add( Mpy_32_16_1( hFdCngDec->lp_speech, 32604 /*0.995 Q15*/ ), L_shr( Mpy_32_16_1( logEtot, 20972 /*0.64 Q15*/ ), 7 ) ); /*Q23*/ move32(); } diff --git a/lib_dec/ivas_stereo_cng_dec_fx.c b/lib_dec/ivas_stereo_cng_dec_fx.c index c7b506d4da177fb3d228d5362c68c49d81e83548..69fa7293c88a3eab117ca236ebfedaf33fbc4c0a 100644 --- a/lib_dec/ivas_stereo_cng_dec_fx.c +++ b/lib_dec/ivas_stereo_cng_dec_fx.c @@ -772,8 +772,10 @@ static void stereo_dft_generate_comfort_noise_fx( } ELSE IF( ( chan == 0 ) ) { +#ifndef FIX_BASOP_2621_STEREO_CNG_NOISY_SPEECH_QSHIFT Word16 q_lp_noise = 0; // st->hFdCngDec->q_lp_noise; // to be populated appropriately. move16(); +#endif Word32 log_lp_noise = L_add( L_shl( lp_noise_e, Q25 ), BASOP_Util_Log2( L_add( lp_noise, DELTA_FX ) ) ); /* Q25 */ // log10(x) is computed as log2(x) * log10(2) // log_lp_noise at this stage is in Q25. where as the structure value is in Q23 @@ -783,7 +785,11 @@ static void stereo_dft_generate_comfort_noise_fx( move32(); st->lp_noise = st->hFdCngDec->lp_noise; /* Q23 */ move32(); +#ifdef FIX_BASOP_2621_STEREO_CNG_NOISY_SPEECH_QSHIFT + st->hFdCngDec->hFdCngCom->flag_noisy_speech = extract_l( LT_32( L_sub( st->hFdCngDec->lp_speech, st->hFdCngDec->lp_noise ), 234881024 /* 28.0f in Q23 */ ) ); /* Q0 */ +#else st->hFdCngDec->hFdCngCom->flag_noisy_speech = extract_l( LT_32( L_shr( L_sub( st->hFdCngDec->lp_speech, st->hFdCngDec->lp_noise ), q_lp_noise ), 28 ) ); /* Q0 */ +#endif move16(); st->hFdCngDec->hFdCngCom->likelihood_noisy_speech = add( mult_r( 32440 /* 0.99 in Q15 */, st->hFdCngDec->hFdCngCom->likelihood_noisy_speech ), mult_r( 328 /* 0.01 in Q15 */, st->hFdCngDec->hFdCngCom->flag_noisy_speech ) ); /* Q15 */ diff --git a/lib_dec/stat_dec.h b/lib_dec/stat_dec.h index 58056843eb6fc00397370916450dd4c7d3b2be26..885af0c03e38e9a50071b09a25547f90152f27d2 100644 --- a/lib_dec/stat_dec.h +++ b/lib_dec/stat_dec.h @@ -137,10 +137,14 @@ typedef struct Word16 flag_dtx_mode; Word32 lp_speech; /* format: Q9.23 */ +#ifndef FIX_BASOP_2621_STEREO_CNG_NOISY_SPEECH_QSHIFT Word16 q_lp_speech; +#endif Word32 lp_noise; /* format: Q9.23 */ +#ifndef FIX_BASOP_2621_STEREO_CNG_NOISY_SPEECH_QSHIFT Word16 q_lp_noise; +#endif Word16 msPeriodogBuf[MSBUFLEN * NPART_SHAPING];