Commit ec0c63e3 authored by Mohammadreza Naghibzadeh's avatar Mohammadreza Naghibzadeh
Browse files

Preserve precision by removing one-bit headroom from Q_min and allowing...

Preserve precision by removing one-bit headroom from Q_min and allowing saturation during buffer scaling.
parent cabc90ba
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@
#define FIX_BASOP_2520_PARAMBIN_THRESHOLD_FIX           /* Nokia: BASOP issue 2520: Fix wrong threshold in ParamBin */
#define FIX_BASOP_2510_UNNECESSARY_ASSERT               /* Nokia: BASOP issue 2510: Fix by removing assert */
#define FIX_2515_TDREND_PORT_ERROR_SCALING              /* Nokia: BASOP issue 2515: Fix port error by changing to correct scaling */
//#define FIX_BASOP_2517_CLICK_IN_OMASA_LTV               /* FhG: BASOP #2517: preserve precision by removing one-bit headroom from Q_min and allowing saturation during buffer scaling */

/* ##################### End NON-BE switches ########################### */

+13 −1
Original line number Diff line number Diff line
@@ -356,7 +356,11 @@ void pre_proc_front_ivas_fx(
    /* Take into account resampling memory for Q_min, and 1 bit headroom for resampling overshoot. */
    IF( NE_32( input_Fs, INT_FS_12k8 ) )
    {
#ifdef FIX_BASOP_2517_CLICK_IN_OMASA_LTV
        Q_min = s_min( Q_min, add( st->mem_q, norm_arr( st->mem_decim_fx_q_inp, 2 * L_FILT_MAX ) ) );
#else
        Q_min = sub( s_min( Q_min, add( st->mem_q, norm_arr( st->mem_decim_fx_q_inp, 2 * L_FILT_MAX ) ) ), Q1 );
#endif
    }
#endif
    /* Limit Q_min to avoid rescale larger than 15 against Q-1 */
@@ -479,7 +483,11 @@ void pre_proc_front_ivas_fx(
     *----------------------------------------------------------------*/

#ifdef NONBE_FIX_ISSUE_2206
#ifdef FIX_BASOP_2517_CLICK_IN_OMASA_LTV
    Scale_sig( st->mem_decim_fx_q_inp, 2 * L_FILT_MAX, sub( st->q_inp, st->mem_q ) ); /* st->q_inp */
#else
    scale_sig( st->mem_decim_fx_q_inp, 2 * L_FILT_MAX, sub( st->q_inp, st->mem_q ) ); /* st->q_inp */
#endif
    st->mem_q = st->q_inp;
    move16();
#else
@@ -491,7 +499,11 @@ void pre_proc_front_ivas_fx(
    {
        new_inp_out_size = modify_Fs_fx( signal_in_fx, input_frame, input_Fs, new_inp_12k8_fx, INT_FS_12k8, st->mem_decim_fx_q_inp, ( st->max_bwidth == NB ), &Q_new_inp, &mem_decim_size ); /* st->q_inp */
#ifdef NONBE_FIX_ISSUE_2206
#ifdef FIX_BASOP_2517_CLICK_IN_OMASA_LTV
        Scale_sig( new_inp_12k8_fx, new_inp_out_size, negate( Q_new_inp ) ); /* scaling back to st->q_inp*/
#else
        scale_sig( new_inp_12k8_fx, new_inp_out_size, negate( Q_new_inp ) ); /* scaling back to st->q_inp*/
#endif
#else
        Scale_sig( new_inp_12k8_fx, new_inp_out_size, negate( Q_new_inp ) ); /* scaling back to st->q_inp*/
        st->mem_q = st->q_inp;
@@ -505,7 +517,7 @@ void pre_proc_front_ivas_fx(
#endif
        set16_fx( temp1F_icatdmResampBuf_fx, 0, L_FILT_MAX );
        new_inp_out_size = modify_Fs_fx( temp1F_icatdmResampBuf_fx, NS2SA_FX2( input_Fs, DELAY_FIR_RESAMPL_NS ), input_Fs, new_inp_12k8_fx + L_FRAME, INT_FS_12k8, mem_decim_dummy_fx, 0, &Q_new_inp, &mem_decim_size ); /* st->q_inp */
#ifdef NONBE_FIX_ISSUE_2206
#if defined( NONBE_FIX_ISSUE_2206 ) && not defined( FIX_BASOP_2517_CLICK_IN_OMASA_LTV )
        scale_sig( new_inp_12k8_fx + L_FRAME, new_inp_out_size, negate( Q_new_inp ) ); /* scaling back to st->q_inp*/
#else
        Scale_sig( new_inp_12k8_fx + L_FRAME, new_inp_out_size, negate( Q_new_inp ) ); /* scaling back to st->q_inp*/
+7 −3
Original line number Diff line number Diff line
@@ -917,11 +917,11 @@ void ivas_compute_core_buffers_fx(
        }
        ELSE IF( EQ_32( input_Fs, 32000 ) || EQ_32( input_Fs, 48000 ) )
        {
#ifdef NONBE_FIX_ISSUE_2206
#if defined( NONBE_FIX_ISSUE_2206 ) && not defined( FIX_BASOP_2517_CLICK_IN_OMASA_LTV )
            scale_sig( st->mem_decim16k_fx, 2 * L_FILT_MAX, sub( Q_old_inp_16k, st->q_mem_decim16k_fx ) ); /* Q_old_inp_16k */
#endif
            size_modified = modify_Fs_fx( signal_in_fx, input_frame, input_Fs, new_inp_16k_fx, sr_core, st->mem_decim16k_fx, 0, &Q_tmp, &mem_decim16k_size ); /* Q0 */
#ifdef NONBE_FIX_ISSUE_2206
#if defined( NONBE_FIX_ISSUE_2206 ) && not defined( FIX_BASOP_2517_CLICK_IN_OMASA_LTV )
            scale_sig( new_inp_16k_fx, size_modified, negate( Q_tmp ) ); /* scaling back to Q_old_inp_16k */
#else
            Scale_sig( new_inp_16k_fx, size_modified, negate( Q_tmp ) ); /* scaling back to Q_old_inp_16k */
@@ -931,7 +931,11 @@ void ivas_compute_core_buffers_fx(
            set16_fx( temp1F_icatdmResampBuf_fx, 0, L_FILT_MAX );
            size_modified = modify_Fs_fx( temp1F_icatdmResampBuf_fx, NS2SA_FX2( input_Fs, DELAY_FIR_RESAMPL_NS ), input_Fs, new_inp_16k_fx + NS2SA_FX2( sr_core, FRAME_SIZE_NS ), sr_core, mem_decim16k_dummy_fx, 0, &Q_tmp, &mem_decim16k_size ); /* Q0 */
#ifdef NONBE_FIX_ISSUE_2206
#ifdef FIX_BASOP_2517_CLICK_IN_OMASA_LTV
            Scale_sig( new_inp_16k_fx + NS2SA_FX2( sr_core, FRAME_SIZE_NS ), size_modified, negate( Q_tmp ) ); /* scaling back to Q_old_inp_16k */
#else
            scale_sig( new_inp_16k_fx + NS2SA_FX2( sr_core, FRAME_SIZE_NS ), size_modified, negate( Q_tmp ) ); /* scaling back to Q_old_inp_16k */
#endif

            // Scale_sig( st->mem_decim16k_fx, 2 * L_FILT_MAX, sub( -1, Q_old_inp_16k ) ); /* Q(-1) */
            Q_tmp = norm_arr( st->mem_decim16k_fx, mem_decim16k_size );
@@ -968,7 +972,7 @@ void ivas_compute_core_buffers_fx(
        }
        ELSE IF( EQ_32( input_Fs, 32000 ) || EQ_32( input_Fs, 48000 ) )
        {
#ifdef NONBE_FIX_ISSUE_2206
#if defined( NONBE_FIX_ISSUE_2206 ) && not defined( FIX_BASOP_2517_CLICK_IN_OMASA_LTV )
            scale_sig( st->mem_decim16k_fx, 2 * L_FILT_MAX, sub( Q_old_inp_16k, st->q_mem_decim16k_fx ) ); /* Q_old_inp_16k */
#endif
            /* reconstruct past segment of input signal when switching from MDCT stereo */