Commit aa507545 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh
Browse files

Merge branch '881-presence-of-a-tone-during-silence-part' into 'main'

Resolve "Presence of a tone during silence part" [allow regression]

Closes #881

See merge request !789
parents 08fbe2db 37fd2578
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ variables:
  INSTR_DIR: "scripts/c-code_instrument"
  BUILD_WITH_DEBUG_MODE_INFO: ""
  ENCODER_TEST: ""
  SKIP_REGRESSION_CHECK: ""
  MANUAL_PIPELINE_TYPE:
    description: "Type for the manual pipeline run. Use 'pytest-compare' to run comparison test against reference float codec."
    value: 'default'
+1 −0
Original line number Diff line number Diff line
@@ -150,4 +150,5 @@
#define FIX_ISSUE_1237                          /* VA: replacement of Copy_Scale_sig_16_32_DEPREC() that are doing 16 bits left shift by Copy_Scale_sig_16_32_no_sat() */
#define FIX_ISSUE_1237_KEEP_EVS_BE              /* VA: Fix to keep EVS bitexactness to 26.444 */
#define FIX_ISSUE_1214                          /* Ittiam: Fix for issue 1214: Energy leakage in IGF tiles for MDCT-stereo @64kbps SWB*/
#define FIX_881_HILBERT_FILTER                  /* VA: improve the precision of the Hilbert filter to remove 2kHz unwanted tone */
#endif
+46 −0
Original line number Diff line number Diff line
@@ -69,7 +69,44 @@ void GenSHBSynth_fx_32(
    Word32 speech_buf_32k[L_FRAME32k];
    Word16 i;

#ifdef FIX_881_HILBERT_FILTER
    Word16 shift = 0;
    Word32 maxm32, input_synspeech_temp[L_FRAME16k];

    /* find the maximum value and derive the shift to improve precision of the Hilbert filter */
    maxm32 = L_deposit_l( 0 );
    FOR( i = 0; i < L_FRAME16k; i++ )
    {
        maxm32 = L_max( maxm32, L_abs( input_synspeech[i] ) );
    }

    FOR( i = 0; i < 2 * ALLPASSSECTIONS_STEEP; i++ )
    {
        maxm32 = L_max( maxm32, L_abs( state_lsyn_filt_shb_local[i] ) );
    }

    FOR( i = 0; i < HILBERT_MEM_SIZE; i++ )
    {
        maxm32 = L_max( maxm32, L_abs( Hilbert_Mem[i] ) );
    }

    IF( maxm32 != 0 )
    {
        shift = sub( norm_l( maxm32 ), 3 );

        Copy_Scale_sig32( input_synspeech, input_synspeech_temp, L_FRAME16k, shift );
        Scale_sig32( state_lsyn_filt_shb_local, 2 * ALLPASSSECTIONS_STEEP, shift );
        Scale_sig32( Hilbert_Mem, HILBERT_MEM_SIZE, shift );
    }
    else
    {
        Copy32( input_synspeech, input_synspeech_temp, L_FRAME16k );
    }

    Interpolate_allpass_steep_32( input_synspeech_temp, state_lsyn_filt_shb_local, L_FRAME16k, speech_buf_32k );
#else
    Interpolate_allpass_steep_32( input_synspeech, state_lsyn_filt_shb_local, L_FRAME16k, speech_buf_32k );
#endif

    IF( EQ_16( L_frame, L_FRAME ) )
    {
@@ -92,6 +129,15 @@ void GenSHBSynth_fx_32(
        }
    }

#ifdef FIX_881_HILBERT_FILTER
    IF( maxm32 != 0 )
    {
        Scale_sig32( shb_syn_speech_32k, L_FRAME32k, -shift );
        Scale_sig32( state_lsyn_filt_shb_local, 2 * ALLPASSSECTIONS_STEEP, -shift );
        Scale_sig32( Hilbert_Mem, HILBERT_MEM_SIZE, -shift );
    }
#endif

    return;
}
void ScaleShapedSHB_32(