/* NLSF stabilizer, over multiple input column data vectors */ void SKP_Silk_NLSF_stabilize_multi( SKP_int *NLSF_Q15, /* I/O: Unstable/stabilized normalized LSF vectors in Q15 [LxN] */ const SKP_int *NDeltaMin_Q15, /* I: Normalized delta min vector in Q15, NDeltaMin_Q15[L] must be >= 1 [L+1] */ const SKP_int N, /* I: Number of input vectors to be stabilized */ const SKP_int L /* I: NLSF vector dimension */ ) { SKP_int n; /* loop over input data */ for( n = 0; n < N; n++ ) { SKP_Silk_NLSF_stabilize( &NLSF_Q15[n * L], NDeltaMin_Q15, L ); } }
/* LSF stabilizer, for a single input data vector */ void SKP_Silk_NLSF_stabilize_FLP( SKP_float *pNLSF, /* I/O (Un)stable NLSF vector [ LPC_order ] */ const SKP_float *pNDelta_min, /* I Normalized delta min vector[LPC_order+1]*/ const SKP_int LPC_order /* I LPC order */ ) { SKP_int i; SKP_int NLSF_Q15[ MAX_LPC_ORDER ], ndelta_min_Q15[ MAX_LPC_ORDER + 1 ]; for( i = 0; i < LPC_order; i++ ) { NLSF_Q15[ i ] = ( SKP_int )SKP_float2int( pNLSF[ i ] * 32768.0f ); ndelta_min_Q15[ i ] = ( SKP_int )SKP_float2int( pNDelta_min[ i ] * 32768.0f ); } ndelta_min_Q15[ LPC_order ] = ( SKP_int )SKP_float2int( pNDelta_min[ LPC_order ] * 32768.0f ); /* NLSF stabilizer, for a single input data vector */ SKP_Silk_NLSF_stabilize( NLSF_Q15, ndelta_min_Q15, LPC_order ); for( i = 0; i < LPC_order; i++ ) { pNLSF[ i ] = ( SKP_float )NLSF_Q15[ i ] * ( 1.0f / 32768.0f ); } }