Commit ff856655 authored by Fabian Bauer's avatar Fabian Bauer
Browse files

introduced FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE2 and...

introduced FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE2 and FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE3, also FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
parent 9938e11d
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -59,6 +59,10 @@
#define TCX_IMDCT_SCALE    15
#define TCX_IMDCT_HEADROOM 1
#define FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE1
#define FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE2
#define FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE3
//#define FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
/*----------------------------------------------------------------------------------*
 * Prototypes of global macros
@@ -3258,6 +3262,17 @@ void interp_code_4over2_fx(
void wb_tbe_extras_reset_synth_fx( Word16 state_lsyn_filt_shb[], Word16 state_lsyn_filt_dwn_shb[], Word16 state_32and48k_WB_upsample[], Word16 state_resamp_HB[] );
#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
void elliptic_bpf_48k_generic_fx(
    const Word16* input_fx, /* i  : i   signal                              Q_input_fx  */
    Word16 *Q_input_fx,
    Word16 output_fx[],    /* o  : output signal                               */
    Word32 memory_fx[][4], /* i/o: 4 arrays of 4 for memory                   memory_fx_Q */
    Word16 memory_fx_Q[],
    const Word16 full_band_bpf[][5], /* i  : filter coefficients b0,b1,b2,a0,a1,a2  Q13  */
    const Word32 *output32_fx,
    const Word16 *scale_output32_fx);
