Loading lib_rend/ivas_reverb_fx.c +28 −10 Original line number Diff line number Diff line Loading @@ -1263,8 +1263,9 @@ static void set_reverb_acoustic_data_fx( { Word16 bin_idx; Word32 ln_1e6_inverted_fx, delay_diff_fx, L_tmp; Word16 exp_argument_fx, tmp, tmp_flag, exp_argument_e; Word16 pow_exp; Word32 exp_argument_fx, tmp; Word16 tmp_flag, exp_argument_e; Word16 pow_exp, tmp_exp; Word32 *pFc_input_fx = pRoomAcoustics->pFc_input_fx; Word32 *pAcoustic_rt60_fx = pRoomAcoustics->pAcoustic_rt60_fx; Loading @@ -1278,21 +1279,38 @@ static void set_reverb_acoustic_data_fx( /* interpolate input table data for T60 and DSR to the FFT filter grid */ ivas_reverb_interp_on_freq_grid_fx( nr_fc_input, pFc_input_fx, pAcoustic_rt60_fx, nr_fc_fft_filter, pFc_fx, pRt60_fx ); ivas_reverb_interp_on_freq_grid_fx( nr_fc_input, pFc_input_fx, pAcoustic_dsr_fx, nr_fc_fft_filter, pFc_fx, pDsr_fx ); ivas_reverb_interp_on_freq_grid_fx( nr_fc_input, pFc_input_fx, pAcoustic_rt60_fx, nr_fc_fft_filter, pFc_fx, pRt60_fx ); // Q26 ivas_reverb_interp_on_freq_grid_fx( nr_fc_input, pFc_input_fx, pAcoustic_dsr_fx, nr_fc_fft_filter, pFc_fx, pDsr_fx ); // Q30 /* adjust DSR for the delay difference */ ///* ---------Start Debugging Block --------------------*/ // FILE *filewriter = fopen( "output.csv", "w" ); // if (filewriter == NULL) //{ // perror("Failed to open file"); // } // fprintf( filewriter, "T60, DSR\n" ); // for ( int i = 0; i < nr_fc_fft_filter; ++i ) //{ // fprintf(filewriter, "%f,%f\n",(float)pRt60_fx[i]/(1 << 26), (float)pDsr_fx[i] / (1<<30)); // } // fclose( filewriter ); ///* ---------End Debugging Block --------------------*/ delay_diff_fx = L_sub( pRoomAcoustics->inputPreDelay_fx, pRoomAcoustics->acousticPreDelay_fx ); ///* adjust DSR for the delay difference */ delay_diff_fx = L_sub( pRoomAcoustics->inputPreDelay_fx, pRoomAcoustics->acousticPreDelay_fx ); // Q27 ln_1e6_inverted_fx = 155440049; // Q31 /* 1.0f / logf( 1e06f ) */ move32(); FOR( bin_idx = 0; bin_idx < nr_fc_fft_filter; bin_idx++ ) { L_tmp = Mpy_32_32( pRt60_fx[bin_idx], ln_1e6_inverted_fx ); // exp = pRt60_e[bin_idx] + 0 exp_argument_fx = BASOP_Util_Divide3232_Scale( delay_diff_fx, L_tmp, &exp_argument_e ); exp_argument_e = add( exp_argument_e, sub( 4, pRt60_e[bin_idx] ) ); // Q27 -> e4 L_tmp = Mpy_32_32( pRt60_fx[bin_idx], ln_1e6_inverted_fx ); // L_tmp in Q26 //exp_argument_fx = BASOP_Util_Divide3232_Scale( delay_diff_fx, L_tmp, &exp_argument_e );// exp_argument_fx = BASOP_Util_Divide3232_Scale_newton( delay_diff_fx, L_tmp, &exp_argument_e ); exp_argument_fx = L_shr_sat( exp_argument_fx, sub( 6, exp_argument_e ) );//exp_argument_fx in Q26 - verified /* Limit exponent to approx +/-100 dB in case of incoherent value of delay_diff, to prevent overflow */ // 23 in Q26 Loading lib_rend/ivas_reverb_utils_fx.c +2 −4 Original line number Diff line number Diff line Loading @@ -84,10 +84,8 @@ ivas_error ivas_reverb_prepare_cldfb_params( output_fc_fx[idx] = L_add( L_shr( cldfb_band_width, 1 ), L_shl( Mult_32_16( cldfb_band_width, idx ), 15 ) ); } //T60 - Q26 ivas_reverb_interp_on_freq_grid_fx( pInput_params->nBands, pInput_params->pFc_input_fx, pInput_params->pAcoustic_rt60_fx, CLDFB_NO_CHANNELS_MAX, output_fc_fx, output_t60_fx ); //DSR - Q30 ivas_reverb_interp_on_freq_grid_fx( pInput_params->nBands, pInput_params->pFc_input_fx, pInput_params->pAcoustic_dsr_fx, CLDFB_NO_CHANNELS_MAX, output_fc_fx, output_ene_fx ); ivas_reverb_interp_on_freq_grid_fx( pInput_params->nBands, pInput_params->pFc_input_fx, pInput_params->pAcoustic_rt60_fx, CLDFB_NO_CHANNELS_MAX, output_fc_fx, output_t60_fx );//Q26 ivas_reverb_interp_on_freq_grid_fx( pInput_params->nBands, pInput_params->pFc_input_fx, pInput_params->pAcoustic_dsr_fx, CLDFB_NO_CHANNELS_MAX, output_fc_fx, output_ene_fx );//Q30 /* adjust DSR for the delay difference */ delay_diff_fx = L_sub( pInput_params->inputPreDelay_fx, pInput_params->acousticPreDelay_fx ); //Q27 Loading Loading
lib_rend/ivas_reverb_fx.c +28 −10 Original line number Diff line number Diff line Loading @@ -1263,8 +1263,9 @@ static void set_reverb_acoustic_data_fx( { Word16 bin_idx; Word32 ln_1e6_inverted_fx, delay_diff_fx, L_tmp; Word16 exp_argument_fx, tmp, tmp_flag, exp_argument_e; Word16 pow_exp; Word32 exp_argument_fx, tmp; Word16 tmp_flag, exp_argument_e; Word16 pow_exp, tmp_exp; Word32 *pFc_input_fx = pRoomAcoustics->pFc_input_fx; Word32 *pAcoustic_rt60_fx = pRoomAcoustics->pAcoustic_rt60_fx; Loading @@ -1278,21 +1279,38 @@ static void set_reverb_acoustic_data_fx( /* interpolate input table data for T60 and DSR to the FFT filter grid */ ivas_reverb_interp_on_freq_grid_fx( nr_fc_input, pFc_input_fx, pAcoustic_rt60_fx, nr_fc_fft_filter, pFc_fx, pRt60_fx ); ivas_reverb_interp_on_freq_grid_fx( nr_fc_input, pFc_input_fx, pAcoustic_dsr_fx, nr_fc_fft_filter, pFc_fx, pDsr_fx ); ivas_reverb_interp_on_freq_grid_fx( nr_fc_input, pFc_input_fx, pAcoustic_rt60_fx, nr_fc_fft_filter, pFc_fx, pRt60_fx ); // Q26 ivas_reverb_interp_on_freq_grid_fx( nr_fc_input, pFc_input_fx, pAcoustic_dsr_fx, nr_fc_fft_filter, pFc_fx, pDsr_fx ); // Q30 /* adjust DSR for the delay difference */ ///* ---------Start Debugging Block --------------------*/ // FILE *filewriter = fopen( "output.csv", "w" ); // if (filewriter == NULL) //{ // perror("Failed to open file"); // } // fprintf( filewriter, "T60, DSR\n" ); // for ( int i = 0; i < nr_fc_fft_filter; ++i ) //{ // fprintf(filewriter, "%f,%f\n",(float)pRt60_fx[i]/(1 << 26), (float)pDsr_fx[i] / (1<<30)); // } // fclose( filewriter ); ///* ---------End Debugging Block --------------------*/ delay_diff_fx = L_sub( pRoomAcoustics->inputPreDelay_fx, pRoomAcoustics->acousticPreDelay_fx ); ///* adjust DSR for the delay difference */ delay_diff_fx = L_sub( pRoomAcoustics->inputPreDelay_fx, pRoomAcoustics->acousticPreDelay_fx ); // Q27 ln_1e6_inverted_fx = 155440049; // Q31 /* 1.0f / logf( 1e06f ) */ move32(); FOR( bin_idx = 0; bin_idx < nr_fc_fft_filter; bin_idx++ ) { L_tmp = Mpy_32_32( pRt60_fx[bin_idx], ln_1e6_inverted_fx ); // exp = pRt60_e[bin_idx] + 0 exp_argument_fx = BASOP_Util_Divide3232_Scale( delay_diff_fx, L_tmp, &exp_argument_e ); exp_argument_e = add( exp_argument_e, sub( 4, pRt60_e[bin_idx] ) ); // Q27 -> e4 L_tmp = Mpy_32_32( pRt60_fx[bin_idx], ln_1e6_inverted_fx ); // L_tmp in Q26 //exp_argument_fx = BASOP_Util_Divide3232_Scale( delay_diff_fx, L_tmp, &exp_argument_e );// exp_argument_fx = BASOP_Util_Divide3232_Scale_newton( delay_diff_fx, L_tmp, &exp_argument_e ); exp_argument_fx = L_shr_sat( exp_argument_fx, sub( 6, exp_argument_e ) );//exp_argument_fx in Q26 - verified /* Limit exponent to approx +/-100 dB in case of incoherent value of delay_diff, to prevent overflow */ // 23 in Q26 Loading
lib_rend/ivas_reverb_utils_fx.c +2 −4 Original line number Diff line number Diff line Loading @@ -84,10 +84,8 @@ ivas_error ivas_reverb_prepare_cldfb_params( output_fc_fx[idx] = L_add( L_shr( cldfb_band_width, 1 ), L_shl( Mult_32_16( cldfb_band_width, idx ), 15 ) ); } //T60 - Q26 ivas_reverb_interp_on_freq_grid_fx( pInput_params->nBands, pInput_params->pFc_input_fx, pInput_params->pAcoustic_rt60_fx, CLDFB_NO_CHANNELS_MAX, output_fc_fx, output_t60_fx ); //DSR - Q30 ivas_reverb_interp_on_freq_grid_fx( pInput_params->nBands, pInput_params->pFc_input_fx, pInput_params->pAcoustic_dsr_fx, CLDFB_NO_CHANNELS_MAX, output_fc_fx, output_ene_fx ); ivas_reverb_interp_on_freq_grid_fx( pInput_params->nBands, pInput_params->pFc_input_fx, pInput_params->pAcoustic_rt60_fx, CLDFB_NO_CHANNELS_MAX, output_fc_fx, output_t60_fx );//Q26 ivas_reverb_interp_on_freq_grid_fx( pInput_params->nBands, pInput_params->pFc_input_fx, pInput_params->pAcoustic_dsr_fx, CLDFB_NO_CHANNELS_MAX, output_fc_fx, output_ene_fx );//Q30 /* adjust DSR for the delay difference */ delay_diff_fx = L_sub( pInput_params->inputPreDelay_fx, pInput_params->acousticPreDelay_fx ); //Q27 Loading