#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "main_FLP.h"
#include "tuning_parameters.h"
void silk_find_LTP_FLP(
silk_float XX[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ],
silk_float xX[ MAX_NB_SUBFR * LTP_ORDER ],
const silk_float r_ptr[],
const opus_int lag[ MAX_NB_SUBFR ],
const opus_int subfr_length,
const opus_int nb_subfr,
int arch
)
{
opus_int k;
silk_float *xX_ptr, *XX_ptr;
const silk_float *lag_ptr;
silk_float xx, temp;
xX_ptr = xX;
XX_ptr = XX;
for( k = 0; k < nb_subfr; k++ ) {
lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 );
silk_corrMatrix_FLP( lag_ptr, subfr_length, LTP_ORDER, XX_ptr, arch );
silk_corrVector_FLP( lag_ptr, r_ptr, subfr_length, LTP_ORDER, xX_ptr, arch );
xx = ( silk_float )silk_energy_FLP( r_ptr, subfr_length + LTP_ORDER );
temp = 1.0f / silk_max( xx, LTP_CORR_INV_MAX * 0.5f * ( XX_ptr[ 0 ] + XX_ptr[ 24 ] ) + 1.0f );
silk_scale_vector_FLP( XX_ptr, temp, LTP_ORDER * LTP_ORDER );
silk_scale_vector_FLP( xX_ptr, temp, LTP_ORDER );
r_ptr += subfr_length;
XX_ptr += LTP_ORDER * LTP_ORDER;
xX_ptr += LTP_ORDER;
}
}