diff --git a/lib_com/options.h b/lib_com/options.h index a3e716f4065556e603301f0b0bddaf707cd5c251..5b8957c816a8a6e504e31c008dae1dde63c7e133 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -165,6 +165,7 @@ #define FIX_846_TILT_BWE /* VA : Proposed fix to 846, to solve saturation */ #define FIX_843_LOW_RATE_BWE /* VA : Proposed fix to 843 to solve mid band noise */ #define FIX851_RANGE_DEC_PRECISION /* VA : 851 Proposed fix to keep precision during UL_div*/ +#define FX_834_OVFL_JBM_CROSSCORR /* FhG: Proposed fix to 834, allow overflows in calculation */ /* ################## End DEVELOPMENT switches ######################### */ diff --git a/lib_dec/jbm_pcmdsp_similarityestimation.c b/lib_dec/jbm_pcmdsp_similarityestimation.c index ad858dc8fae8648c2bd6b5f064af6444a6c994f0..435a5bb4b64a0e476d1af06cceba278a027a6917 100644 --- a/lib_dec/jbm_pcmdsp_similarityestimation.c +++ b/lib_dec/jbm_pcmdsp_similarityestimation.c @@ -233,13 +233,21 @@ Word16 normalized_cross_correlation_self_fx( const Word16 *signal, IF( sqrtXY != 0 ) { +#ifdef FX_834_OVFL_JBM_CROSSCORR + Flag Overflow = 0; + move16(); +#endif normCC = 0; move16(); cc = BASOP_Util_Divide3216_Scale( sumXY, sqrtXY, &normCC ); normCC = add( normCC, 16 ); /* scale to Q15 with saturation */ BASOP_SATURATE_WARNING_OFF +#ifdef FX_834_OVFL_JBM_CROSSCORR + cc = shl_ro( cc, add( normXY, normCC ), &Overflow ); +#else cc = shl_r( cc, add( normXY, normCC ) ); +#endif BASOP_SATURATE_WARNING_ON *energy = L_shr_r( L_deposit_l( sqrtXY ), normXY ); }