diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c index 6a6fbe47c48fa623a508c3545f850fb16e219f3e..138d86eaff789e0cbcf0e154dfb60d45b3637806 100644 --- a/lib_com/ivas_dirac_com.c +++ b/lib_com/ivas_dirac_com.c @@ -1480,14 +1480,16 @@ void calculate_hodirac_sector_parameters_fx( tmp16 = BASOP_util_atan2( *p_sec_I_vec_smth_y_fx, *p_sec_I_vec_smth_x_fx, sub( *p_sec_I_vec_smth_y_exp, *p_sec_I_vec_smth_x_exp ) ); // Q13 *p_azi_fx = Mpy_32_32( L_deposit_h( tmp16 ), _180_OVER_PI_Q25 ); // (Q13 + 16) + Q25 - 31 = 54 - 31 = Q23 - tmp16 = BASOP_util_atan2( *p_sec_I_vec_smth_z_fx, tmp_xy_hypo, sub( *p_sec_I_vec_smth_z_exp, tmp_e ) ); // Q13 - *p_ele_fx = Mpy_32_32( L_deposit_h( tmp16 ), _180_OVER_PI_Q25 ); // (Q13 + 16) + Q25 - 31 = 54 - 31 = Q23 + move32(); + tmp16 = BASOP_util_atan2( *p_sec_I_vec_smth_z_fx, L_add( tmp_xy_hypo, EPSILON_FX_SMALL ), sub( *p_sec_I_vec_smth_z_exp, tmp_e ) ); // Q13 + *p_ele_fx = Mpy_32_32( L_deposit_h( tmp16 ), _180_OVER_PI_Q25 ); // (Q13 + 16) + Q25 - 31 = 54 - 31 = Q23 + move32(); *p_ene_fx = *p_energy_smth_fx; move32(); *p_ene_exp = *p_energy_smth_exp; move16(); - tmp32 = L_deposit_h( BASOP_Util_Divide3232_Scale( normI_fx, *p_energy_smth_fx, &tmp_e ) ); + tmp32 = L_deposit_h( BASOP_Util_Divide3232_Scale( normI_fx, L_add( *p_energy_smth_fx, EPSILON_FX_SMALL ), &tmp_e ) ); tmp_e = add( tmp_e, sub( normI_exp, *p_energy_smth_exp ) ); tmp32 = BASOP_Util_Add_Mant32Exp( ONE_IN_Q30, 1, L_negate( tmp32 ), tmp_e, &tmp_e ); *p_diff_fx = tmp32; @@ -1500,16 +1502,17 @@ void calculate_hodirac_sector_parameters_fx( move32(); tmp_diff_exp = *p_diff_exp; move16(); + if ( tmp_diff_fx < 0 ) + { + tmp_diff_fx = 0; + move32(); + } + tmp_diff_fx = L_shr( tmp_diff_fx, sub( 2, tmp_diff_exp ) ); // Q29 tmp_diff_exp = 2; move16(); - IF( tmp_diff_fx < 0 ) - { - *p_diff_fx = 0; - move32(); - } - IF( GT_32( tmp_diff_fx, ( ONE_IN_Q29 / 2 ) ) ) + IF( GT_32( tmp_diff_fx, ONE_IN_Q28 ) ) { IF( hDirAC->firstrun_sector_params ) {