#else
void elliptic_bpf_48k_generic_fx(
    const Word16 input_fx[], /* i  : i   signal                              Q_input_fx  */
    Word16 *Q_input_fx,
@@ -3266,6 +3281,7 @@ void elliptic_bpf_48k_generic_fx(
    Word16 memory_fx_Q[],
    const Word16 full_band_bpf[][5] /* i  : filter coefficients b0,b1,b2,a0,a1,a2  Q13  */
);
#endif
void synthesise_fb_high_band_fx(
    const Word16 excitation_in[], /* i  : full band excitation                                */
+62 −8
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
#define THR_ENV_ERROR_PLOSIVE        200.0f    /* threshold for envelope error used in plosive detection */
#define THR_ENV_ERROR_PLOSIVE_FX     200       /* threshold for envelope error used in plosive detection Q0 */



/*-----------------------------------------------------------------*
 * Local function prototypes
 *-----------------------------------------------------------------*/
@@ -6692,9 +6694,8 @@ void wb_tbe_extras_reset_synth_fx(
 * 18th-order elliptic bandpass filter at 14.0 to 20 kHz sampled at 48 kHz
 * Implemented as 3 fourth order sections cascaded.
 *-------------------------------------------------------------------*/

#define FIX_1439_SPEEDUP_elliptic_bpf_48k_generic

#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
#else
void elliptic_bpf_48k_generic_fx(
    const Word16 input_fx[], /* i  : input signal                             Q_input_fx*/
    Word16 *Q_input_fx,
@@ -6703,6 +6704,7 @@ void elliptic_bpf_48k_generic_fx(
    Word16 memory_fx_Q[],
    const Word16 full_band_bpf_fx[][5] /* i  : filter coefficients b0,b1,b2,a0,a1,a2  Q13  */
)
#endif
{
    Word16 i, j;
    Word16 memory_fx0[4][4], memory_fx[4][4], Q_temp, Q_temp2;
@@ -6766,14 +6768,14 @@ void elliptic_bpf_48k_generic_fx(
    L_tmpX = L_sub_sat( L_tmpX, L_shl_sat( Mult_32_16( L_tmp[0], full_band_bpf_fx[3][3] ), 2 ) );           /*Q_input_fx + 11 + 13  -15 +2*/
    L_tmp[3] = L_sub_sat( L_tmpX, L_shl_sat( Mult_32_16( memory2_fx[1][3], full_band_bpf_fx[3][4] ), 2 ) ); /*Q_input_fx + 11 + 13  -15 +2*/
    move32();
#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic // STAGE1
#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE1
    FOR( i = 4; i < L_FRAME48k; i++ )
    {
        Word64 W_tmpX;
        Word64 W_tmpY = W_add( 0, 0 );
        W_tmpX = W_deposit32_l( L_mult( input_fx[i - 4], full_band_bpf_fx[0][4] ) );
        Word64 W_tmpY;
        W_tmpX = W_mac_16_16( 0, input_fx[i - 4], full_band_bpf_fx[0][4] );
        W_tmpX = W_mac_16_16( W_tmpX, input_fx[i - 3], full_band_bpf_fx[0][3] );
        W_tmpY = W_msu_32_16( W_tmpY, L_tmp[i - 1], full_band_bpf_fx[3][1] );
        W_tmpY = W_msu_32_16( 0, L_tmp[i - 1], full_band_bpf_fx[3][1] );
        W_tmpX = W_mac_16_16( W_tmpX, input_fx[i - 2], full_band_bpf_fx[0][2] );
        W_tmpY = W_msu_32_16( W_tmpY, L_tmp[i - 2], full_band_bpf_fx[3][2] );
        W_tmpX = W_mac_16_16( W_tmpX, input_fx[i - 1], full_band_bpf_fx[0][1] );
@@ -6853,6 +6855,26 @@ void elliptic_bpf_48k_generic_fx(
    L_tmp2[3] = L_sub_sat( L_tmpX, L_shl_sat( Mult_32_16( memory2_fx[2][3], full_band_bpf_fx[4][4] ), 2 ) ); /*Q_input_fx + 6 +13 -15 +2 */ /*14 + Q_input_fx - shift_flag*/
    move32();
    L_tmpMax = L_max( L_tmpMax, L_abs( L_tmp2[3] ) );

#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE2
    FOR( i = 4; i < L_FRAME48k; i++ )
    {
        Word64 W_tmpX;
        Word64 W_tmpY;
        W_tmpX = W_mac_32_16( 0, L_tmp[i - 4], full_band_bpf_fx[1][4] );
        W_tmpX = W_mac_32_16( W_tmpX, L_tmp[i - 3], full_band_bpf_fx[1][3] );
        W_tmpY = W_msu_32_16( 0, L_tmp2[i - 1], full_band_bpf_fx[4][1] );
        W_tmpX = W_mac_32_16( W_tmpX, L_tmp[i - 2], full_band_bpf_fx[1][2] );
        W_tmpY = W_msu_32_16( W_tmpY, L_tmp2[i - 2], full_band_bpf_fx[4][2] );
        W_tmpX = W_mac_32_16( W_tmpX, L_tmp[i - 1], full_band_bpf_fx[1][1] );
        W_tmpY = W_msu_32_16( W_tmpY, L_tmp2[i - 3], full_band_bpf_fx[4][3] );
        W_tmpX = W_mac_32_16( W_tmpX, L_tmp[i], full_band_bpf_fx[1][0] );
        W_tmpY = W_msu_32_16( W_tmpY, L_tmp2[i - 4], full_band_bpf_fx[4][4] );
        L_tmp2[i] = W_sat_l( W_add( W_shr( W_tmpX, 3 + 16 ), W_shl( W_tmpY, 2 - 16 ) ) );
        move32();
        L_tmpMax = L_max( L_tmpMax, L_abs( L_tmp2[i] ) );
    }
#else
    FOR( i = 4; i < L_FRAME48k; i++ )
    {
        L_tmpX = L_shr( Mult_32_16( L_tmp[i - 4], full_band_bpf_fx[1][4] ), 3 );                              /*Q_input_fx + 11 + 13 - 15 -3*/
@@ -6867,7 +6889,7 @@ void elliptic_bpf_48k_generic_fx(
        move32();
        L_tmpMax = L_max( L_tmpMax, L_abs( L_tmp2[i] ) );
    }

#endif
    Q_temp = norm_l( L_tmpMax );
    Q_temp = sub( Q_temp, 4 );
    Scale_sig32( L_tmp2, 960, Q_temp );
@@ -6936,7 +6958,29 @@ void elliptic_bpf_48k_generic_fx(
    L_output[3] = L_sub_sat( L_tmpX, L_shl_sat( Mult_32_16( memory2_fx_3[3], full_band_bpf_fx[5][4] ), 2 ) ); /*Q_input_fx + 1 +Q_temp+13 -15 + 2*/
    move32();
    L_tmpMax = L_max( L_tmpMax, L_abs( L_output[3] ) );
#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_STAGE3
    FOR( i = 4; i < L_FRAME48k; i++ )
    {
        Word64 W_tmpX;
        Word64 W_tmpY;

        W_tmpX = W_mac_32_16( 0, L_tmp2[i - 4], full_band_bpf_fx[2][4] );
        W_tmpX = W_mac_32_16( W_tmpX, L_tmp2[i - 3], full_band_bpf_fx[2][3] );
        W_tmpY = W_msu_32_16( 0, L_output[i - 1], full_band_bpf_fx[5][1] );

        W_tmpX = W_mac_32_16( W_tmpX, L_tmp2[i - 2], full_band_bpf_fx[2][2] );
        W_tmpY = W_msu_32_16( W_tmpY, L_output[i - 2], full_band_bpf_fx[5][2] );

        W_tmpX = W_mac_32_16( W_tmpX, L_tmp2[i - 1], full_band_bpf_fx[2][1] );
        W_tmpY = W_msu_32_16( W_tmpY, L_output[i - 3], full_band_bpf_fx[5][3] );

        W_tmpX = W_mac_32_16( W_tmpX, L_tmp2[i], full_band_bpf_fx[2][0] );
        W_tmpY = W_msu_32_16( W_tmpY, L_output[i - 4], full_band_bpf_fx[5][4] );
        L_output[i] = W_sat_l( W_add( W_shr( W_tmpX, 3 + 16 ), W_shl( W_tmpY, 2 - 16 ) ) );
        move32();
        L_tmpMax = L_max( L_tmpMax, L_abs( L_output[i] ) );
    }
#else
    FOR( i = 4; i < L_FRAME48k; i++ )
    {
        L_tmpX = L_shr( Mult_32_16( L_tmp2[i - 4], full_band_bpf_fx[2][4] ), 3 );                            /*Q_input_fx + 6 +Q_temp+13 -15 -3 */
@@ -6954,6 +6998,7 @@ void elliptic_bpf_48k_generic_fx(
        move32();
        L_tmpMax = L_max( L_tmpMax, L_abs( L_output[i] ) );
    }
#endif
    memory_fx2[2][0] = L_tmp2[L_FRAME48k - 4];
    memory_fx2[2][1] = L_tmp2[L_FRAME48k - 3];
    memory_fx2[2][2] = L_tmp2[L_FRAME48k - 2];
@@ -7047,12 +7092,21 @@ void synthesise_fb_high_band_fx(
    IF( EQ_16( L_frame, L_FRAME16k ) )
    {
        /* for 16kHz ACELP core */
#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
        elliptic_bpf_48k_generic_fx( excitation_in_interp3, &exp_tmp, NULL, bpf_memory, bpf_memory_Q, full_band_bpf_3_fx, tmp32, scale_tmp32 );
#else
        elliptic_bpf_48k_generic_fx( excitation_in_interp3, &exp_tmp, tmp, bpf_memory, bpf_memory_Q, full_band_bpf_3_fx );
#endif
    }
    ELSE
    {
        /* for 12.8kHz ACELP core */
#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
        elliptic_bpf_48k_generic_fx( excitation_in_interp3, &exp_tmp, NULL, bpf_memory, bpf_memory_Q, full_band_bpf_1_fx, tmp32, scale_tmp32 );
#else
        elliptic_bpf_48k_generic_fx( excitation_in_interp3, &exp_tmp, tmp, bpf_memory, bpf_memory_Q, full_band_bpf_1_fx );
#endif

    }
    pop_wmops(); /*push_wmops( "SYNTHESISE_FB_HIGH_BAND PART A.1" );*/
    pop_wmops(); /*push_wmops( "SYNTHESISE_FB_HIGH_BAND PART A" )*/
+12 −1
Original line number Diff line number Diff line
@@ -7324,8 +7324,11 @@ void fb_tbe_enc_fx(
    exp_temp = sub( exp_temp, 1 );

    Copy_Scale_sig( new_input, input_fhb, L_FRAME48k, exp_temp );

#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
    elliptic_bpf_48k_generic_fx( input_fhb, &exp_temp, tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem_fx, hBWE_TD->elliptic_bpf_2_48k_mem_fx_Q, full_band_bpf_2_fx, NULL, NULL );
#else
    elliptic_bpf_48k_generic_fx( input_fhb, &exp_temp, tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem_fx, hBWE_TD->elliptic_bpf_2_48k_mem_fx_Q, full_band_bpf_2_fx );
#endif
    Sample_Delay_HP = NS2SA( 48000, ACELP_LOOK_NS + DELAY_FD_BWE_ENC_12k8_NS + DELAY_FIR_RESAMPL_NS ) - L_FRAME48k / 2;

    IF( NE_16( st->last_extl, FB_TBE ) )
@@ -7449,11 +7452,19 @@ void fb_tbe_enc_ivas_fx(

    IF( EQ_16( st->element_mode, IVAS_CPE_DFT ) )
    {
#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
        elliptic_bpf_48k_generic_fx( input_fhb_new, &exp_temp, tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem_fx, hBWE_TD->elliptic_bpf_2_48k_mem_fx_Q, full_band_bpf_2_fx, NULL, NULL );
#else
        elliptic_bpf_48k_generic_fx( input_fhb_new, &exp_temp, tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem_fx, hBWE_TD->elliptic_bpf_2_48k_mem_fx_Q, full_band_bpf_2_fx );
#endif
    }
    ELSE
    {
#ifdef FIX_1439_SPEEDUP_elliptic_bpf_48k_generic_OUT32
        elliptic_bpf_48k_generic_fx( input_fhb_new + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ), &exp_temp, tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem_fx, hBWE_TD->elliptic_bpf_2_48k_mem_fx_Q, full_band_bpf_2_fx, NULL, NULL );
#else
        elliptic_bpf_48k_generic_fx( input_fhb_new + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ), &exp_temp, tmp_vec, hBWE_TD->elliptic_bpf_2_48k_mem_fx, hBWE_TD->elliptic_bpf_2_48k_mem_fx_Q, full_band_bpf_2_fx );
#endif
    }

    test();