Loading lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,8 @@ #define NON_BE_FIX_EVS_USAN_ERR_IN_WAVEADJUST /* FhG: address issue 1037 */ #define NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG /* VoiceAge: issue 1063: divsion by zero for angle_rot feature in the UNCLR classifier */ /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ Loading lib_enc/ivas_stereo_dft_enc_itd.c +19 −1 Original line number Diff line number Diff line Loading @@ -640,8 +640,11 @@ void stereo_dft_enc_compute_itd( STEREO_CLASSIF_HANDLE hStereoClassif; const float *dft_trigo32k; float trigo_enc[STEREO_DFT_N_32k_ENC / 2 + 1]; float cng_xcorr_filt; #ifdef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG float sum_nrg_delta; #endif int16_t prev_itd_max; int16_t itd_max_flip; Loading Loading @@ -727,7 +730,10 @@ void stereo_dft_enc_compute_itd( grand_dot_prod_real += xcorr[2 * i]; grand_dot_prod_img += xcorr[2 * i + 1]; xcorr_abs[i] = sqrtf( xcorr[2 * i] * xcorr[2 * i] + xcorr[2 * i + 1] * xcorr[2 * i + 1] ); #ifndef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG /* VM: prod_LL tends to overflow, better to replace with sum(log(prod_L)) and retrain the classifier */ #endif prod_LL = prod_L; prod_RR = prod_R; Loading Loading @@ -784,7 +790,19 @@ void stereo_dft_enc_compute_itd( hStereoClassif->unclr_fv[E_gainIPD] = g_IPD; hStereoClassif->xtalk_fv[E_gainIPD] = g_IPD; #ifdef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG if ( sum_nrg_L >= sum_nrg_R ) { sum_nrg_delta = max( sum_nrg_L - sum_nrg_R, 1.0f ); } else { sum_nrg_delta = min( sum_nrg_L - sum_nrg_R, -1.0f ); } angle_rot = fabsf( atanf( 2.0f * ( grand_dot_prod_real ) / sum_nrg_delta ) ); #else angle_rot = fabsf( atanf( 2.0f * ( grand_dot_prod_real ) / ( sum_nrg_L - sum_nrg_R + 1.0f ) ) ); #endif hStereoClassif->unclr_fv[E_angle_rot] = angle_rot; hStereoClassif->xtalk_fv[E_angle_rot] = angle_rot; Loading Loading
lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -170,6 +170,8 @@ #define NON_BE_FIX_EVS_USAN_ERR_IN_WAVEADJUST /* FhG: address issue 1037 */ #define NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG /* VoiceAge: issue 1063: divsion by zero for angle_rot feature in the UNCLR classifier */ /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ Loading
lib_enc/ivas_stereo_dft_enc_itd.c +19 −1 Original line number Diff line number Diff line Loading @@ -640,8 +640,11 @@ void stereo_dft_enc_compute_itd( STEREO_CLASSIF_HANDLE hStereoClassif; const float *dft_trigo32k; float trigo_enc[STEREO_DFT_N_32k_ENC / 2 + 1]; float cng_xcorr_filt; #ifdef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG float sum_nrg_delta; #endif int16_t prev_itd_max; int16_t itd_max_flip; Loading Loading @@ -727,7 +730,10 @@ void stereo_dft_enc_compute_itd( grand_dot_prod_real += xcorr[2 * i]; grand_dot_prod_img += xcorr[2 * i + 1]; xcorr_abs[i] = sqrtf( xcorr[2 * i] * xcorr[2 * i] + xcorr[2 * i + 1] * xcorr[2 * i + 1] ); #ifndef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG /* VM: prod_LL tends to overflow, better to replace with sum(log(prod_L)) and retrain the classifier */ #endif prod_LL = prod_L; prod_RR = prod_R; Loading Loading @@ -784,7 +790,19 @@ void stereo_dft_enc_compute_itd( hStereoClassif->unclr_fv[E_gainIPD] = g_IPD; hStereoClassif->xtalk_fv[E_gainIPD] = g_IPD; #ifdef NONBE_FIX_1063_DIV_BY_ZERO_SUMNRG if ( sum_nrg_L >= sum_nrg_R ) { sum_nrg_delta = max( sum_nrg_L - sum_nrg_R, 1.0f ); } else { sum_nrg_delta = min( sum_nrg_L - sum_nrg_R, -1.0f ); } angle_rot = fabsf( atanf( 2.0f * ( grand_dot_prod_real ) / sum_nrg_delta ) ); #else angle_rot = fabsf( atanf( 2.0f * ( grand_dot_prod_real ) / ( sum_nrg_L - sum_nrg_R + 1.0f ) ) ); #endif hStereoClassif->unclr_fv[E_angle_rot] = angle_rot; hStereoClassif->xtalk_fv[E_angle_rot] = angle_rot; Loading