Commit a992f675 authored by Devansh Kandpal's avatar Devansh Kandpal
Browse files

optimisation in set_reverb_acoustic_data()

parent fa0610ae
Loading
Loading
Loading
Loading
+28 −10
Original line number Diff line number Diff line
@@ -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;
@@ -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
+2 −4
Original line number Diff line number Diff line
@@ -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