/*==================================================================================== EVS Codec 3GPP TS26.443 Jun 30, 2015. Version CR 26.443-0006 ====================================================================================*/ #include #include "options.h" #include "prot.h" #include "cnst.h" /*----------------------------------------------------------------------------------* * findpulse() * * Find first pitch pulse in a frame *----------------------------------------------------------------------------------*/ short findpulse( /* o : pulse position */ const short L_frame, /* i : length of the frame */ const float res[], /* i : residual signal */ const short T0, /* i : integer pitch */ const short enc_dec, /* i : flag enc/dec, 0 - enc, 1 - dec */ short *sign /* i/o: sign of the maximum */ ) { const float *ptr; float val, maxval; short i, maxi; float resf[L_FRAME16k]; /* Low pass filtered residual */ if ( enc_dec == ENC ) { /*-----------------------------------------------------------------* * Very simple LP filter *-----------------------------------------------------------------*/ resf[0] = 0.50f * res[0] + 0.25f * res[1]; for (i=1; imaxval) { maxval = val; maxi = i; if(*ptr >= 0) { *sign = 0; } else { *sign = 1; } } ptr--; } } else { /*-----------------------------------------------------------------* * Find "biggest" pulse in the last pitch section according to the sign *-----------------------------------------------------------------*/ ptr = res; maxval = 0; maxi = 0; if( *sign == 0 ) { for (i=1; i<=T0; i++) { val = *ptr++; if ( val >= maxval ) { maxval = val; maxi = i; } } } else { for (i=1; i<=T0; i++) { val = *ptr++; if (val<=maxval) { maxval = val; maxi = i; } } } } return(maxi); }