diff --git a/lib_dec/fd_cng_dec_fx.c b/lib_dec/fd_cng_dec_fx.c index b6ba82895d99f166b6cb430f201c5c2ad9ccd3d9..51c2c4643dd4c59eaa05fc34809062ee4bb861ab 100644 --- a/lib_dec/fd_cng_dec_fx.c +++ b/lib_dec/fd_cng_dec_fx.c @@ -2800,9 +2800,10 @@ void perform_noise_estimation_dec_ivas_fx( } ELSE { - Copy32( msPeriodog, msNoiseEst, npart ); - scale_sig32( &msNoiseEst[npart], sub( NPART_SHAPING, npart ), sub( hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_exp ) ); - hFdCngDec->msNoiseEst_exp = hFdCngDec->msPeriodog_exp; + Word16 tmp = s_max( sub( hFdCngDec->msNoiseEst_exp, getScaleFactor32( msPeriodog, npart ) ), sub( hFdCngDec->msPeriodog_exp, getScaleFactor32( &msNoiseEst[npart], sub( NPART_SHAPING, npart ) ) ) ); + Copy_Scale_sig32( msPeriodog, msNoiseEst, npart, sub( hFdCngDec->msPeriodog_exp, tmp ) ); + scale_sig32( &msNoiseEst[npart], sub( NPART_SHAPING, npart ), sub( hFdCngDec->msNoiseEst_exp, tmp ) ); + hFdCngDec->msNoiseEst_exp = tmp; move16(); }