diff --git a/Makefile.am b/Makefile.am index 45da4f57df8ff7f6a3948816793957a64c8faea9..f3276db2c72492c9af8adec3f55d92814bda703e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -29,7 +29,7 @@ src_common/SKP_Silk_decode_indices.c \ src_common/SKP_Silk_decode_parameters.c \ src_common/SKP_Silk_decode_pulses.c \ src_common/SKP_Silk_decoder_set_fs.c \ -src_common/SKP_Silk_dec_SDK_API.c \ +src_common/SKP_Silk_dec_API.c \ src_common/SKP_Silk_detect_SWB_input.c \ src_common/SKP_Silk_enc_API.c \ src_common/SKP_Silk_encode_parameters.c \ @@ -58,6 +58,7 @@ src_common/SKP_Silk_tables_pulses_per_block.c \ src_common/SKP_Silk_tables_sign.c \ src_common/SKP_Silk_tables_type_offset.c \ src_common/SKP_Silk_VAD.c \ +src_common/SKP_Silk_control_audio_bandwidth.c \ src_FLP/SKP_Silk_apply_sine_window_FLP.c \ src_FLP/SKP_Silk_control_codec_FLP.c \ src_FLP/SKP_Silk_corrMatrix_FLP.c \ diff --git a/interface/SKP_Silk_SDK_API.h b/interface/SKP_Silk_SDK_API.h index e112526edb65a1652d534d1ddda4119398c4b518..8a83520d8a26fa1b0902c120cd6e27cc909d359a 100644 --- a/interface/SKP_Silk_SDK_API.h +++ b/interface/SKP_Silk_SDK_API.h @@ -83,11 +83,11 @@ SKP_int SKP_Silk_SDK_QueryEncoder( /* O: Returns error co /**************************/ SKP_int SKP_Silk_SDK_Encode( /* O: Returns error code */ void *encState, /* I/O: State */ - const SKP_SILK_SDK_EncControlStruct *encControl, /* I: Control status */ + SKP_SILK_SDK_EncControlStruct *encControl, /* I: Control status */ const SKP_int16 *samplesIn, /* I: Speech sample input vector */ SKP_int nSamplesIn, /* I: Number of samples in input vector */ ec_enc *psRangeEnc, /* I/O Compressor data structure */ - SKP_int16 *nBytesOut /* I/O: Number of bytes in payload (input: Max bytes) */ + SKP_int32 *nBytesOut /* I/O: Number of bytes in payload (input: Max bytes) */ ); /****************************************/ @@ -118,7 +118,7 @@ SKP_int SKP_Silk_SDK_Decode( /* O: Returns error co ec_dec *psRangeDec, /* I/O Compressor data structure */ const SKP_int nBytesIn, /* I: Number of input bytes */ SKP_int16 *samplesOut, /* O: Decoded output speech vector */ - SKP_int16 *nSamplesOut /* I/O: Number of samples (vector/decoded) */ + SKP_int32 *nSamplesOut /* I/O: Number of samples (vector/decoded) */ ); /***************************************************************/ @@ -129,7 +129,7 @@ void SKP_Silk_SDK_search_for_LBRR( const SKP_int16 nBytesIn, /* I: Number of input bytes */ SKP_int lost_offset, /* I: Offset from lost packet */ SKP_uint8 *LBRRData, /* O: LBRR payload */ - SKP_int16 *nLBRRBytes /* O: Number of LBRR Bytes */ + SKP_int32 *nLBRRBytes /* O: Number of LBRR Bytes */ ); /**************************************/ diff --git a/interface/SKP_Silk_control.h b/interface/SKP_Silk_control.h index b0fdc156a12f1987f4fafd58202ef61821160d7d..d10e3f9cf473e74db54637ae9670bb68348044e5 100644 --- a/interface/SKP_Silk_control.h +++ b/interface/SKP_Silk_control.h @@ -39,14 +39,17 @@ extern "C" /* Structure for controlling encoder operation */ /***********************************************/ typedef struct { - /* I: Input signal sampling rate in Hertz; 8000/12000/16000/24000 */ + /* I: Input signal sampling rate in Hertz; 8000/12000/16000/24000/32000/44100/48000 */ SKP_int32 API_sampleRate; /* I: Maximum internal sampling rate in Hertz; 8000/12000/16000/24000 */ SKP_int32 maxInternalSampleRate; - /* I: Number of samples per packet; must be equivalent of 20, 40, 60, 80 or 100 ms */ - SKP_int packetSize; + /* I: Minimum internal sampling rate in Hertz; 8000/12000/16000/24000 */ + SKP_int32 minInternalSampleRate; + + /* I: Number of samples per packet in milliseconds; 10/20/40/60 */ + SKP_int payloadSize_ms; /* I: Bitrate during active speech in bits/second; internally limited */ SKP_int32 bitRate; @@ -62,20 +65,32 @@ typedef struct { /* I: Flag to enable discontinuous transmission (DTX); 0/1 */ SKP_int useDTX; + + /* I: Flag to use constant bitrate */ + SKP_int useCBR; + + /* O: Internal sampling rate used, in Hertz; 8000/12000/16000/24000 */ + SKP_int32 internalSampleRate; } SKP_SILK_SDK_EncControlStruct; /**************************************************************************/ /* Structure for controlling decoder operation and reading decoder status */ /**************************************************************************/ typedef struct { - /* I: Output signal sampling rate in Hertz; 8000/12000/16000/24000 */ + /* I: Output signal sampling rate in Hertz; 8000/12000/16000/24000/32000/44100/48000 */ SKP_int32 API_sampleRate; + /* I: Number of samples per packet in milliseconds; 10/20/40/60 */ + SKP_int payloadSize_ms; + + /* I: Internal sampling rate used, in Hertz; 8000/12000/16000/24000 */ + SKP_int32 internalSampleRate; + /* O: Number of samples per frame */ SKP_int frameSize; - /* O: Frames per packet 1, 2, 3, 4, 5 */ - SKP_int framesPerPacket; + /* O: Frames per payload 1, 2, 3 */ + SKP_int framesPerPayload; /* O: Flag to indicate that the decoder has remaining payloads internally */ SKP_int moreInternalDecoderFrames; diff --git a/interface/SKP_Silk_errors.h b/interface/SKP_Silk_errors.h index 475f4934a106c5d20fd0ee8aa1da75e958704cbb..a1032f8f435a1f429912d3037ee061782d2403db 100644 --- a/interface/SKP_Silk_errors.h +++ b/interface/SKP_Silk_errors.h @@ -43,44 +43,50 @@ extern "C" /**************************/ /* Input length is not a multiplum of 10 ms, or length is longer than the packet length */ -#define SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES -1 +#define SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES -101 /* Sampling frequency not 8000, 12000, 16000 or 24000 Hertz */ -#define SKP_SILK_ENC_FS_NOT_SUPPORTED -2 +#define SKP_SILK_ENC_FS_NOT_SUPPORTED -102 /* Packet size not 20, 40, 60, 80 or 100 ms */ -#define SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED -3 +#define SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED -103 /* Allocated payload buffer too short */ -#define SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT -4 +#define SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT -104 /* Loss rate not between 0 and 100 percent */ -#define SKP_SILK_ENC_INVALID_LOSS_RATE -5 +#define SKP_SILK_ENC_INVALID_LOSS_RATE -105 /* Complexity setting not valid, use 0, 1 or 2 */ -#define SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING -6 +#define SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING -106 /* Inband FEC setting not valid, use 0 or 1 */ -#define SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING -7 +#define SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING -107 /* DTX setting not valid, use 0 or 1 */ -#define SKP_SILK_ENC_INVALID_DTX_SETTING -8 +#define SKP_SILK_ENC_INVALID_DTX_SETTING -108 + +/* CBR setting not valid, use 0 or 1 */ +#define SKP_SILK_ENC_INVALID_CBR_SETTING -109 /* Internal encoder error */ -#define SKP_SILK_ENC_INTERNAL_ERROR -9 +#define SKP_SILK_ENC_INTERNAL_ERROR -110 /**************************/ /* Decoder error messages */ /**************************/ /* Output sampling frequency lower than internal decoded sampling frequency */ -#define SKP_SILK_DEC_INVALID_SAMPLING_FREQUENCY -10 +#define SKP_SILK_DEC_INVALID_SAMPLING_FREQUENCY -200 /* Payload size exceeded the maximum allowed 1024 bytes */ -#define SKP_SILK_DEC_PAYLOAD_TOO_LARGE -11 +#define SKP_SILK_DEC_PAYLOAD_TOO_LARGE -201 + +/* Payload has bit errors */ +#define SKP_SILK_DEC_PAYLOAD_ERROR -202 /* Payload has bit errors */ -#define SKP_SILK_DEC_PAYLOAD_ERROR -12 +#define SKP_SILK_DEC_INVALID_FRAME_SIZE -203 #ifdef __cplusplus } diff --git a/src_FIX/SKP_Silk_HP_variable_cutoff_FIX.c b/src_FIX/SKP_Silk_HP_variable_cutoff_FIX.c index b695a5a29d809b69f41be294b81c639d88a57641..10bd439156f93d050b7daab9a4f692ac5bffdab2 100644 --- a/src_FIX/SKP_Silk_HP_variable_cutoff_FIX.c +++ b/src_FIX/SKP_Silk_HP_variable_cutoff_FIX.c @@ -26,6 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" +#include "SKP_Silk_tuning_parameters.h" #if HIGH_PASS_INPUT @@ -57,7 +58,7 @@ void SKP_Silk_HP_variable_cutoff_FIX( quality_Q15 = psEncCtrl->input_quality_bands_Q15[ 0 ]; pitch_freq_log_Q7 = SKP_SUB32( pitch_freq_log_Q7, SKP_SMULWB( SKP_SMULWB( SKP_LSHIFT( quality_Q15, 2 ), quality_Q15 ), pitch_freq_log_Q7 - SKP_LOG2_VARIABLE_HP_MIN_FREQ_Q7 ) ); - pitch_freq_log_Q7 = SKP_ADD32( pitch_freq_log_Q7, SKP_RSHIFT( 19661 - quality_Q15, 9 ) ); // 19661_Q15 = 0.6_Q0 + pitch_freq_log_Q7 = SKP_ADD32( pitch_freq_log_Q7, SKP_RSHIFT( SKP_FIX_CONST( 0.6, 15 ) - quality_Q15, 9 ) ); //delta_freq = pitch_freq_log - psEnc->variable_HP_smth1; delta_freq_Q7 = pitch_freq_log_Q7 - SKP_RSHIFT( psEnc->variable_HP_smth1_Q15, 8 ); @@ -67,21 +68,22 @@ void SKP_Silk_HP_variable_cutoff_FIX( } /* limit delta, to reduce impact of outliers */ - delta_freq_Q7 = SKP_LIMIT_32( delta_freq_Q7, -VARIABLE_HP_MAX_DELTA_FREQ_Q7, VARIABLE_HP_MAX_DELTA_FREQ_Q7 ); + delta_freq_Q7 = SKP_LIMIT_32( delta_freq_Q7, -SKP_FIX_CONST( VARIABLE_HP_MAX_DELTA_FREQ, 7 ), SKP_FIX_CONST( VARIABLE_HP_MAX_DELTA_FREQ, 7 ) ); /* update smoother */ psEnc->variable_HP_smth1_Q15 = SKP_SMLAWB( psEnc->variable_HP_smth1_Q15, - SKP_MUL( SKP_LSHIFT( psEnc->speech_activity_Q8, 1 ), delta_freq_Q7 ), VARIABLE_HP_SMTH_COEF1_Q16 ); + SKP_MUL( SKP_LSHIFT( psEnc->speech_activity_Q8, 1 ), delta_freq_Q7 ), SKP_FIX_CONST( VARIABLE_HP_SMTH_COEF1, 16 ) ); } /* second smoother */ psEnc->variable_HP_smth2_Q15 = SKP_SMLAWB( psEnc->variable_HP_smth2_Q15, - psEnc->variable_HP_smth1_Q15 - psEnc->variable_HP_smth2_Q15, VARIABLE_HP_SMTH_COEF2_Q16 ); + psEnc->variable_HP_smth1_Q15 - psEnc->variable_HP_smth2_Q15, SKP_FIX_CONST( VARIABLE_HP_SMTH_COEF2, 16 ) ); /* convert from log scale to Hertz */ - psEncCtrl->pitch_freq_low_Hz = SKP_Silk_log2lin( SKP_RSHIFT( psEnc->variable_HP_smth2_Q15, 8 ) ); //pow( 2.0, psEnc->variable_HP_smth2 ); + psEncCtrl->pitch_freq_low_Hz = SKP_Silk_log2lin( SKP_RSHIFT( psEnc->variable_HP_smth2_Q15, 8 ) ); /* limit frequency range */ - psEncCtrl->pitch_freq_low_Hz = SKP_LIMIT_32( psEncCtrl->pitch_freq_low_Hz, VARIABLE_HP_MIN_FREQ_Q0, VARIABLE_HP_MAX_FREQ_Q0 ); + psEncCtrl->pitch_freq_low_Hz = SKP_LIMIT_32( psEncCtrl->pitch_freq_low_Hz, + SKP_FIX_CONST( VARIABLE_HP_MIN_FREQ, 0 ), SKP_FIX_CONST( VARIABLE_HP_MAX_FREQ, 0 ) ); /********************************/ /* Compute Filter Coefficients */ @@ -94,7 +96,7 @@ void SKP_Silk_HP_variable_cutoff_FIX( SKP_assert( Fc_Q19 >= 3704 ); SKP_assert( Fc_Q19 <= 27787 ); - r_Q28 = ( 1 << 28 ) - SKP_MUL( 471, Fc_Q19 ); // 471_Q9 = 0.92_Q0, range: 255347779 to 266690872, 27-28 bits + r_Q28 = SKP_FIX_CONST( 1.0, 28 ) - SKP_MUL( SKP_FIX_CONST( 0.92, 9 ), Fc_Q19 ); SKP_assert( r_Q28 >= 255347779 ); SKP_assert( r_Q28 <= 266690872 ); @@ -106,7 +108,7 @@ void SKP_Silk_HP_variable_cutoff_FIX( // -r * ( 2 - Fc * Fc ); r_Q22 = SKP_RSHIFT( r_Q28, 6 ); - A_Q28[ 0 ] = SKP_SMULWW( r_Q22, SKP_SMULWW( Fc_Q19, Fc_Q19 ) - ( 2 << 22 ) ); + A_Q28[ 0 ] = SKP_SMULWW( r_Q22, SKP_SMULWW( Fc_Q19, Fc_Q19 ) - SKP_FIX_CONST( 2.0, 22 ) ); A_Q28[ 1 ] = SKP_SMULWW( r_Q22, r_Q22 ); /********************************/ diff --git a/src_FIX/SKP_Silk_LTP_scale_ctrl_FIX.c b/src_FIX/SKP_Silk_LTP_scale_ctrl_FIX.c index 9470e371f7cabfbd0dae6884134f6b44a8083de2..c7baece03a7bd9ddd1a1b2e309ffe3af3df0a161 100644 --- a/src_FIX/SKP_Silk_LTP_scale_ctrl_FIX.c +++ b/src_FIX/SKP_Silk_LTP_scale_ctrl_FIX.c @@ -52,7 +52,7 @@ void SKP_Silk_LTP_scale_ctrl_FIX( /* combine input and filtered input */ g_out_Q5 = SKP_RSHIFT_ROUND( SKP_RSHIFT( psEncCtrl->LTPredCodGain_Q7, 1 ) + SKP_RSHIFT( psEnc->HPLTPredCodGain_Q7, 1 ), 3 ); - g_limit_Q15 = SKP_Silk_sigm_Q15( g_out_Q5 - ( 3 << 5 ) ); /* mulitplid with 0.5 */ + g_limit_Q15 = SKP_Silk_sigm_Q15( g_out_Q5 - ( 3 << 5 ) ); /* Default is minimum scaling */ psEncCtrl->sCmn.LTP_scaleIndex = 0; diff --git a/src_FIX/SKP_Silk_NLSF_MSVQ_encode_FIX.c b/src_FIX/SKP_Silk_NLSF_MSVQ_encode_FIX.c index 73e40c00bdc15e20e5390cae27e2785561497511..67b14a2962b8ef8cb76f39f82eb4a4cc01c24a40 100644 --- a/src_FIX/SKP_Silk_NLSF_MSVQ_encode_FIX.c +++ b/src_FIX/SKP_Silk_NLSF_MSVQ_encode_FIX.c @@ -43,9 +43,8 @@ void SKP_Silk_NLSF_MSVQ_encode_FIX( const SKP_int deactivate_fluc_red /* I Deactivate fluctuation reduction */ ) { - SKP_int i, s, k, cur_survivors = 0, prev_survivors, input_index, cb_index, bestIndex; + SKP_int i, s, k, cur_survivors = 0, prev_survivors, min_survivors, input_index, cb_index, bestIndex; SKP_int32 rateDistThreshold_Q18; - SKP_int pNLSF_in_Q15[ MAX_LPC_ORDER ]; #if( NLSF_MSVQ_FLUCTUATION_REDUCTION == 1 ) SKP_int32 se_Q15, wsse_Q20, bestRateDist_Q20; #endif @@ -72,7 +71,7 @@ void SKP_Silk_NLSF_MSVQ_encode_FIX( const SKP_int *pConstInt; SKP_int *pInt; - const SKP_int16 *pCB_element; + const SKP_int8 *pCB_element; const SKP_Silk_NLSF_CBS *pCurrentCBStage; SKP_assert( NLSF_MSVQ_Survivors <= MAX_NLSF_MSVQ_SURVIVORS ); @@ -85,25 +84,24 @@ void SKP_Silk_NLSF_MSVQ_encode_FIX( DEBUG_STORE_DATA( NLSF_mu.dat, &NLSF_mu_Q15, sizeof( SKP_int32 ) ); #endif - - /* Copy the input vector */ - SKP_memcpy( pNLSF_in_Q15, pNLSF_Q15, LPC_order * sizeof( SKP_int ) ); - /****************************************************/ /* Tree search for the multi-stage vector quantizer */ /****************************************************/ /* Clear accumulated rates */ SKP_memset( pRate_Q5, 0, NLSF_MSVQ_Survivors * sizeof( SKP_int32 ) ); - - /* Copy NLSFs into residual signal vector */ + + /* Subtract 1/2 from NLSF input vector to create initial residual */ for( i = 0; i < LPC_order; i++ ) { - pRes_Q15[ i ] = pNLSF_Q15[ i ]; + pRes_Q15[ i ] = pNLSF_Q15[ i ] - SKP_FIX_CONST( 0.5f, 15 ); } /* Set first stage values */ prev_survivors = 1; + /* Minimum number of survivors */ + min_survivors = NLSF_MSVQ_Survivors / 2; + /* Loop over all stages */ for( s = 0; s < psNLSF_CB->nStages; s++ ) { @@ -130,9 +128,10 @@ void SKP_Silk_NLSF_MSVQ_encode_FIX( prev_survivors * pCurrentCBStage->nVectors, cur_survivors ); /* Discard survivors with rate-distortion values too far above the best one */ - if( pRateDist_Q18[ 0 ] < SKP_int32_MAX / NLSF_MSVQ_SURV_MAX_REL_RD ) { - rateDistThreshold_Q18 = SKP_MUL( NLSF_MSVQ_SURV_MAX_REL_RD, pRateDist_Q18[ 0 ] ); - while( pRateDist_Q18[ cur_survivors - 1 ] > rateDistThreshold_Q18 && cur_survivors > 1 ) { + if( pRateDist_Q18[ 0 ] < SKP_int32_MAX / MAX_NLSF_MSVQ_SURVIVORS ) { + rateDistThreshold_Q18 = SKP_SMLAWB( pRateDist_Q18[ 0 ], + SKP_MUL( NLSF_MSVQ_Survivors, pRateDist_Q18[ 0 ] ), SKP_FIX_CONST( NLSF_MSVQ_SURV_MAX_REL_RD, 16 ) ); + while( pRateDist_Q18[ cur_survivors - 1 ] > rateDistThreshold_Q18 && cur_survivors > min_survivors ) { cur_survivors--; } } @@ -155,14 +154,14 @@ void SKP_Silk_NLSF_MSVQ_encode_FIX( /* Subtract new contribution from the previous residual vector for each of 'cur_survivors' */ pConstInt = &pRes_Q15[ SKP_SMULBB( input_index, LPC_order ) ]; - pCB_element = &pCurrentCBStage->CB_NLSF_Q15[ SKP_SMULBB( cb_index, LPC_order ) ]; + pCB_element = &pCurrentCBStage->CB_NLSF_Q8[ SKP_SMULBB( cb_index, LPC_order ) ]; pInt = &pRes_new_Q15[ SKP_SMULBB( k, LPC_order ) ]; for( i = 0; i < LPC_order; i++ ) { - pInt[ i ] = pConstInt[ i ] - ( SKP_int )pCB_element[ i ]; + pInt[ i ] = pConstInt[ i ] - SKP_LSHIFT16( ( SKP_int )pCB_element[ i ], 7 ); } /* Update accumulated rate for stage 1 to the current */ - pRate_new_Q5[ k ] = pRate_Q5[ input_index ] + pCurrentCBStage->Rates_Q5[ cb_index ]; + pRate_new_Q5[ k ] = pRate_Q5[ input_index ] + SKP_LSHIFT32( ( SKP_int32 )pCurrentCBStage->Rates_Q4[ cb_index ], 1 ); /* Copy paths from previous matrix, starting with the best path */ pConstInt = &pPath[ SKP_SMULBB( input_index, psNLSF_CB->nStages ) ]; diff --git a/src_FIX/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c b/src_FIX/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c index 09e2bc717c59477fbb9ec6fe2549798dc2e88c21..e5bb81de183801103f9a6696810a1ab5470a9316 100644 --- a/src_FIX/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c +++ b/src_FIX/SKP_Silk_NLSF_VQ_rate_distortion_FIX.c @@ -43,7 +43,7 @@ void SKP_Silk_NLSF_VQ_rate_distortion_FIX( SKP_int32 *pRD_vec_Q20; /* Compute weighted quantization errors for all input vectors over one codebook stage */ - SKP_Silk_NLSF_VQ_sum_error_FIX( pRD_Q20, in_Q15, w_Q6, psNLSF_CBS->CB_NLSF_Q15, + SKP_Silk_NLSF_VQ_sum_error_FIX( pRD_Q20, in_Q15, w_Q6, psNLSF_CBS->CB_NLSF_Q8, N, psNLSF_CBS->nVectors, LPC_order ); /* Loop over input vectors */ @@ -51,9 +51,9 @@ void SKP_Silk_NLSF_VQ_rate_distortion_FIX( for( n = 0; n < N; n++ ) { /* Add rate cost to error for each codebook vector */ for( i = 0; i < psNLSF_CBS->nVectors; i++ ) { - SKP_assert( rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] >= 0 ); - SKP_assert( rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ] <= SKP_int16_MAX ); - pRD_vec_Q20[ i ] = SKP_SMLABB( pRD_vec_Q20[ i ], rate_acc_Q5[ n ] + psNLSF_CBS->Rates_Q5[ i ], mu_Q15 ); + SKP_assert( rate_acc_Q5[ n ] + SKP_LSHIFT32( ( SKP_int32 )psNLSF_CBS->Rates_Q4[ i ], 1 ) >= 0 ); + SKP_assert( rate_acc_Q5[ n ] + SKP_LSHIFT32( ( SKP_int32 )psNLSF_CBS->Rates_Q4[ i ], 1 ) <= SKP_int16_MAX ); + pRD_vec_Q20[ i ] = SKP_SMLABB( pRD_vec_Q20[ i ], rate_acc_Q5[ n ] + SKP_LSHIFT32( ( SKP_int32 )psNLSF_CBS->Rates_Q4[ i ], 1 ), mu_Q15 ); SKP_assert( pRD_vec_Q20[ i ] >= 0 ); } pRD_vec_Q20 += psNLSF_CBS->nVectors; diff --git a/src_FIX/SKP_Silk_NLSF_VQ_sum_error_FIX.c b/src_FIX/SKP_Silk_NLSF_VQ_sum_error_FIX.c index 7a2171ccecccc364b44f70488148a2b2672e1dd0..e1f5283eea74fbe4162687fcb1d998627299012b 100644 --- a/src_FIX/SKP_Silk_NLSF_VQ_sum_error_FIX.c +++ b/src_FIX/SKP_Silk_NLSF_VQ_sum_error_FIX.c @@ -32,16 +32,16 @@ void SKP_Silk_NLSF_VQ_sum_error_FIX( SKP_int32 *err_Q20, /* O Weighted quantization errors [N*K] */ const SKP_int *in_Q15, /* I Input vectors to be quantized [N*LPC_order] */ const SKP_int *w_Q6, /* I Weighting vectors [N*LPC_order] */ - const SKP_int16 *pCB_Q15, /* I Codebook vectors [K*LPC_order] */ + const SKP_int8 *pCB_Q8, /* I Codebook vectors [K*LPC_order] */ const SKP_int N, /* I Number of input vectors */ const SKP_int K, /* I Number of codebook vectors */ const SKP_int LPC_order /* I Number of LPCs */ ) { - SKP_int i, n, m; - SKP_int32 diff_Q15, sum_error, Wtmp_Q6; - SKP_int32 Wcpy_Q6[ MAX_LPC_ORDER / 2 ]; - const SKP_int16 *cb_vec_Q15; + SKP_int i, n, m; + SKP_int32 diff_Q15, sum_error, Wtmp_Q6; + SKP_int32 Wcpy_Q6[ MAX_LPC_ORDER / 2 ]; + const SKP_int8 *cb_vec_Q8; SKP_assert( LPC_order <= 16 ); SKP_assert( ( LPC_order & 1 ) == 0 ); @@ -54,7 +54,7 @@ void SKP_Silk_NLSF_VQ_sum_error_FIX( /* Loop over input vectors */ for( n = 0; n < N; n++ ) { /* Loop over codebook */ - cb_vec_Q15 = pCB_Q15; + cb_vec_Q8 = pCB_Q8; for( i = 0; i < K; i++ ) { sum_error = 0; for( m = 0; m < LPC_order; m += 2 ) { @@ -62,11 +62,11 @@ void SKP_Silk_NLSF_VQ_sum_error_FIX( Wtmp_Q6 = Wcpy_Q6[ SKP_RSHIFT( m, 1 ) ]; /* Compute weighted squared quantization error for index m */ - diff_Q15 = in_Q15[ m ] - *cb_vec_Q15++; // range: [ -32767 : 32767 ] + diff_Q15 = in_Q15[ m ] - SKP_LSHIFT16( ( SKP_int )( *cb_vec_Q8++ ), 7 ); // range: [ -32767 : 32767 ] sum_error = SKP_SMLAWB( sum_error, SKP_SMULBB( diff_Q15, diff_Q15 ), Wtmp_Q6 ); /* Compute weighted squared quantization error for index m + 1 */ - diff_Q15 = in_Q15[m + 1] - *cb_vec_Q15++; // range: [ -32767 : 32767 ] + diff_Q15 = in_Q15[m + 1] - SKP_LSHIFT16( ( SKP_int )( *cb_vec_Q8++ ), 7 ); // range: [ -32767 : 32767 ] sum_error = SKP_SMLAWT( sum_error, SKP_SMULBB( diff_Q15, diff_Q15 ), Wtmp_Q6 ); } SKP_assert( sum_error >= 0 ); diff --git a/src_FIX/SKP_Silk_control_codec_FIX.c b/src_FIX/SKP_Silk_control_codec_FIX.c index b9bcca447d2fdcb4814be92b11286a00442ccf6b..073a66ba457c5fb918c5019241e12bb1d067d789 100644 --- a/src_FIX/SKP_Silk_control_codec_FIX.c +++ b/src_FIX/SKP_Silk_control_codec_FIX.c @@ -26,28 +26,23 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" +#include "SKP_Silk_setup_complexity.h" /* ToDo: Move the functions belowto common to be able to use them in FLP control codec also */ SKP_INLINE SKP_int SKP_Silk_setup_resamplers( SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int API_fs_Hz, /* I */ SKP_int fs_kHz /* I */ ); SKP_INLINE SKP_int SKP_Silk_setup_packetsize( SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int PacketSize_ms, /* I */ - SKP_int fs_kHz /* I */ + SKP_int PacketSize_ms /* I */ ); SKP_INLINE SKP_int SKP_Silk_setup_fs( SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int fs_kHz /* I */ -); - -SKP_INLINE SKP_int SKP_Silk_setup_complexity( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int Complexity /* I */ + SKP_int fs_kHz, /* I */ + SKP_int PacketSize_ms /* I */ ); SKP_INLINE SKP_int SKP_Silk_setup_rate( @@ -56,142 +51,49 @@ SKP_INLINE SKP_int SKP_Silk_setup_rate( ); SKP_INLINE SKP_int SKP_Silk_setup_LBRR( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int INBandFEC_enabled /* I */ + SKP_Silk_encoder_state_FIX *psEnc /* I/O */ ); /* Control encoder SNR */ SKP_int SKP_Silk_control_encoder_FIX( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk encoder state */ - const SKP_int32 API_fs_Hz, /* I External (API) sampling rate (Hz) */ - const SKP_int max_internal_fs_kHz,/* I Maximum internal sampling rate (kHz) */ - const SKP_int PacketSize_ms, /* I Packet length (ms) */ - SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) (used if SNR_dB == 0) */ - const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ - const SKP_int INBandFEC_enabled, /* I Enable (1) / disable (0) inband FEC */ - const SKP_int DTX_enabled, /* I Enable / disable DTX */ - const SKP_int InputFramesize_ms, /* I Inputframe in ms */ - const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ + SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk encoder state */ + const SKP_int PacketSize_ms, /* I Packet length (ms) */ + const SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) */ + const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ + const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ ) { SKP_int fs_kHz, ret = 0; - /* State machine for the SWB/WB switching */ - fs_kHz = psEnc->sCmn.fs_kHz; - - /* Only switch during low speech activity, when no frames are sitting in the payload buffer */ - if( API_fs_Hz == 8000 || fs_kHz == 0 || API_fs_Hz < SKP_SMULBB( fs_kHz, 1000 ) || fs_kHz > max_internal_fs_kHz ) { - /* Switching is not possible, encoder just initialized, internal mode higher than external, */ - /* or internal mode higher than maximum allowed internal mode */ - fs_kHz = SKP_min( SKP_DIV32_16( API_fs_Hz, 1000 ), max_internal_fs_kHz ); - } else { - /* Accumulate the difference between the target rate and limit for switching down */ - psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - psEnc->sCmn.bitrate_threshold_down ); - psEnc->sCmn.bitrateDiff = SKP_min( psEnc->sCmn.bitrateDiff, 0 ); - - if( psEnc->speech_activity_Q8 < 128 && psEnc->sCmn.nFramesInPayloadBuf == 0 ) { /* Low speech activity and payload buffer empty */ - /* Check if we should switch down */ -#if SWITCH_TRANSITION_FILTERING - if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* Transition phase not active */ - ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD || /* Bitrate threshold is met */ - ( psEnc->sCmn.sSWBdetect.WB_detected * psEnc->sCmn.fs_kHz == 24 ) ) ) { /* Forced down-switching due to WB input */ - psEnc->sCmn.sLP.transition_frame_no = 1; /* Begin transition phase */ - psEnc->sCmn.sLP.mode = 0; /* Switch down */ - } else if( - ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && /* Transition phase complete */ - ( psEnc->sCmn.sLP.mode == 0 ) ) { /* Ready to switch down */ - psEnc->sCmn.sLP.transition_frame_no = 0; /* Ready for new transition phase */ -#else - if( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) { /* Bitrate threshold is met */ -#endif - psEnc->sCmn.bitrateDiff = 0; - - /* Switch to a lower sample frequency */ - if( psEnc->sCmn.fs_kHz == 24 ) { - fs_kHz = 16; - } else if( psEnc->sCmn.fs_kHz == 16 ) { - fs_kHz = 12; - } else { - SKP_assert( psEnc->sCmn.fs_kHz == 12 ); - fs_kHz = 8; - } - } - - /* Check if we should switch up */ - if( ( ( SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ) < API_fs_Hz ) && - ( TargetRate_bps >= psEnc->sCmn.bitrate_threshold_up ) && - ( psEnc->sCmn.sSWBdetect.WB_detected * psEnc->sCmn.fs_kHz != 16 ) ) && - ( ( psEnc->sCmn.fs_kHz == 16 ) && ( max_internal_fs_kHz >= 24 ) || - ( psEnc->sCmn.fs_kHz == 12 ) && ( max_internal_fs_kHz >= 16 ) || - ( psEnc->sCmn.fs_kHz == 8 ) && ( max_internal_fs_kHz >= 12 ) ) -#if SWITCH_TRANSITION_FILTERING - && ( psEnc->sCmn.sLP.transition_frame_no == 0 ) ) { /* No transition phase running, ready to switch */ - psEnc->sCmn.sLP.mode = 1; /* Switch up */ -#else - ) { -#endif - psEnc->sCmn.bitrateDiff = 0; - - /* Switch to a higher sample frequency */ - if( psEnc->sCmn.fs_kHz == 8 ) { - fs_kHz = 12; - } else if( psEnc->sCmn.fs_kHz == 12 ) { - fs_kHz = 16; - } else { - SKP_assert( psEnc->sCmn.fs_kHz == 16 ); - fs_kHz = 24; - } - } + if( psEnc->sCmn.controlled_since_last_payload != 0 ) { + if( psEnc->sCmn.API_fs_Hz != psEnc->sCmn.prev_API_fs_Hz && psEnc->sCmn.fs_kHz > 0 ) { + /* Change in API sampling rate in the middle of encoding a packet */ + ret += SKP_Silk_setup_resamplers( psEnc, psEnc->sCmn.fs_kHz ); } + return ret; } -#if SWITCH_TRANSITION_FILTERING - /* After switching up, stop transition filter during speech inactivity */ - if( ( psEnc->sCmn.sLP.mode == 1 ) && - ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_UP ) && - ( psEnc->speech_activity_Q8 < 128 ) && - ( psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { - - psEnc->sCmn.sLP.transition_frame_no = 0; - - /* Reset transition filter state */ - SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) ); - } -#endif - -#ifdef FORCE_FS_KHZ - SKP_assert( FORCE_FS_KHZ == 8 || FORCE_FS_KHZ == 12 || FORCE_FS_KHZ == 16 || FORCE_FS_KHZ == 24 ); - if( psEnc->sCmn.fs_kHz != 0 ) { - /* Force except during init */ - fs_kHz = FORCE_FS_KHZ; - } -#endif + /* Beyond this point we know that there are no previously coded frames in the payload buffer */ -#ifdef SAVE_ALL_INTERNAL_DATA - DEBUG_STORE_DATA( bitrate.dat, &TargetRate_bps, 1 * sizeof( SKP_int32 ) ); - DEBUG_STORE_DATA( fs.dat, &fs_kHz, 1 * sizeof( SKP_int32 ) ); - DEBUG_STORE_DATA( diff.dat, &psEnc->sCmn.bitrateDiff, 1 * sizeof( SKP_int32 ) ); - DEBUG_STORE_DATA( lashape.dat, &psEnc->sCmn.la_shape, 1 * sizeof( SKP_int32 ) ); -#endif /********************************************/ - /* Prepare resampler and buffered data */ + /* Determine internal sampling rate */ /********************************************/ - SKP_Silk_setup_resamplers( psEnc, API_fs_Hz, fs_kHz ); + fs_kHz = SKP_Silk_control_audio_bandwidth( &psEnc->sCmn, TargetRate_bps ); /********************************************/ - /* Set packet size */ + /* Prepare resampler and buffered data */ /********************************************/ - ret += SKP_Silk_setup_packetsize( psEnc, PacketSize_ms, fs_kHz ); + ret += SKP_Silk_setup_resamplers( psEnc, fs_kHz ); /********************************************/ /* Set internal sampling frequency */ /********************************************/ - ret += SKP_Silk_setup_fs( psEnc, fs_kHz ); + ret += SKP_Silk_setup_fs( psEnc, fs_kHz, PacketSize_ms ); /********************************************/ /* Set encoding complexity */ /********************************************/ - ret += SKP_Silk_setup_complexity( psEnc, Complexity ); + ret += SKP_Silk_setup_complexity( &psEnc->sCmn, Complexity ); /********************************************/ /* Set bitrate/coding quality */ @@ -209,15 +111,9 @@ SKP_int SKP_Silk_control_encoder_FIX( /********************************************/ /* Set LBRR usage */ /********************************************/ - ret += SKP_Silk_setup_LBRR( psEnc, INBandFEC_enabled ); + ret += SKP_Silk_setup_LBRR( psEnc ); - /********************************************/ - /* Set DTX mode */ - /********************************************/ - if( DTX_enabled < 0 || DTX_enabled > 1 ) { - ret = SKP_SILK_ENC_INVALID_DTX_SETTING; - } - psEnc->sCmn.useDTX = DTX_enabled; + psEnc->sCmn.controlled_since_last_payload = 1; return ret; } @@ -225,7 +121,7 @@ SKP_int SKP_Silk_control_encoder_FIX( /* Control low bitrate redundancy usage */ void SKP_Silk_LBRR_ctrl_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ - SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O encoder control */ + SKP_Silk_encoder_control *psEncCtrlC /* I/O encoder control */ ) { SKP_int LBRR_usage; @@ -236,108 +132,110 @@ void SKP_Silk_LBRR_ctrl_FIX( /* Usage Control based on sensitivity and packet loss caracteristics */ /* For now only enable adding to next for active frames. Make more complex later */ LBRR_usage = SKP_SILK_NO_LBRR; - if( psEnc->speech_activity_Q8 > LBRR_SPEECH_ACTIVITY_THRES_Q8 && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { // nb! maybe multiply loss prob and speech activity - LBRR_usage = SKP_SILK_ADD_LBRR_TO_PLUS1; + if( psEnc->speech_activity_Q8 > SKP_FIX_CONST( LBRR_SPEECH_ACTIVITY_THRES, 8 ) && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { + LBRR_usage = SKP_SILK_LBRR; } - psEncCtrl->sCmn.LBRR_usage = LBRR_usage; + psEncCtrlC->LBRR_usage = LBRR_usage; } else { - psEncCtrl->sCmn.LBRR_usage = SKP_SILK_NO_LBRR; + psEncCtrlC->LBRR_usage = SKP_SILK_NO_LBRR; } } SKP_INLINE SKP_int SKP_Silk_setup_packetsize( SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int PacketSize_ms, /* I */ - SKP_int fs_kHz /* I */ + SKP_int PacketSize_ms /* I */ ) { SKP_int ret = SKP_SILK_NO_ERROR; if( ( PacketSize_ms != 10 ) && ( PacketSize_ms != 20 ) && ( PacketSize_ms != 40 ) && - ( PacketSize_ms != 60 ) && - ( PacketSize_ms != 80 ) && - ( PacketSize_ms != 100 ) ) { + ( PacketSize_ms != 60 ) ) { ret = SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED; } else { if( PacketSize_ms != psEnc->sCmn.PacketSize_ms ) { if( PacketSize_ms == 10 ) { - if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { - /* Only allowed when the payload buffer is empty */ - psEnc->sCmn.nb_subfr = MAX_NB_SUBFR >> 1; - psEnc->sCmn.frame_length = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr ); - psEnc->sCmn.PacketSize_ms = PacketSize_ms; - psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, fs_kHz ); - /* Packet length changes. Reset LBRR buffer */ - SKP_Silk_LBRR_reset( &psEnc->sCmn ); - } + /* Only allowed when the payload buffer is empty */ + psEnc->sCmn.nb_subfr = MAX_NB_SUBFR >> 1; + psEnc->sCmn.PacketSize_ms = PacketSize_ms; + psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, psEnc->sCmn.fs_kHz ); + /* Packet length changes. Reset LBRR buffer */ + SKP_Silk_LBRR_reset( &psEnc->sCmn ); } else{ - psEnc->sCmn.nb_subfr = MAX_NB_SUBFR; - psEnc->sCmn.frame_length = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr ); + psEnc->sCmn.nb_subfr = MAX_NB_SUBFR; psEnc->sCmn.PacketSize_ms = PacketSize_ms; - psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, fs_kHz ); + psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, psEnc->sCmn.fs_kHz ); /* Packet length changes. Reset LBRR buffer */ SKP_Silk_LBRR_reset( &psEnc->sCmn ); } } + psEnc->sCmn.frame_length = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr ); } + return(ret); } SKP_INLINE SKP_int SKP_Silk_setup_resamplers( SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int API_fs_Hz, /* I */ SKP_int fs_kHz /* I */ ) { SKP_int ret = SKP_SILK_NO_ERROR; - if( psEnc->sCmn.fs_kHz != fs_kHz || psEnc->sCmn.prev_API_fs_Hz != API_fs_Hz ) { + if( psEnc->sCmn.fs_kHz != fs_kHz || psEnc->sCmn.prev_API_fs_Hz != psEnc->sCmn.API_fs_Hz ) { - /* Allocate space for worst case temporary upsampling, 8 to 48 kHz, so a factor 6 */ - SKP_int16 x_buf_API_fs_Hz[ ( MAX_API_FS_KHZ / 8 ) * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; + if( psEnc->sCmn.fs_kHz == 0 ) { + /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */ + ret += SKP_Silk_resampler_init( &psEnc->sCmn.resampler_state, psEnc->sCmn.API_fs_Hz, fs_kHz * 1000 ); + } else { + /* Allocate space for worst case temporary upsampling, 8 to 48 kHz, so a factor 6 */ + SKP_int16 x_buf_API_fs_Hz[ ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * ( MAX_API_FS_KHZ / 8 ) ]; - SKP_int32 nSamples_temp = SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + psEnc->sCmn.la_shape; + SKP_int32 nSamples_temp = SKP_LSHIFT( psEnc->sCmn.frame_length, 1 ) + LA_SHAPE_MS * psEnc->sCmn.fs_kHz; - if( SKP_SMULBB( fs_kHz, 1000 ) < API_fs_Hz && psEnc->sCmn.fs_kHz != 0 ) { - /* Resample buffered data in x_buf to API_fs_Hz */ + if( SKP_SMULBB( fs_kHz, 1000 ) < psEnc->sCmn.API_fs_Hz && psEnc->sCmn.fs_kHz != 0 ) { + /* Resample buffered data in x_buf to API_fs_Hz */ - SKP_Silk_resampler_state_struct temp_resampler_state; + SKP_Silk_resampler_state_struct temp_resampler_state; - /* Initialize resampler for temporary resampling of x_buf data to API_fs_Hz */ - ret += SKP_Silk_resampler_init( &temp_resampler_state, SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ), API_fs_Hz ); + /* Initialize resampler for temporary resampling of x_buf data to API_fs_Hz */ + ret += SKP_Silk_resampler_init( &temp_resampler_state, SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ), psEnc->sCmn.API_fs_Hz ); - /* Temporary resampling of x_buf data to API_fs_Hz */ - ret += SKP_Silk_resampler( &temp_resampler_state, x_buf_API_fs_Hz, psEnc->x_buf, nSamples_temp ); + /* Temporary resampling of x_buf data to API_fs_Hz */ + ret += SKP_Silk_resampler( &temp_resampler_state, x_buf_API_fs_Hz, psEnc->x_buf, nSamples_temp ); - /* Calculate number of samples that has been temporarily upsampled */ - nSamples_temp = SKP_DIV32_16( nSamples_temp * API_fs_Hz, SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ) ); + /* Calculate number of samples that has been temporarily upsampled */ + nSamples_temp = SKP_DIV32_16( nSamples_temp * psEnc->sCmn.API_fs_Hz, SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ) ); - /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */ - ret += SKP_Silk_resampler_init( &psEnc->sCmn.resampler_state, API_fs_Hz, SKP_SMULBB( fs_kHz, 1000 ) ); + /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */ + ret += SKP_Silk_resampler_init( &psEnc->sCmn.resampler_state, psEnc->sCmn.API_fs_Hz, SKP_SMULBB( fs_kHz, 1000 ) ); - } else { - /* Copy data */ - SKP_memcpy( x_buf_API_fs_Hz, psEnc->x_buf, nSamples_temp * sizeof( SKP_int16 ) ); - } + } else { + /* Copy data */ + SKP_memcpy( x_buf_API_fs_Hz, psEnc->x_buf, nSamples_temp * sizeof( SKP_int16 ) ); + } - if( 1000 * fs_kHz != API_fs_Hz ) { - /* Correct resampler state (unless resampling by a factor 1) by resampling buffered data from API_fs_Hz to fs_kHz */ - ret += SKP_Silk_resampler( &psEnc->sCmn.resampler_state, psEnc->x_buf, x_buf_API_fs_Hz, nSamples_temp ); + if( 1000 * fs_kHz != psEnc->sCmn.API_fs_Hz ) { + /* Correct resampler state (unless resampling by a factor 1) by resampling buffered data from API_fs_Hz to fs_kHz */ + ret += SKP_Silk_resampler( &psEnc->sCmn.resampler_state, psEnc->x_buf, x_buf_API_fs_Hz, nSamples_temp ); + } } } - psEnc->sCmn.prev_API_fs_Hz = API_fs_Hz; - + + psEnc->sCmn.prev_API_fs_Hz = psEnc->sCmn.API_fs_Hz; + return(ret); } SKP_INLINE SKP_int SKP_Silk_setup_fs( SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int fs_kHz /* I */ + SKP_int fs_kHz, /* I */ + SKP_int PacketSize_ms /* I */ ) { - SKP_int ret = 0; + SKP_int ret = SKP_SILK_NO_ERROR; + /* Set internal sampling frequency */ if( psEnc->sCmn.fs_kHz != fs_kHz ) { /* reset part of the state */ SKP_memset( &psEnc->sShape, 0, sizeof( SKP_Silk_shape_state_FIX ) ); @@ -374,6 +272,7 @@ SKP_INLINE SKP_int SKP_Silk_setup_fs( psEnc->sNSQ.lagPrev = 100; psEnc->sNSQ.prev_inv_gain_Q16 = 65536; psEnc->sNSQ_LBRR.prev_inv_gain_Q16 = 65536; + psEnc->sCmn.fs_kHz = fs_kHz; if( psEnc->sCmn.fs_kHz == 8 ) { psEnc->sCmn.predictLPCOrder = MIN_LPC_ORDER; @@ -385,10 +284,8 @@ SKP_INLINE SKP_int SKP_Silk_setup_fs( psEnc->sCmn.psNLSF_CB[ 1 ] = &SKP_Silk_NLSF_CB1_16; } psEnc->sCmn.subfr_length = SKP_SMULBB( SUB_FRAME_LENGTH_MS, fs_kHz ); - psEnc->sCmn.frame_length = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr ); psEnc->sCmn.ltp_mem_length = SKP_SMULBB( LTP_MEM_LENGTH_MS, fs_kHz ); psEnc->sCmn.la_pitch = SKP_SMULBB( LA_PITCH_MS, fs_kHz ); - psEnc->sCmn.la_shape = SKP_SMULBB( LA_SHAPE_MS, fs_kHz ); psEnc->sPred.min_pitch_lag = SKP_SMULBB( 3, fs_kHz ); psEnc->sPred.max_pitch_lag = SKP_SMULBB( 18, fs_kHz ); if( psEnc->sCmn.nb_subfr == MAX_NB_SUBFR ){ @@ -397,87 +294,33 @@ SKP_INLINE SKP_int SKP_Silk_setup_fs( psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, fs_kHz ); } if( psEnc->sCmn.fs_kHz == 24 ) { - psEnc->mu_LTP_Q8 = MU_LTP_QUANT_SWB_Q8; + psEnc->mu_LTP_Q8 = SKP_FIX_CONST( MU_LTP_QUANT_SWB, 8 ); psEnc->sCmn.bitrate_threshold_up = SKP_int32_MAX; psEnc->sCmn.bitrate_threshold_down = SWB2WB_BITRATE_BPS; } else if( psEnc->sCmn.fs_kHz == 16 ) { - psEnc->mu_LTP_Q8 = MU_LTP_QUANT_WB_Q8; + psEnc->mu_LTP_Q8 = SKP_FIX_CONST( MU_LTP_QUANT_WB, 8 ); psEnc->sCmn.bitrate_threshold_up = WB2SWB_BITRATE_BPS; psEnc->sCmn.bitrate_threshold_down = WB2MB_BITRATE_BPS; } else if( psEnc->sCmn.fs_kHz == 12 ) { - psEnc->mu_LTP_Q8 = MU_LTP_QUANT_MB_Q8; + psEnc->mu_LTP_Q8 = SKP_FIX_CONST( MU_LTP_QUANT_MB, 8 ); psEnc->sCmn.bitrate_threshold_up = MB2WB_BITRATE_BPS; psEnc->sCmn.bitrate_threshold_down = MB2NB_BITRATE_BPS; } else { - psEnc->mu_LTP_Q8 = MU_LTP_QUANT_NB_Q8; + psEnc->mu_LTP_Q8 = SKP_FIX_CONST( MU_LTP_QUANT_NB, 8 ); psEnc->sCmn.bitrate_threshold_up = NB2MB_BITRATE_BPS; psEnc->sCmn.bitrate_threshold_down = 0; } psEnc->sCmn.fs_kHz_changed = 1; - - /* Check that settings are valid */ - SKP_assert( ( psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr ) == psEnc->sCmn.frame_length ); } - return( ret ); -} -SKP_INLINE SKP_int SKP_Silk_setup_complexity( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int Complexity /* I */ -) -{ - SKP_int ret = 0; + /********************************************/ + /* Set packet size */ + /********************************************/ + ret += SKP_Silk_setup_packetsize( psEnc, PacketSize_ms ); /* Check that settings are valid */ - if( LOW_COMPLEXITY_ONLY && Complexity != 0 ) { - ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING; - } - - /* Set encoding complexity */ - if( Complexity == 0 || LOW_COMPLEXITY_ONLY ) { - /* Low complexity */ - psEnc->sCmn.Complexity = 0; - psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_LC_MODE; - psEnc->pitchEstimationThreshold_Q16 = FIND_PITCH_CORRELATION_THRESHOLD_Q16_LC_MODE; - psEnc->sCmn.pitchEstimationLPCOrder = 8; - psEnc->sCmn.shapingLPCOrder = 8; - psEnc->sCmn.nStatesDelayedDecision = 1; - psEnc->sCmn.useInterpolatedNLSFs = 0; - psEnc->sCmn.LTPQuantLowComplexity = 1; - psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS_LC_MODE; - } else if( Complexity == 1 ) { - /* Medium complexity */ - psEnc->sCmn.Complexity = 1; - psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_MC_MODE; - psEnc->pitchEstimationThreshold_Q16 = FIND_PITCH_CORRELATION_THRESHOLD_Q16_MC_MODE; - psEnc->sCmn.pitchEstimationLPCOrder = 12; - psEnc->sCmn.shapingLPCOrder = 12; - psEnc->sCmn.nStatesDelayedDecision = 2; - psEnc->sCmn.useInterpolatedNLSFs = 0; - psEnc->sCmn.LTPQuantLowComplexity = 0; - psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS_MC_MODE; - } else if( Complexity == 2 ) { - /* High complexity */ - psEnc->sCmn.Complexity = 2; - psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_HC_MODE; - psEnc->pitchEstimationThreshold_Q16 = FIND_PITCH_CORRELATION_THRESHOLD_Q16_HC_MODE; - psEnc->sCmn.pitchEstimationLPCOrder = 16; - psEnc->sCmn.shapingLPCOrder = 16; - psEnc->sCmn.nStatesDelayedDecision = 4; - psEnc->sCmn.useInterpolatedNLSFs = 1; - psEnc->sCmn.LTPQuantLowComplexity = 0; - psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS; - } else { - ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING; - } - - /* Do not allow higher pitch estimation LPC order than predict LPC order */ - psEnc->sCmn.pitchEstimationLPCOrder = SKP_min_int( psEnc->sCmn.pitchEstimationLPCOrder, psEnc->sCmn.predictLPCOrder ); - - SKP_assert( psEnc->sCmn.pitchEstimationLPCOrder <= MAX_FIND_PITCH_LPC_ORDER ); - SKP_assert( psEnc->sCmn.shapingLPCOrder <= MAX_SHAPE_LPC_ORDER ); - SKP_assert( psEnc->sCmn.nStatesDelayedDecision <= MAX_DEL_DEC_STATES ); - + SKP_assert( ( psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr ) == psEnc->sCmn.frame_length ); + return( ret ); } @@ -490,16 +333,7 @@ SKP_INLINE SKP_int SKP_Silk_setup_rate( SKP_int32 frac_Q6; const SKP_int32 *rateTable; - TargetRate_bps = SKP_min( TargetRate_bps, 100000 ); - if( psEnc->sCmn.fs_kHz == 8 ) { - TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_NB_BPS ); - } else if( psEnc->sCmn.fs_kHz == 12 ) { - TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_MB_BPS ); - } else if( psEnc->sCmn.fs_kHz == 16 ) { - TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_WB_BPS ); - } else { - TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_SWB_BPS ); - } + /* Set bitrate/coding quality */ if( TargetRate_bps != psEnc->sCmn.TargetRate_bps ) { psEnc->sCmn.TargetRate_bps = TargetRate_bps; @@ -527,57 +361,53 @@ SKP_INLINE SKP_int SKP_Silk_setup_rate( } SKP_INLINE SKP_int SKP_Silk_setup_LBRR( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O */ - SKP_int INBandFEC_enabled /* I */ + SKP_Silk_encoder_state_FIX *psEnc /* I/O */ ) { - SKP_int ret = 0; - SKP_int32 LBRRRate_thres_bps; + SKP_int ret = SKP_SILK_NO_ERROR; #if USE_LBRR - if( INBandFEC_enabled < 0 || INBandFEC_enabled > 1 ) { + SKP_int32 LBRRRate_thres_bps; + + if( psEnc->sCmn.useInBandFEC < 0 || psEnc->sCmn.useInBandFEC > 1 ) { ret = SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING; } - /* Only change settings if first frame in packet */ - if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { - - psEnc->sCmn.LBRR_enabled = INBandFEC_enabled; - if( psEnc->sCmn.fs_kHz == 8 ) { - LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 9000; - } else if( psEnc->sCmn.fs_kHz == 12 ) { - LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 6000;; - } else if( psEnc->sCmn.fs_kHz == 16 ) { - LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 3000; - } else { - LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS; - } + psEnc->sCmn.LBRR_enabled = psEnc->sCmn.useInBandFEC; + if( psEnc->sCmn.fs_kHz == 8 ) { + LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 9000; + } else if( psEnc->sCmn.fs_kHz == 12 ) { + LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 6000;; + } else if( psEnc->sCmn.fs_kHz == 16 ) { + LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 3000; + } else { + LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS; + } - if( psEnc->sCmn.TargetRate_bps >= LBRRRate_thres_bps ) { - /* Set gain increase / rate reduction for LBRR usage */ - /* Coarsely tuned with PESQ for now. */ - /* Linear regression coefs G = 8 - 0.5 * loss */ - /* Meaning that at 16% loss main rate and redundant rate is the same, -> G = 0 */ - psEnc->sCmn.LBRR_GainIncreases = SKP_max_int( 8 - SKP_RSHIFT( psEnc->sCmn.PacketLoss_perc, 1 ), 0 ); - - /* Set main stream rate compensation */ - if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { - /* Tuned to give aprox same mean / weighted bitrate as no inband FEC */ - psEnc->inBandFEC_SNR_comp_Q8 = ( 6 << 8 ) - SKP_LSHIFT( psEnc->sCmn.LBRR_GainIncreases, 7 ); - } else { - psEnc->inBandFEC_SNR_comp_Q8 = 0; - psEnc->sCmn.LBRR_enabled = 0; - } + if( psEnc->sCmn.TargetRate_bps >= LBRRRate_thres_bps ) { + /* Set gain increase / rate reduction for LBRR usage */ + /* Coarsely tuned with PESQ for now. */ + /* Linear regression coefs G = 8 - 0.5 * loss */ + /* Meaning that at 16% loss main rate and redundant rate is the same, -> G = 0 */ + psEnc->sCmn.LBRR_GainIncreases = SKP_max_int( 8 - SKP_RSHIFT( psEnc->sCmn.PacketLoss_perc, 1 ), 0 ); + + /* Set main stream rate compensation */ + if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { + /* Tuned to give approx same mean / weighted bitrate as no inband FEC */ + psEnc->inBandFEC_SNR_comp_Q8 = SKP_FIX_CONST( 6.0f, 8 ) - SKP_LSHIFT( psEnc->sCmn.LBRR_GainIncreases, 7 ); } else { - psEnc->inBandFEC_SNR_comp_Q8 = 0; - psEnc->sCmn.LBRR_enabled = 0; + psEnc->inBandFEC_SNR_comp_Q8 = 0; + psEnc->sCmn.LBRR_enabled = 0; } + } else { + psEnc->inBandFEC_SNR_comp_Q8 = 0; + psEnc->sCmn.LBRR_enabled = 0; } #else - if( INBandFEC_enabled != 0 ) { + if( psEnc->sCmn.LBRR_enabled != 0 ) { ret = SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING; + psEnc->sCmn.LBRR_enabled = 0; } - psEnc->sCmn.LBRR_enabled = 0; #endif - return( ret ); -} \ No newline at end of file + return ret; +} diff --git a/src_FIX/SKP_Silk_corrMatrix_FIX.c b/src_FIX/SKP_Silk_corrMatrix_FIX.c index 8d41874f4015a9a5fb9622d17cc7657631a01856..2370a550c7fddd9b47d9cef8c2ba71e774a4700e 100644 --- a/src_FIX/SKP_Silk_corrMatrix_FIX.c +++ b/src_FIX/SKP_Silk_corrMatrix_FIX.c @@ -72,6 +72,7 @@ void SKP_Silk_corrMatrix_FIX( const SKP_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */ const SKP_int L, /* I Length of vectors */ const SKP_int order, /* I Max lag for correlation */ + const SKP_int head_room, /* I Desired headroom */ SKP_int32 *XX, /* O Pointer to X'*X correlation matrix [ order x order ]*/ SKP_int *rshifts /* I/O Right shifts of correlations */ ) @@ -82,9 +83,8 @@ void SKP_Silk_corrMatrix_FIX( /* Calculate energy to find shift used to fit in 32 bits */ SKP_Silk_sum_sqr_shift( &energy, &rshifts_local, x, L + order - 1 ); - /* Add shifts to get the wanted head room */ - - head_room_rshifts = SKP_max( LTP_CORRS_HEAD_ROOM - SKP_Silk_CLZ32( energy ), 0 ); + /* Add shifts to get the desired head room */ + head_room_rshifts = SKP_max( head_room - SKP_Silk_CLZ32( energy ), 0 ); energy = SKP_RSHIFT32( energy, head_room_rshifts ); rshifts_local += head_room_rshifts; diff --git a/src_FIX/SKP_Silk_encode_frame_FIX.c b/src_FIX/SKP_Silk_encode_frame_FIX.c index 7d42a4d31e23c1a0bff0c16ad2bfda3b9eb0b4b7..e4b726d1e110c841b8f34ce1221b089e2fb7968f 100644 --- a/src_FIX/SKP_Silk_encode_frame_FIX.c +++ b/src_FIX/SKP_Silk_encode_frame_FIX.c @@ -26,16 +26,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" +#include "SKP_Silk_tuning_parameters.h" /****************/ /* Encode frame */ /****************/ SKP_int SKP_Silk_encode_frame_FIX( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */ - SKP_uint8 *pCode, /* O Pointer to payload */ - SKP_int16 *pnBytesOut, /* I/O Pointer to number of payload bytes */ - /* input: max length; output: used */ - const SKP_int16 *pIn /* I Pointer to input speech frame */ + SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */ + SKP_int32 *pnBytesOut, /* I/O Number of payload bytes */ + /* input: max length; output: used */ + ec_enc *psRangeEnc, /* I/O compressor data structure */ + const SKP_int16 *pIn /* I Input speech frame */ ) { SKP_Silk_encoder_control_FIX sEncCtrl; @@ -44,29 +45,28 @@ SKP_int SKP_Silk_encode_frame_FIX( SKP_int16 xfw[ MAX_FRAME_LENGTH ]; SKP_int16 pIn_HP[ MAX_FRAME_LENGTH ]; SKP_int16 res_pitch[ 2 * MAX_FRAME_LENGTH + LA_PITCH_MAX ]; - SKP_int LBRR_idx, frame_terminator; + SKP_int LBRR_idx, frame_terminator, SNR_dB_Q7; const SKP_uint16 *FrameTermination_CDF; /* Low bitrate redundancy parameters */ SKP_uint8 LBRRpayload[ MAX_ARITHM_BYTES ]; - SKP_int16 nBytesLBRR; - ec_byte_buffer range_enc_celt_buf; - - sEncCtrl.sCmn.Seed = psEnc->sCmn.frameCounter++ & 3; + SKP_int32 nBytesLBRR; TIC(ENCODE_FRAME) + sEncCtrl.sCmn.Seed = psEnc->sCmn.frameCounter++ & 3; /**************************************************************/ /* Setup Input Pointers, and insert frame in input buffer */ /*************************************************************/ - x_frame = psEnc->x_buf + psEnc->sCmn.ltp_mem_length; /* start of frame to encode */ - res_pitch_frame = res_pitch + psEnc->sCmn.ltp_mem_length; /* start of pitch LPC residual frame */ + /* pointers aligned with start of frame to encode */ + x_frame = psEnc->x_buf + psEnc->sCmn.ltp_mem_length; /* start of frame to encode */ + res_pitch_frame = res_pitch + psEnc->sCmn.ltp_mem_length; /* start of pitch LPC residual frame */ /****************************/ /* Voice Activity Detection */ /****************************/ TIC(VAD) - ret = SKP_Silk_VAD_GetSA_Q8( &psEnc->sCmn.sVAD, &psEnc->speech_activity_Q8, + ret = SKP_Silk_VAD_GetSA_Q8( &psEnc->sCmn.sVAD, &psEnc->speech_activity_Q8, &SNR_dB_Q7, sEncCtrl.input_quality_bands_Q15, &sEncCtrl.input_tilt_Q15, pIn, psEnc->sCmn.frame_length, psEnc->sCmn.fs_kHz ); TOC(VAD) @@ -79,15 +79,15 @@ TIC(HP_IN) /* Variable high-pass filter */ SKP_Silk_HP_variable_cutoff_FIX( psEnc, &sEncCtrl, pIn_HP, pIn ); #else - SKP_memcpy( pIn_HP, pIn,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); + SKP_memcpy( pIn_HP, pIn, psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); #endif TOC(HP_IN) #if SWITCH_TRANSITION_FILTERING /* Ensure smooth bandwidth transitions */ - SKP_Silk_LP_variable_cutoff( &psEnc->sCmn.sLP, x_frame + psEnc->sCmn.la_shape, pIn_HP, psEnc->sCmn.frame_length ); + SKP_Silk_LP_variable_cutoff( &psEnc->sCmn.sLP, x_frame + LA_SHAPE_MS * psEnc->sCmn.fs_kHz, pIn_HP, psEnc->sCmn.frame_length ); #else - SKP_memcpy( x_frame + psEnc->sCmn.la_shape, pIn_HP,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); + SKP_memcpy( x_frame + LA_SHAPE_MS * psEnc->sCmn.fs_kHz, pIn_HP,psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); #endif /*****************************************/ @@ -124,7 +124,7 @@ TOC(FIND_PRED_COEF) TIC(PROCESS_GAINS) SKP_Silk_process_gains_FIX( psEnc, &sEncCtrl ); TOC(PROCESS_GAINS) - + psEnc->sCmn.sigtype[ psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.sigtype; psEnc->sCmn.QuantOffsetType[ psEnc->sCmn.nFramesInPayloadBuf ] = sEncCtrl.sCmn.QuantOffsetType; @@ -140,17 +140,17 @@ TOC(LBRR) /* Noise shaping quantization */ /*****************************************/ TIC(NSQ) - if( psEnc->sCmn.nStatesDelayedDecision > 1 ) { + if( psEnc->sCmn.nStatesDelayedDecision > 1 || psEnc->sCmn.warping_Q16 > 0 ) { SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sNSQ, xfw, - &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], sEncCtrl.sCmn.NLSFInterpCoef_Q2, + psEnc->sCmn.q, sEncCtrl.sCmn.NLSFInterpCoef_Q2, sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14, sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.Lambda_Q10, sEncCtrl.LTP_scale_Q14 ); } else { SKP_Silk_NSQ( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sNSQ, xfw, - &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], sEncCtrl.sCmn.NLSFInterpCoef_Q2, - sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14, - sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.Lambda_Q10, + psEnc->sCmn.q, sEncCtrl.sCmn.NLSFInterpCoef_Q2, + sEncCtrl.PredCoef_Q12[ 0 ], sEncCtrl.LTPCoef_Q14, sEncCtrl.AR2_Q13, sEncCtrl.HarmShapeGain_Q14, + sEncCtrl.Tilt_Q14, sEncCtrl.LF_shp_Q14, sEncCtrl.Gains_Q16, sEncCtrl.Lambda_Q10, sEncCtrl.LTP_scale_Q14 ); } TOC(NSQ) @@ -158,7 +158,7 @@ TOC(NSQ) /**************************************************/ /* Convert speech activity into VAD and DTX flags */ /**************************************************/ - if( psEnc->speech_activity_Q8 < SPEECH_ACTIVITY_DTX_THRES_Q8 ) { + if( psEnc->speech_activity_Q8 < SKP_FIX_CONST( SPEECH_ACTIVITY_DTX_THRES, 8 ) ) { psEnc->sCmn.vadFlag = NO_VOICE_ACTIVITY; psEnc->sCmn.noSpeechCounter++; if( psEnc->sCmn.noSpeechCounter > NO_SPEECH_FRAMES_BEFORE_DTX ) { @@ -175,13 +175,9 @@ TOC(NSQ) } /****************************************/ - /* Initialize arithmetic coder */ + /* Initialize range coder */ /****************************************/ if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { - ec_byte_writeinit_buffer( &range_enc_celt_buf, psEnc->sCmn.sRC.buffer, MAX_ARITHM_BYTES ); - ec_enc_init( &psEnc->sCmn.sRC.range_enc_celt_state, &range_enc_celt_buf ); - - SKP_Silk_range_enc_init( &psEnc->sCmn.sRC ); psEnc->sCmn.nBytesInPayloadBuf = 0; } @@ -189,62 +185,60 @@ TOC(NSQ) /* Encode Parameters */ /****************************************/ TIC(ENCODE_PARAMS) - SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &sEncCtrl.sCmn, &psEnc->sCmn.sRC ); - FrameTermination_CDF = SKP_Silk_FrameTermination_v4_CDF; + SKP_Silk_encode_parameters( &psEnc->sCmn, &sEncCtrl.sCmn, psRangeEnc ); + FrameTermination_CDF = SKP_Silk_FrameTermination_CDF; TOC(ENCODE_PARAMS) /****************************************/ /* Update Buffers and State */ /****************************************/ - /* Update Input buffer */ - SKP_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ], ( psEnc->sCmn.ltp_mem_length + psEnc->sCmn.la_shape ) * sizeof( SKP_int16 ) ); + /* Update input buffer */ + SKP_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ], + ( psEnc->sCmn.ltp_mem_length + LA_SHAPE_MS * psEnc->sCmn.fs_kHz ) * sizeof( SKP_int16 ) ); - /* parameters needed for next frame */ + /* Parameters needed for next frame */ psEnc->sCmn.prev_sigtype = sEncCtrl.sCmn.sigtype; - psEnc->sCmn.prevLag = sEncCtrl.sCmn.pitchL[ psEnc->sCmn.nb_subfr - 1 ]; + psEnc->sCmn.prevLag = sEncCtrl.sCmn.pitchL[ psEnc->sCmn.nb_subfr - 1 ]; psEnc->sCmn.first_frame_after_reset = 0; - if( psEnc->sCmn.sRC.error ) { - /* encoder returned error: clear payload buffer */ + if( 0 ) { //psEnc->sCmn.sRC.error ) { + /* Encoder returned error: clear payload buffer */ psEnc->sCmn.nFramesInPayloadBuf = 0; } else { psEnc->sCmn.nFramesInPayloadBuf++; } /****************************************/ - /* finalize payload and copy to output */ + /* Finalize payload and copy to output */ /****************************************/ if( psEnc->sCmn.nFramesInPayloadBuf * SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr >= psEnc->sCmn.PacketSize_ms ) { LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK; /* Check if FEC information should be added */ - frame_terminator = SKP_SILK_LAST_FRAME; - if( psEnc->sCmn.LBRR_buffer[ LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS1 ) { - frame_terminator = SKP_SILK_LBRR_VER1; - } - if( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS2 ) { - frame_terminator = SKP_SILK_LBRR_VER2; - LBRR_idx = psEnc->sCmn.oldest_LBRR_idx; - } + //frame_terminator = psEnc->sCmn.LBRR_buffer[ LBRR_idx ].usage; + frame_terminator = SKP_SILK_NO_LBRR; /* Add the frame termination info to stream */ - SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF ); + ec_encode_bin( psRangeEnc, FrameTermination_CDF[ frame_terminator ], + FrameTermination_CDF[ frame_terminator + 1 ], 16 ); /* Code excitation signal */ - for( i = 0; i <psEnc->sCmn.nFramesInPayloadBuf; i++ ) { - SKP_Silk_encode_pulses( &psEnc->sCmn.sRC, psEnc->sCmn.sigtype[ i ],psEnc->sCmn.QuantOffsetType[ i ], - &psEnc->sCmn.q[ i * psEnc->sCmn.frame_length],psEnc->sCmn.frame_length ); + for( i = 0; i < psEnc->sCmn.nFramesInPayloadBuf; i++ ) { + SKP_Silk_encode_pulses( psRangeEnc, psEnc->sCmn.sigtype[ i ], psEnc->sCmn.QuantOffsetType[ i ], + &psEnc->sCmn.q[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length ); } - /* payload length so far */ - SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC, &nBytes ); - /* check that there is enough space in external output buffer, and move data */ + /* Payload length so far */ + nBytes = SKP_RSHIFT( ec_enc_tell( psRangeEnc, 0 ) + 7, 3 ); + + /* Check that there is enough space in external output buffer, and move data */ if( *pnBytesOut >= nBytes ) { - SKP_int bits_in_stream, mask; - bits_in_stream = ec_enc_tell( &psEnc->sCmn.sRC.range_enc_celt_state, 0 ); - ec_enc_done( &psEnc->sCmn.sRC.range_enc_celt_state ); + //SKP_int bits_in_stream, mask; + //bits_in_stream = ec_enc_tell( psRangeEnc, 0 ); + //ec_enc_done( psRangeEnc ); +#if 0 /* Fill up any remaining bits in the last byte with 1s */ if( bits_in_stream & 7 ) { mask = SKP_RSHIFT( 0xFF, bits_in_stream & 7 ); @@ -253,7 +247,9 @@ TOC(ENCODE_PARAMS) } } SKP_memcpy( pCode, psEnc->sCmn.sRC.range_enc_celt_state.buf->buf, nBytes * sizeof( SKP_uint8 ) ); +#endif +#if 0 if( frame_terminator > SKP_SILK_MORE_FRAMES && *pnBytesOut >= nBytes + psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes ) { /* Get old packet and add to payload. */ @@ -262,57 +258,53 @@ TOC(ENCODE_PARAMS) psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes * sizeof( SKP_uint8 ) ); nBytes += psEnc->sCmn.LBRR_buffer[ LBRR_idx ].nBytes; } - +#endif *pnBytesOut = nBytes; - + /* Update FEC buffer */ SKP_memcpy( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].payload, LBRRpayload, nBytesLBRR * sizeof( SKP_uint8 ) ); psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].nBytes = nBytesLBRR; - /* This line tells describes how FEC should be used */ + /* The line below describes how FEC should be used */ psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage = sEncCtrl.sCmn.LBRR_usage; psEnc->sCmn.oldest_LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK; - /* Reset number of frames in payload buffer */ - psEnc->sCmn.nFramesInPayloadBuf = 0; } else { /* Not enough space: Payload will be discarded */ *pnBytesOut = 0; nBytes = 0; - psEnc->sCmn.nFramesInPayloadBuf = 0; ret = SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT; } + + /* Reset the number of frames in payload buffer */ + psEnc->sCmn.nFramesInPayloadBuf = 0; } else { - /* no payload for you this time */ + /* No payload this time */ *pnBytesOut = 0; - /* Encode that more frames follows */ - frame_terminator = SKP_SILK_MORE_FRAMES; - SKP_Silk_range_encoder( &psEnc->sCmn.sRC, frame_terminator, FrameTermination_CDF ); + /* Payload length so far */ + nBytes = SKP_RSHIFT( ec_enc_tell( psRangeEnc, 0 ) + 7, 3 ); - /* payload length so far */ - SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC, &nBytes ); - - /* Take into account the q signal that isnt in the bitstream yet */ - nBytes += SKP_Silk_pulses_to_bytes( &psEnc->sCmn, - &psEnc->sCmn.q[ (psEnc->sCmn.nFramesInPayloadBuf - 1) * psEnc->sCmn.frame_length ] ); + /* Take into account the q signal that isn't in the bitstream yet */ + nBytes += SKP_Silk_pulses_to_bytes( &psEnc->sCmn, + &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ] ); } /* Check for arithmetic coder errors */ - if( psEnc->sCmn.sRC.error ) { + if( 0 ) { //psEnc->sCmn.sRC.error ) { ret = SKP_SILK_ENC_INTERNAL_ERROR; } - /* simulate number of ms buffered in channel because of exceeding TargetRate */ + /* Simulate number of ms buffered in channel because of exceeding TargetRate */ SKP_assert( ( 8 * 1000 * ( (SKP_int64)nBytes - (SKP_int64)psEnc->sCmn.nBytesInPayloadBuf ) ) == SKP_SAT32( 8 * 1000 * ( (SKP_int64)nBytes - (SKP_int64)psEnc->sCmn.nBytesInPayloadBuf ) ) ); SKP_assert( psEnc->sCmn.TargetRate_bps > 0 ); - psEnc->BufferedInChannel_ms += SKP_DIV32( 8 * 1000 * ( nBytes -psEnc->sCmn.nBytesInPayloadBuf ),psEnc->sCmn.TargetRate_bps ); + psEnc->BufferedInChannel_ms += SKP_DIV32( 8 * 1000 * ( nBytes - psEnc->sCmn.nBytesInPayloadBuf ), psEnc->sCmn.TargetRate_bps ); psEnc->BufferedInChannel_ms -= SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ); psEnc->BufferedInChannel_ms = SKP_LIMIT_int( psEnc->BufferedInChannel_ms, 0, 100 ); psEnc->sCmn.nBytesInPayloadBuf = nBytes; - if( psEnc->speech_activity_Q8 > WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES_Q8 ) { + if( psEnc->speech_activity_Q8 > SKP_FIX_CONST( WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES, 8 ) ) { psEnc->sCmn.sSWBdetect.ActiveSpeech_ms = SKP_ADD_POS_SAT32( psEnc->sCmn.sSWBdetect.ActiveSpeech_ms, SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) ); } @@ -322,7 +314,7 @@ TOC(ENCODE_FRAME) { SKP_float tmp[ MAX_NB_SUBFR * LTP_ORDER ]; int i; - DEBUG_STORE_DATA( xf.dat, x_frame +psEnc->sCmn.la_shape, psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); + DEBUG_STORE_DATA( xf.dat, x_frame + LA_SHAPE_MS * psEnc->sCmn.fs_kHz, psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); DEBUG_STORE_DATA( xfw.dat, xfw, psEnc->sCmn.frame_length * sizeof( SKP_int16 ) ); // DEBUG_STORE_DATA( q.dat, &psEnc->sCmn.q[ ( psEnc->sCmn.nFramesInPayloadBuf - 1)*psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length * sizeof( SKP_int8 ) ); DEBUG_STORE_DATA( pitchL.dat, sEncCtrl.sCmn.pitchL, psEnc->sCmn.nb_subfr * sizeof( SKP_int ) ); @@ -368,6 +360,7 @@ TOC(ENCODE_FRAME) return( ret ); } +#if 0 //tmp /* Low BitRate Redundancy encoding functionality. Reuse all parameters but encode residual with lower bitrate */ void SKP_Silk_LBRR_encode_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk encoder state */ @@ -386,10 +379,10 @@ void SKP_Silk_LBRR_encode_FIX( /*******************************************/ /* Control use of inband LBRR */ /*******************************************/ - SKP_Silk_LBRR_ctrl_FIX( psEnc, psEncCtrl ); + SKP_Silk_LBRR_ctrl_FIX( psEnc, &psEncCtrl->sCmn ); if( psEnc->sCmn.LBRR_enabled ) { - /* Save original Gains */ + /* Save original gains */ SKP_memcpy( TempGainsIndices, psEncCtrl->sCmn.GainsIndices, MAX_NB_SUBFR * sizeof( SKP_int ) ); SKP_memcpy( TempGains_Q16, psEncCtrl->Gains_Q16, MAX_NB_SUBFR * sizeof( SKP_int32 ) ); @@ -411,37 +404,35 @@ void SKP_Silk_LBRR_encode_FIX( if( psEnc->sCmn.Complexity > 0 && psEnc->sCmn.TargetRate_bps > Rate_only_parameters ) { if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { - /* First frame in packet copy Everything */ + /* First frame in packet; copy everything */ SKP_memcpy( &psEnc->sNSQ_LBRR, &psEnc->sNSQ, sizeof( SKP_Silk_nsq_state ) ); - + psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex; /* Increase Gains to get target LBRR rate */ psEncCtrl->sCmn.GainsIndices[ 0 ] = psEncCtrl->sCmn.GainsIndices[ 0 ] + psEnc->sCmn.LBRR_GainIncreases; psEncCtrl->sCmn.GainsIndices[ 0 ] = SKP_LIMIT_int( psEncCtrl->sCmn.GainsIndices[ 0 ], 0, N_LEVELS_QGAIN - 1 ); } - /* Decode to get Gains in sync with decoder */ + /* Decode to get gains in sync with decoder */ /* Overwrite unquantized gains with quantized gains */ SKP_Silk_gains_dequant( psEncCtrl->Gains_Q16, psEncCtrl->sCmn.GainsIndices, &psEnc->sCmn.LBRRprevLastGainIndex, psEnc->sCmn.nFramesInPayloadBuf, psEnc->sCmn.nb_subfr ); + /*****************************************/ /* Noise shaping quantization */ /*****************************************/ - if( psEnc->sCmn.nStatesDelayedDecision > 1 ) { - SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &psEncCtrl->sCmn, - &psEnc->sNSQ_LBRR, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], + if( psEnc->sCmn.nStatesDelayedDecision > 1 || psEnc->sCmn.warping_Q16 > 0 ) { + SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ_LBRR, xfw, psEnc->sCmn.q_LBRR, psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->LTPCoef_Q14, psEncCtrl->AR2_Q13, psEncCtrl->HarmShapeGain_Q14, psEncCtrl->Tilt_Q14, psEncCtrl->LF_shp_Q14, psEncCtrl->Gains_Q16, psEncCtrl->Lambda_Q10, psEncCtrl->LTP_scale_Q14 ); } else { - SKP_Silk_NSQ( &psEnc->sCmn, &psEncCtrl->sCmn, - &psEnc->sNSQ_LBRR, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], + SKP_Silk_NSQ( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ_LBRR, xfw, psEnc->sCmn.q_LBRR, psEncCtrl->sCmn.NLSFInterpCoef_Q2, psEncCtrl->PredCoef_Q12[ 0 ], psEncCtrl->LTPCoef_Q14, psEncCtrl->AR2_Q13, psEncCtrl->HarmShapeGain_Q14, psEncCtrl->Tilt_Q14, psEncCtrl->LF_shp_Q14, psEncCtrl->Gains_Q16, psEncCtrl->Lambda_Q10, psEncCtrl->LTP_scale_Q14 ); } } else { - SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf *psEnc->sCmn.frame_length ], 0, - psEnc->sCmn.frame_length * sizeof( SKP_int ) ); + SKP_memset( psEnc->sCmn.q_LBRR, 0, psEnc->sCmn.frame_length * sizeof( SKP_int8 ) ); psEncCtrl->sCmn.LTP_scaleIndex = 0; } /****************************************/ @@ -458,17 +449,21 @@ void SKP_Silk_LBRR_encode_FIX( /****************************************/ /* Encode Parameters */ /****************************************/ - SKP_Silk_encode_parameters_v4( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sCmn.sRC_LBRR ); + SKP_Silk_encode_parameters( &psEnc->sCmn, &psEncCtrl->sCmn, + &psEnc->sCmn.sRC_LBRR ); + /****************************************/ + /* Encode Parameters */ + /****************************************/ if( psEnc->sCmn.sRC_LBRR.error ) { - /* encoder returned error: clear payload buffer */ + /* Encoder returned error: clear payload buffer */ nFramesInPayloadBuf = 0; } else { nFramesInPayloadBuf = psEnc->sCmn.nFramesInPayloadBuf + 1; } /****************************************/ - /* finalize payload and copy to output */ + /* Finalize payload and copy to output */ /****************************************/ if( SKP_SMULBB( nFramesInPayloadBuf, SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ) ) >= psEnc->sCmn.PacketSize_ms ) { @@ -476,8 +471,9 @@ void SKP_Silk_LBRR_encode_FIX( frame_terminator = SKP_SILK_LAST_FRAME; /* Add the frame termination info to stream */ - SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_v4_CDF ); - + ec_encode_bin( psRangeEnc_LBRR, FrameTermination_CDF[ frame_terminator ], + FrameTermination_CDF[ frame_terminator + 1 ], 16 ); + /*********************************************/ /* Encode quantization indices of excitation */ /*********************************************/ @@ -485,10 +481,11 @@ void SKP_Silk_LBRR_encode_FIX( SKP_Silk_encode_pulses( &psEnc->sCmn.sRC_LBRR, psEnc->sCmn.sigtype[ i ], psEnc->sCmn.QuantOffsetType[ i ], &psEnc->sCmn.q_LBRR[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length ); } - /* payload length so far */ - SKP_Silk_range_encoder_get_length( &psEnc->sCmn.sRC_LBRR, &nBytes ); - /* check that there is enough space in external output buffer, and move data */ + /* Payload length so far */ + nBytes = SKP_RSHIFT( ec_enc_tell( psRangeEnc_LBRR, 0 ) + 7, 3 ); + + /* Check that there is enough space in external output buffer and move data */ if( *pnBytesOut >= nBytes ) { SKP_int bits_in_stream, mask; bits_in_stream = ec_enc_tell( &psEnc->sCmn.sRC_LBRR.range_enc_celt_state, 0 ); @@ -502,28 +499,30 @@ void SKP_Silk_LBRR_encode_FIX( } } SKP_memcpy( pCode, psEnc->sCmn.sRC_LBRR.range_enc_celt_state.buf->buf, nBytes * sizeof( SKP_uint8 ) ); -//#endif + *pnBytesOut = nBytes; } else { - /* not enough space: payload will be discarded */ + /* Not enough space: payload will be discarded */ *pnBytesOut = 0; SKP_assert( 0 ); } } else { - /* no payload for you this time */ + /* No payload this time */ *pnBytesOut = 0; /* Encode that more frames follows */ frame_terminator = SKP_SILK_MORE_FRAMES; - SKP_Silk_range_encoder( &psEnc->sCmn.sRC_LBRR, frame_terminator, SKP_Silk_FrameTermination_v4_CDF ); + ec_encode_bin( psRangeEnc_LBRR, FrameTermination_CDF[ frame_terminator ], + FrameTermination_CDF[ frame_terminator + 1 ], 16 ); } /* Restore original Gains */ - SKP_memcpy( psEncCtrl->sCmn.GainsIndices, TempGainsIndices, MAX_NB_SUBFR * sizeof( SKP_int ) ); - SKP_memcpy( psEncCtrl->Gains_Q16, TempGains_Q16, MAX_NB_SUBFR * sizeof( SKP_int32 ) ); + SKP_memcpy( psEncCtrl->sCmn.GainsIndices, TempGainsIndices, psEnc->sCmn.nb_subfr * sizeof( SKP_int ) ); + SKP_memcpy( psEncCtrl->Gains_Q16, TempGains_Q16, psEnc->sCmn.nb_subfr * sizeof( SKP_int32 ) ); /* Restore LTP scale index and typeoffset */ psEncCtrl->sCmn.LTP_scaleIndex = LTP_scaleIndex; - psEnc->sCmn.typeOffsetPrev = typeOffset; + psEnc->sCmn.typeOffsetPrev = typeOffset; } } +#endif diff --git a/src_FIX/SKP_Silk_find_LPC_FIX.c b/src_FIX/SKP_Silk_find_LPC_FIX.c index fbf260834f422bcdf404c69333b00e8e9cc8a9f6..450ec1e58a7383ddf4c7e604d72bafee2860e9f2 100644 --- a/src_FIX/SKP_Silk_find_LPC_FIX.c +++ b/src_FIX/SKP_Silk_find_LPC_FIX.c @@ -26,6 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" +#include "SKP_Silk_tuning_parameters.h" /* Finds LPC vector from correlations, and converts to NLSF */ void SKP_Silk_find_LPC_FIX( @@ -41,7 +42,6 @@ void SKP_Silk_find_LPC_FIX( { SKP_int k; SKP_int32 a_Q16[ MAX_LPC_ORDER ]; - SKP_int isInterpLower, shift; SKP_int16 S[ MAX_LPC_ORDER ]; SKP_int32 res_nrg0, res_nrg1; @@ -58,13 +58,17 @@ void SKP_Silk_find_LPC_FIX( *interpIndex = 4; /* Burg AR analysis for the full frame */ - SKP_Silk_burg_modified( &res_nrg, &res_nrg_Q, a_Q16, x, subfr_length, nb_subfr, FIND_LPC_COND_FAC_Q32, LPC_order ); + SKP_Silk_burg_modified( &res_nrg, &res_nrg_Q, a_Q16, x, subfr_length, nb_subfr, SKP_FIX_CONST( FIND_LPC_COND_FAC, 32 ), LPC_order ); + + SKP_Silk_bwexpander_32( a_Q16, LPC_order, SKP_FIX_CONST( FIND_LPC_CHIRP, 16 ) ); if( useInterpolatedNLSFs == 1 && nb_subfr == MAX_NB_SUBFR ) { /* Optimal solution for last 10 ms */ SKP_Silk_burg_modified( &res_tmp_nrg, &res_tmp_nrg_Q, a_tmp_Q16, x + ( MAX_NB_SUBFR >> 1 ) * subfr_length, - subfr_length, ( MAX_NB_SUBFR >> 1 ), FIND_LPC_COND_FAC_Q32, LPC_order ); + subfr_length, ( MAX_NB_SUBFR >> 1 ), SKP_FIX_CONST( FIND_LPC_COND_FAC, 32 ), LPC_order ); + + SKP_Silk_bwexpander_32( a_tmp_Q16, LPC_order, SKP_FIX_CONST( FIND_LPC_CHIRP, 16 ) ); /* subtract residual energy here, as that's easier than adding it to the */ /* residual energy of the first 10 ms in each iteration of the search below */ diff --git a/src_FIX/SKP_Silk_find_LTP_FIX.c b/src_FIX/SKP_Silk_find_LTP_FIX.c index 2f0881e9ffaeee704a322c09f2a2d8954fe453a8..cddc29a41601c599063e8ac93110ed27975cf8f6 100644 --- a/src_FIX/SKP_Silk_find_LTP_FIX.c +++ b/src_FIX/SKP_Silk_find_LTP_FIX.c @@ -26,6 +26,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" +#include "SKP_Silk_tuning_parameters.h" + +/* Head room for correlations */ +#define LTP_CORRS_HEAD_ROOM 2 void SKP_Silk_fit_LTP( SKP_int32 LTP_coefs_Q16[ LTP_ORDER ], @@ -68,22 +72,24 @@ void SKP_Silk_find_LTP_FIX( lag_ptr = r_ptr - ( lag[ k ] + LTP_ORDER / 2 ); SKP_Silk_sum_sqr_shift( &rr[ k ], &rr_shifts, r_ptr, subfr_length ); /* rr[ k ] in Q( -rr_shifts ) */ + /* Assure headroom */ LZs = SKP_Silk_CLZ32( rr[k] ); if( LZs < LTP_CORRS_HEAD_ROOM ) { rr[ k ] = SKP_RSHIFT_ROUND( rr[ k ], LTP_CORRS_HEAD_ROOM - LZs ); - rr_shifts += (LTP_CORRS_HEAD_ROOM - LZs); + rr_shifts += ( LTP_CORRS_HEAD_ROOM - LZs ); } corr_rshifts[ k ] = rr_shifts; - SKP_Silk_corrMatrix_FIX( lag_ptr, subfr_length, LTP_ORDER, WLTP_ptr, &corr_rshifts[ k ] ); /* WLTP_fix_ptr in Q( -corr_rshifts[ k ] ) */ - /* The correlation vector always have lower max abs value than rr and/or RR so head room is assured */ - SKP_Silk_corrVector_FIX( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr, corr_rshifts[ k ] ); /* Rr_fix_ptr in Q( -corr_rshifts[ k ] ) */ + SKP_Silk_corrMatrix_FIX( lag_ptr, subfr_length, LTP_ORDER, LTP_CORRS_HEAD_ROOM, WLTP_ptr, &corr_rshifts[ k ] ); /* WLTP_fix_ptr in Q( -corr_rshifts[ k ] ) */ + + /* The correlation vector always has lower max abs value than rr and/or RR so head room is assured */ + SKP_Silk_corrVector_FIX( lag_ptr, r_ptr, subfr_length, LTP_ORDER, Rr, corr_rshifts[ k ] ); /* Rr_fix_ptr in Q( -corr_rshifts[ k ] ) */ if( corr_rshifts[ k ] > rr_shifts ) { rr[ k ] = SKP_RSHIFT( rr[ k ], corr_rshifts[ k ] - rr_shifts ); /* rr[ k ] in Q( -corr_rshifts[ k ] ) */ } SKP_assert( rr[ k ] >= 0 ); - regu = SKP_SMULWB( rr[ k ] + 1, LTP_DAMPING_Q16 ); + regu = SKP_SMULWB( rr[ k ] + 1, SKP_FIX_CONST( LTP_DAMPING, 16 ) ); SKP_Silk_regularize_correlations_FIX( WLTP_ptr, &rr[k], regu, LTP_ORDER ); SKP_Silk_solve_LDL_FIX( WLTP_ptr, LTP_ORDER, Rr, b_Q16 ); /* WLTP_fix_ptr and Rr_fix_ptr both in Q(-corr_rshifts[k]) */ @@ -96,12 +102,12 @@ void SKP_Silk_find_LTP_FIX( /* temp = Wght[ k ] / ( nrg[ k ] * Wght[ k ] + 0.01f * subfr_length ); */ extra_shifts = SKP_min_int( corr_rshifts[ k ], LTP_CORRS_HEAD_ROOM ); - denom32 = SKP_LSHIFT_SAT32( SKP_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 + extra_shifts ) + /* Q( -corr_rshifts[ k ] + extra_shifts ) */ - SKP_RSHIFT( SKP_SMULWB( subfr_length, 655 ), corr_rshifts[ k ] - extra_shifts ); /* Q( -corr_rshifts[ k ] + extra_shifts ) */ + denom32 = SKP_LSHIFT_SAT32( SKP_SMULWB( nrg[ k ], Wght_Q15[ k ] ), 1 + extra_shifts ) + /* Q( -corr_rshifts[ k ] + extra_shifts ) */ + SKP_RSHIFT( SKP_SMULWB( subfr_length, 655 ), corr_rshifts[ k ] - extra_shifts ); /* Q( -corr_rshifts[ k ] + extra_shifts ) */ denom32 = SKP_max( denom32, 1 ); - SKP_assert( ((SKP_int64)Wght_Q15[ k ] << 16 ) < SKP_int32_MAX ); /* Wght always < 0.5 in Q0 */ - temp32 = SKP_DIV32( SKP_LSHIFT( ( SKP_int32 )Wght_Q15[ k ], 16 ), denom32 ); /* Q( 15 + 16 + corr_rshifts[k] - extra_shifts ) */ - temp32 = SKP_RSHIFT( temp32, 31 + corr_rshifts[ k ] - extra_shifts - 26 ); /* Q26 */ + SKP_assert( ((SKP_int64)Wght_Q15[ k ] << 16 ) < SKP_int32_MAX ); /* Wght always < 0.5 in Q0 */ + temp32 = SKP_DIV32( SKP_LSHIFT( ( SKP_int32 )Wght_Q15[ k ], 16 ), denom32 ); /* Q( 15 + 16 + corr_rshifts[k] - extra_shifts ) */ + temp32 = SKP_RSHIFT( temp32, 31 + corr_rshifts[ k ] - extra_shifts - 26 ); /* Q26 */ /* Limit temp such that the below scaling never wraps around */ WLTP_max = 0; @@ -129,7 +135,7 @@ void SKP_Silk_find_LTP_FIX( maxRshifts = SKP_max_int( corr_rshifts[ k ], maxRshifts ); } - /* compute LTP coding gain */ + /* Compute LTP coding gain */ if( LTPredCodGain_Q7 != NULL ) { LPC_LTP_res_nrg = 0; LPC_res_nrg = 0; @@ -201,8 +207,8 @@ void SKP_Silk_find_LTP_FIX( g_Q26 = SKP_MUL( SKP_DIV32( - LTP_SMOOTHING_Q26, - SKP_RSHIFT( LTP_SMOOTHING_Q26, 10 ) + temp32 ), /* Q10 */ + SKP_FIX_CONST( LTP_SMOOTHING, 26 ), + SKP_RSHIFT( SKP_FIX_CONST( LTP_SMOOTHING, 26 ), 10 ) + temp32 ), /* Q10 */ SKP_LSHIFT_SAT32( SKP_SUB_SAT32( ( SKP_int32 )m_Q12, SKP_RSHIFT( d_Q14[ k ], 2 ) ), 4 ) ); /* Q16 */ temp32 = 0; diff --git a/src_FIX/SKP_Silk_find_pitch_lags_FIX.c b/src_FIX/SKP_Silk_find_pitch_lags_FIX.c index 3601b255aaa827bd48243802fbb323467cd7bdef..ab136565155db779e13e22314b23f03e2fc7656b 100644 --- a/src_FIX/SKP_Silk_find_pitch_lags_FIX.c +++ b/src_FIX/SKP_Silk_find_pitch_lags_FIX.c @@ -26,7 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" -#include "SKP_Silk_common_pitch_est_defines.h" +#include "SKP_Silk_tuning_parameters.h" /* Find pitch lags */ void SKP_Silk_find_pitch_lags_FIX( @@ -38,7 +38,7 @@ void SKP_Silk_find_pitch_lags_FIX( { SKP_Silk_predict_state_FIX *psPredSt = &psEnc->sPred; SKP_int buf_len, i, scale; - SKP_int32 thrhld_Q15; + SKP_int32 thrhld_Q15, res_nrg; const SKP_int16 *x_buf, *x_buf_ptr; SKP_int16 Wsig[ FIND_PITCH_LPC_WIN_MAX ], *Wsig_ptr; SKP_int32 auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ]; @@ -81,13 +81,16 @@ void SKP_Silk_find_pitch_lags_FIX( /* Calculate autocorrelation sequence */ SKP_Silk_autocorr( auto_corr, &scale, Wsig, psPredSt->pitch_LPC_win_length, psEnc->sCmn.pitchEstimationLPCOrder + 1 ); - /* add white noise, as fraction of energy */ - auto_corr[ 0 ] = SKP_SMLAWB( auto_corr[ 0 ], auto_corr[ 0 ], FIND_PITCH_WHITE_NOISE_FRACTION_Q16 ); + /* Add white noise, as fraction of energy */ + auto_corr[ 0 ] = SKP_SMLAWB( auto_corr[ 0 ], auto_corr[ 0 ], SKP_FIX_CONST( FIND_PITCH_WHITE_NOISE_FRACTION, 16 ) ); - /* calculate the reflection coefficients using schur */ - SKP_Silk_schur( rc_Q15, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder ); + /* Calculate the reflection coefficients using schur */ + res_nrg = SKP_Silk_schur( rc_Q15, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder ); - /* convert reflection coefficients to prediction coefficients */ + /* Prediction gain */ + psEncCtrl->predGain_Q16 = SKP_DIV32_varQ( auto_corr[ 0 ], SKP_max_int( res_nrg, 1 ), 16 ); + + /* Convert reflection coefficients to prediction coefficients */ SKP_Silk_k2a( A_Q24, rc_Q15, psEnc->sCmn.pitchEstimationLPCOrder ); /* Convert From 32 bit Q24 to 16 bit Q12 coefs */ @@ -96,7 +99,7 @@ void SKP_Silk_find_pitch_lags_FIX( } /* Do BWE */ - SKP_Silk_bwexpander( A_Q12, psEnc->sCmn.pitchEstimationLPCOrder, FIND_PITCH_BANDWITH_EXPANSION_Q16 ); + SKP_Silk_bwexpander( A_Q12, psEnc->sCmn.pitchEstimationLPCOrder, SKP_FIX_CONST( FIND_PITCH_BANDWITH_EXPANSION, 16 ) ); /*****************************************/ /* LPC analysis filtering */ @@ -106,11 +109,11 @@ void SKP_Silk_find_pitch_lags_FIX( SKP_memset( res, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_int16 ) ); /* Threshold for pitch estimator */ - thrhld_Q15 = ( 1 << 14 ); // 0.5f in Q15 - thrhld_Q15 = SKP_SMLABB( thrhld_Q15, -131, psEnc->sCmn.pitchEstimationLPCOrder ); - thrhld_Q15 = SKP_SMLABB( thrhld_Q15, -13, ( SKP_int16 )SKP_Silk_SQRT_APPROX( SKP_LSHIFT( ( SKP_int32 )psEnc->speech_activity_Q8, 8 ) ) ); - thrhld_Q15 = SKP_SMLABB( thrhld_Q15, 4587, psEnc->sCmn.prev_sigtype ); - thrhld_Q15 = SKP_MLA( thrhld_Q15, -31, SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) ); + thrhld_Q15 = SKP_FIX_CONST( 0.45, 15 ); + thrhld_Q15 = SKP_SMLABB( thrhld_Q15, SKP_FIX_CONST( -0.004, 15 ), psEnc->sCmn.pitchEstimationLPCOrder ); + thrhld_Q15 = SKP_SMLABB( thrhld_Q15, SKP_FIX_CONST( -0.1, 7 ), psEnc->speech_activity_Q8 ); + thrhld_Q15 = SKP_SMLABB( thrhld_Q15, SKP_FIX_CONST( 0.15, 15 ), psEnc->sCmn.prev_sigtype ); + thrhld_Q15 = SKP_SMLAWB( thrhld_Q15, SKP_FIX_CONST( -0.1, 16 ), psEncCtrl->input_tilt_Q15 ); thrhld_Q15 = SKP_SAT16( thrhld_Q15 ); /*****************************************/ @@ -118,7 +121,7 @@ void SKP_Silk_find_pitch_lags_FIX( /*****************************************/ TIC(pitch_analysis_core_FIX) psEncCtrl->sCmn.sigtype = SKP_Silk_pitch_analysis_core( res, psEncCtrl->sCmn.pitchL, &psEncCtrl->sCmn.lagIndex, - &psEncCtrl->sCmn.contourIndex, &psEnc->LTPCorr_Q15, psEnc->sCmn.prevLag, psEnc->pitchEstimationThreshold_Q16, + &psEncCtrl->sCmn.contourIndex, &psEnc->LTPCorr_Q15, psEnc->sCmn.prevLag, psEnc->sCmn.pitchEstimationThreshold_Q16, ( SKP_int16 )thrhld_Q15, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity, psEnc->sCmn.nb_subfr ); TOC(pitch_analysis_core_FIX) } diff --git a/src_FIX/SKP_Silk_find_pred_coefs_FIX.c b/src_FIX/SKP_Silk_find_pred_coefs_FIX.c index efb8ead269ce9f532ac6ee2dc2785374a0046d39..a82775c9c36ac1cf1fcdb189267d2678ce3d6edf 100644 --- a/src_FIX/SKP_Silk_find_pred_coefs_FIX.c +++ b/src_FIX/SKP_Silk_find_pred_coefs_FIX.c @@ -228,8 +228,8 @@ void SKP_Silk_find_pred_coefs_FIX( /* Weighted input energy */ in_ptr = &x_flp[ psEnc->sCmn.ltp_mem_length ]; - DEBUG_STORE_DATA( x_flp.dat, x_flp, psEnc->sCmn.frame_length * sizeof(SKP_float)); - DEBUG_STORE_DATA( in_ptr.dat, in_ptr, psEnc->sCmn.frame_length * sizeof(SKP_float)); + DEBUG_STORE_DATA( x_flp.dat, x_flp, psEnc->sCmn.frame_length * sizeof( SKP_float ) ); + DEBUG_STORE_DATA( in_ptr.dat, in_ptr, psEnc->sCmn.frame_length * sizeof( SKP_float ) ); in_nrg = 0.0f; for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) { in_nrg += (SKP_float)SKP_Silk_energy_FLP( in_ptr, psEnc->sCmn.subfr_length ) * Wght[ k ]; @@ -241,15 +241,15 @@ void SKP_Silk_find_pred_coefs_FIX( } DEBUG_STORE_DATA( uq_PredCoef.dat, uq_PredCoef[0], psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) ); - DEBUG_STORE_DATA( PredCoef.dat, PredCoef[0], psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) ); + DEBUG_STORE_DATA( PredCoef.dat, PredCoef[0], psEnc->sCmn.predictLPCOrder * sizeof( SKP_float ) ); LPC_res_nrg = 0.0f; LTP_res_nrg = 0.0f; qLPC_res_nrg = 0.0f; qLTP_res_nrg = 0.0f; - for( j = 0; j < psEnc->sCmn.nb_subfr; j+=2 ) { + for( j = 0; j < psEnc->sCmn.nb_subfr; j += 2 ) { /* Calculate LPC residual with unquantized LPC */ - SKP_Silk_LPC_analysis_filter_FLP( LPC_res, uq_PredCoef[ j >> 1 ], &x_flp[ j * psEnc->sCmn.subfr_length ], + SKP_Silk_LPC_analysis_filter_FLP( LPC_res, uq_PredCoef[ j >> 1 ], x_flp + j * psEnc->sCmn.subfr_length, ( psEnc->sCmn.ltp_mem_length + ( psEnc->sCmn.subfr_length << 1 ) ), psEnc->sCmn.predictLPCOrder ); /* Weighted energy */ @@ -273,7 +273,7 @@ void SKP_Silk_find_pred_coefs_FIX( } /* Calculate LPC residual with quantized LPC */ - SKP_Silk_LPC_analysis_filter_FLP( LPC_res, PredCoef[ j >> 1 ], &x_flp[ j * psEnc->sCmn.subfr_length ], + SKP_Silk_LPC_analysis_filter_FLP( LPC_res, PredCoef[ j >> 1 ], x_flp + j * psEnc->sCmn.subfr_length, ( psEnc->sCmn.ltp_mem_length + ( psEnc->sCmn.subfr_length << 1 ) ), psEnc->sCmn.predictLPCOrder ); /* Weighted energy */ @@ -300,8 +300,8 @@ void SKP_Silk_find_pred_coefs_FIX( SKP_memcpy( LTP_res, &LPC_res[ psEnc->sCmn.ltp_mem_length ], ( psEnc->sCmn.subfr_length << 1 ) * sizeof( SKP_float ) ); } /* Save residual */ - DEBUG_STORE_DATA( LPC_res.dat, &LPC_res[ psEnc->sCmn.ltp_mem_length ], (psEnc->sCmn.subfr_length << 1) * sizeof( SKP_float ) ); - DEBUG_STORE_DATA( res.dat, LTP_res, ( psEnc->sCmn.subfr_length << 1 ) * sizeof( SKP_float ) ); + DEBUG_STORE_DATA( LPC_res.dat, &LPC_res[ psEnc->sCmn.ltp_mem_length ], ( psEnc->sCmn.subfr_length << 1 ) * sizeof( SKP_float ) ); + DEBUG_STORE_DATA( res.dat, LTP_res, ( psEnc->sCmn.subfr_length << 1 ) * sizeof( SKP_float ) ); } if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { LPC_predCodGain = 3.0f * SKP_Silk_log2( in_nrg / LPC_res_nrg ); @@ -321,7 +321,7 @@ void SKP_Silk_find_pred_coefs_FIX( DEBUG_STORE_DATA( LPC_predCodGain.dat, &LPC_predCodGain, sizeof( SKP_float ) ); DEBUG_STORE_DATA( QLPC_predCodGain.dat, &QLPC_predCodGain, sizeof( SKP_float ) ); DEBUG_STORE_DATA( predCodGain.dat, &predCodGain, sizeof( SKP_float ) ); - DEBUG_STORE_DATA( ResNrg.dat, SF_resNrg, psEnc->sCmn.nb_subfr * sizeof( SKP_float ) ); + DEBUG_STORE_DATA( ResNrg.dat, SF_resNrg, psEnc->sCmn.nb_subfr * sizeof( SKP_float ) ); } #endif } @@ -425,18 +425,4 @@ double SKP_Silk_energy_FLP( SKP_assert( result >= 0.0 ); return result; } - -/* integer to floating-point conversion */ -SKP_INLINE void SKP_short2float_array( - SKP_float *out, - const SKP_int16 *in, - SKP_int32 length -) -{ - SKP_int32 k; - for (k = length-1; k >= 0; k--) { - out[k] = (SKP_float)in[k]; - } -} - #endif diff --git a/src_FIX/SKP_Silk_init_encoder_FIX.c b/src_FIX/SKP_Silk_init_encoder_FIX.c index 63c378f0fdda4b0116f3c7d7de9af3634d03df0a..01bfc5e0660e57742be1d6196a07006f6e9ab31f 100644 --- a/src_FIX/SKP_Silk_init_encoder_FIX.c +++ b/src_FIX/SKP_Silk_init_encoder_FIX.c @@ -37,9 +37,6 @@ SKP_int SKP_Silk_init_encoder_FIX( /* Clear the entire encoder state */ SKP_memset( psEnc, 0, sizeof( SKP_Silk_encoder_state_FIX ) ); - /* Initialize to 24 kHz API sampling, 24 kHz max internal sampling, 20 ms packets, 25 kbps, 0% packet loss, and init non-zero values */ - ret = SKP_Silk_control_encoder_FIX( psEnc, 24000, 24, 20, 25, 0, 0, 0, 10, 0 ); - #if HIGH_PASS_INPUT psEnc->variable_HP_smth1_Q15 = 200844; /* = SKP_Silk_log2(70)_Q0; */ psEnc->variable_HP_smth2_Q15 = 200844; /* = SKP_Silk_log2(70)_Q0; */ @@ -47,8 +44,6 @@ SKP_int SKP_Silk_init_encoder_FIX( /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */ psEnc->sCmn.first_frame_after_reset = 1; - psEnc->sCmn.fs_kHz_changed = 0; - psEnc->sCmn.LBRR_enabled = 0; /* Initialize Silk VAD */ ret += SKP_Silk_VAD_Init( &psEnc->sCmn.sVAD ); diff --git a/src_FIX/SKP_Silk_main_FIX.h b/src_FIX/SKP_Silk_main_FIX.h index 6d7d0ddc359b9fee8f4e538a7314993ba121e1e8..c4573e17d9edd37c6e5271205c7f1bb09afabfee 100644 --- a/src_FIX/SKP_Silk_main_FIX.h +++ b/src_FIX/SKP_Silk_main_FIX.h @@ -28,11 +28,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef SKP_SILK_MAIN_FIX_H #define SKP_SILK_MAIN_FIX_H -#include <stdlib.h> #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_structs_FIX.h" #include "SKP_Silk_main.h" -#include "SKP_Silk_define_FIX.h" #include "SKP_Silk_PLC.h" #include "SKP_debug.h" #include "entenc.h" @@ -48,49 +46,44 @@ extern "C" /* Encoder Functions */ /*********************/ -/* Initializes the Silk encoder state */ -SKP_int SKP_Silk_init_encoder_FIX( - SKP_Silk_encoder_state_FIX *psEnc /* I/O Pointer to Silk FIX encoder state */ -); - -/* Control the Silk encoder */ -SKP_int SKP_Silk_control_encoder_FIX( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk encoder state */ - const SKP_int32 API_fs_Hz, /* I External (API) sampling rate (Hz) */ - const SKP_int max_internal_fs_kHz,/* I Maximum internal sampling rate (kHz) */ - const SKP_int PacketSize_ms, /* I Packet length (ms) */ - SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) (used if SNR_dB == 0) */ - const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ - const SKP_int INBandFEC_enabled, /* I Enable (1) / disable (0) inband FEC */ - const SKP_int DTX_enabled, /* I Enable / disable DTX */ - const SKP_int InputFramesize_ms, /* I Inputframe in ms */ - const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ +/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */ +void SKP_Silk_HP_variable_cutoff_FIX( + SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state */ + SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control */ + SKP_int16 *out, /* O high-pass filtered output signal */ + const SKP_int16 *in /* I input signal */ ); /* Encoder main function */ SKP_int SKP_Silk_encode_frame_FIX( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */ - SKP_uint8 *pCode, /* O Pointer to payload */ - SKP_int16 *pnBytesOut, /* I/O Pointer to number of payload bytes; */ - /* input: max length; output: used */ - const SKP_int16 *pIn /* I Pointer to input speech frame */ + SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */ + SKP_int32 *pnBytesOut, /* I/O Pointer to number of payload bytes; */ + /* input: max length; output: used */ + ec_enc *psRangeEnc, /* I/O compressor data structure */ + const SKP_int16 *pIn /* I Pointer to input speech frame */ ); -/* Low BitRate Redundancy encoding functionality. Reuse all parameters but encode with lower bitrate */ +/* Low Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode with lower bitrate */ void SKP_Silk_LBRR_encode_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk FIX encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Pointer to Silk FIX encoder control struct */ SKP_uint8 *pCode, /* O Pointer to payload */ - SKP_int16 *pnBytesOut, /* I/O Pointer to number of payload bytes */ + SKP_int32 *pnBytesOut, /* I/O Pointer to number of payload bytes */ SKP_int16 xfw[] /* I Input signal */ ); -/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */ -void SKP_Silk_HP_variable_cutoff_FIX( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state */ - SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control */ - SKP_int16 *out, /* O high-pass filtered output signal */ - const SKP_int16 *in /* I input signal */ +/* Initializes the Silk encoder state */ +SKP_int SKP_Silk_init_encoder_FIX( + SKP_Silk_encoder_state_FIX *psEnc /* I/O Pointer to Silk FIX encoder state */ +); + +/* Control the Silk encoder */ +SKP_int SKP_Silk_control_encoder_FIX( + SKP_Silk_encoder_state_FIX *psEnc, /* I/O Pointer to Silk encoder state */ + const SKP_int PacketSize_ms, /* I Packet length (ms) */ + const SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) */ + const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ + const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ ); /****************/ @@ -103,9 +96,10 @@ void SKP_Silk_prefilter_FIX( const SKP_int16 x[] /* I Speech signal */ ); -/**************************************************************/ +/**************************/ +/* Noise shaping analysis */ +/**************************/ /* Compute noise shaping coefficients and initial gain values */ -/**************************************************************/ void SKP_Silk_noise_shape_analysis_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state FIX */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O Encoder control FIX */ @@ -118,21 +112,15 @@ void SKP_Silk_warped_autocorrelation_FIX( SKP_int32 *corr, /* O Result [order + 1] */ SKP_int *scale, /* O Scaling of the correlation vector */ const SKP_int16 *input, /* I Input data to correlate */ - const SKP_int16 warping_Q16, /* I Warping coefficient */ + const SKP_int warping_Q16, /* I Warping coefficient */ const SKP_int length, /* I Length of input */ const SKP_int order /* I Correlation order (even) */ ); -/* Processing of gains */ -void SKP_Silk_process_gains_FIX( - SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state */ - SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O Encoder control */ -); - /* Control low bitrate redundancy usage */ void SKP_Silk_LBRR_ctrl_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ - SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O encoder control */ + SKP_Silk_encoder_control *psEncCtrlC /* I/O encoder control */ ); /* Calculation of LTP state scaling */ @@ -144,7 +132,6 @@ void SKP_Silk_LTP_scale_ctrl_FIX( /**********************************************/ /* Prediction Analysis */ /**********************************************/ - /* Find pitch lags */ void SKP_Silk_find_pitch_lags_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ @@ -153,12 +140,14 @@ void SKP_Silk_find_pitch_lags_FIX( const SKP_int16 x[] /* I Speech signal */ ); +/* Find LPC and LTP coefficients */ void SKP_Silk_find_pred_coefs_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ SKP_Silk_encoder_control_FIX *psEncCtrl, /* I/O encoder control */ const SKP_int16 res_pitch[] /* I Residual from pitch analysis */ ); +/* LPC analysis */ void SKP_Silk_find_LPC_FIX( SKP_int NLSF_Q15[], /* O NLSFs */ SKP_int *interpIndex, /* O NLSF interpolation index, only used for NLSF interpolation */ @@ -170,18 +159,7 @@ void SKP_Silk_find_LPC_FIX( const SKP_int nb_subfr /* I: Number of subframes */ ); -void SKP_Silk_LTP_analysis_filter_FIX( - SKP_int16 *LTP_res, /* O: LTP residual signal of length MAX_NB_SUBFR * ( pre_length + subfr_length ) */ - const SKP_int16 *x, /* I: Pointer to input signal with at least max( pitchL ) preceeding samples */ - const SKP_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],/* I: LTP_ORDER LTP coefficients for each MAX_NB_SUBFR subframe */ - const SKP_int pitchL[ MAX_NB_SUBFR ], /* I: Pitch lag, one for each subframe */ - const SKP_int32 invGains_Q16[ MAX_NB_SUBFR ], /* I: Inverse quantization gains, one for each subframe */ - const SKP_int subfr_length, /* I: Length of each subframe */ - const SKP_int nb_subfr, /* I: Number of subframes */ - const SKP_int pre_length /* I: Length of the preceeding samples starting at &x[0] for each subframe */ -); - -/* Finds LTP vector from correlations */ +/* LTP analysis */ void SKP_Silk_find_LTP_FIX( SKP_int16 b_Q14[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */ SKP_int32 WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */ @@ -195,6 +173,30 @@ void SKP_Silk_find_LTP_FIX( SKP_int corr_rshifts[ MAX_NB_SUBFR ] /* O right shifts applied to correlations */ ); +void SKP_Silk_LTP_analysis_filter_FIX( + SKP_int16 *LTP_res, /* O: LTP residual signal of length MAX_NB_SUBFR * ( pre_length + subfr_length ) */ + const SKP_int16 *x, /* I: Pointer to input signal with at least max( pitchL ) preceeding samples */ + const SKP_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ],/* I: LTP_ORDER LTP coefficients for each MAX_NB_SUBFR subframe */ + const SKP_int pitchL[ MAX_NB_SUBFR ], /* I: Pitch lag, one for each subframe */ + const SKP_int32 invGains_Q16[ MAX_NB_SUBFR ], /* I: Inverse quantization gains, one for each subframe */ + const SKP_int subfr_length, /* I: Length of each subframe */ + const SKP_int nb_subfr, /* I: Number of subframes */ + const SKP_int pre_length /* I: Length of the preceeding samples starting at &x[0] for each subframe */ +); + +/* Calculates residual energies of input subframes where all subframes have LPC_order */ +/* of preceeding samples */ +void SKP_Silk_residual_energy_FIX( + SKP_int32 nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */ + SKP_int nrgsQ[ MAX_NB_SUBFR ], /* O Q value per subframe */ + const SKP_int16 x[], /* I Input signal */ + const SKP_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */ + const SKP_int32 gains[ MAX_NB_SUBFR ], /* I Quantization gains */ + const SKP_int subfr_length, /* I Subframe length */ + const SKP_int nb_subfr, /* I Number of subframes */ + const SKP_int LPC_order /* I LPC order */ +); + /* LTP tap quantizer */ void SKP_Silk_quant_LTP_gains_FIX( SKP_int16 B_Q14[], /* I/O (un)quantized LTP gains */ @@ -209,7 +211,6 @@ void SKP_Silk_quant_LTP_gains_FIX( /******************/ /* NLSF Quantizer */ /******************/ - /* Limit, stabilize, convert and quantize NLSFs. */ void SKP_Silk_process_NLSFs_FIX( SKP_Silk_encoder_state_FIX *psEnc, /* I/O encoder state */ @@ -217,7 +218,7 @@ void SKP_Silk_process_NLSFs_FIX( SKP_int *pNLSF_Q15 /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */ ); -/* LSF vector encoder */ +/* NLSF vector encoder */ void SKP_Silk_NLSF_MSVQ_encode_FIX( SKP_int *NLSFIndices, /* O Codebook path vector [ CB_STAGES ] */ SKP_int *pNLSF_Q15, /* I/O Quantized NLSF vector [ LPC_ORDER ] */ @@ -248,12 +249,22 @@ void SKP_Silk_NLSF_VQ_sum_error_FIX( SKP_int32 *err_Q20, /* O Weighted quantization errors [N*K] */ const SKP_int *in_Q15, /* I Input vectors to be quantized [N*LPC_order] */ const SKP_int *w_Q6, /* I Weighting vectors [N*LPC_order] */ - const SKP_int16 *pCB_Q15, /* I Codebook vectors [K*LPC_order] */ + const SKP_int8 *pCB_Q9, /* I Codebook vectors [K*LPC_order] */ const SKP_int N, /* I Number of input vectors */ const SKP_int K, /* I Number of codebook vectors */ const SKP_int LPC_order /* I Number of LPCs */ ); +/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */ +SKP_int32 SKP_Silk_residual_energy16_covar_FIX( + const SKP_int16 *c, /* I Prediction vector */ + const SKP_int32 *wXX, /* I Correlation matrix */ + const SKP_int32 *wXx, /* I Correlation vector */ + SKP_int32 wxx, /* I Signal energy */ + SKP_int D, /* I Dimension */ + SKP_int cQ /* I Q value for c vector 0 - 15 */ +); + /* Entropy constrained MATRIX-weighted VQ, for a single input data vector */ void SKP_Silk_VQ_WMat_EC_FIX( SKP_int *ind, /* O index of best codebook vector */ @@ -266,15 +277,21 @@ void SKP_Silk_VQ_WMat_EC_FIX( SKP_int L /* I number of vectors in codebook */ ); +/* Processing of gains */ +void SKP_Silk_process_gains_FIX( + SKP_Silk_encoder_state_FIX *psEnc, /* I/O Encoder state */ + SKP_Silk_encoder_control_FIX *psEncCtrl /* I/O Encoder control */ +); + /******************/ /* Linear Algebra */ /******************/ - /* Calculates correlation matrix X'*X */ void SKP_Silk_corrMatrix_FIX( const SKP_int16 *x, /* I x vector [L + order - 1] used to form data matrix X */ const SKP_int L, /* I Length of vectors */ const SKP_int order, /* I Max lag for correlation */ + const SKP_int head_room, /* I Desired headroom */ SKP_int32 *XX, /* O Pointer to X'*X correlation matrix [ order x order ]*/ SKP_int *rshifts /* I/O Right shifts of correlations */ ); @@ -305,29 +322,6 @@ void SKP_Silk_solve_LDL_FIX( SKP_int32 *x_Q16 /* O Pointer to x solution vector */ ); -/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */ -SKP_int32 SKP_Silk_residual_energy16_covar_FIX( - const SKP_int16 *c, /* I Prediction vector */ - const SKP_int32 *wXX, /* I Correlation matrix */ - const SKP_int32 *wXx, /* I Correlation vector */ - SKP_int32 wxx, /* I Signal energy */ - SKP_int D, /* I Dimension */ - SKP_int cQ /* I Q value for c vector 0 - 15 */ -); - -/* Calculates residual energies of input subframes where all subframes have LPC_order */ -/* of preceeding samples */ -void SKP_Silk_residual_energy_FIX( - SKP_int32 nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */ - SKP_int nrgsQ[ MAX_NB_SUBFR ], /* O Q value per subframe */ - const SKP_int16 x[], /* I Input signal */ - const SKP_int16 a_Q12[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */ - const SKP_int32 gains[ MAX_NB_SUBFR ], /* I Quantization gains */ - const SKP_int subfr_length, /* I Subframe length */ - const SKP_int nb_subfr, /* I Number of subframes */ - const SKP_int LPC_order /* I LPC order */ -); - #ifndef FORCE_CPP_BUILD #ifdef __cplusplus } diff --git a/src_FIX/SKP_Silk_noise_shape_analysis_FIX.c b/src_FIX/SKP_Silk_noise_shape_analysis_FIX.c index a695d1dd2cdda519ebea96dee67f0d3af6bda631..05cbd2baf45f465f4988d881de46a484e212b922 100644 --- a/src_FIX/SKP_Silk_noise_shape_analysis_FIX.c +++ b/src_FIX/SKP_Silk_noise_shape_analysis_FIX.c @@ -26,7 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" -#include "SKP_Silk_perceptual_parameters_FIX.h" +#include "SKP_Silk_tuning_parameters.h" /* Compute gain to make warped filter coefficients have a zero mean log frequency response on a */ /* non-warped frequency scale. (So that it can be implemented with a minimum-phase monic filter.) */ @@ -43,62 +43,66 @@ SKP_INLINE SKP_int32 warped_gain( // gain in Q16 for( i = order - 2; i >= 0; i-- ) { gain_Q24 = SKP_SMLAWB( coefs_Q24[ i ], gain_Q24, lambda_Q16 ); } - gain_Q24 = SKP_SMLAWB( 1 << 24, gain_Q24, -lambda_Q16 ); + gain_Q24 = SKP_SMLAWB( SKP_FIX_CONST( 1.0, 24 ), gain_Q24, -lambda_Q16 ); return SKP_INVERSE32_varQ( gain_Q24, 40 ); } -/* Convert warped filter coefficients to monic pseudo-warped coefficients */ -SKP_INLINE void warped_true2monic_coefs( - SKP_int32 *coefs_Q24, +/* Convert warped filter coefficients to monic pseudo-warped coefficients and limit maximum */ +/* amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */ +SKP_INLINE void limit_warped_coefs( + SKP_int32 *coefs_syn_Q24, + SKP_int32 *coefs_ana_Q24, SKP_int lambda_Q16, - SKP_int order + SKP_int32 limit_Q24, + SKP_int order ) { - SKP_int i; - SKP_int32 gain_Q16, nom_Q16, den_Q24; + SKP_int i, iter, ind = 0; + SKP_int32 tmp, maxabs_Q24, chirp_Q16, gain_syn_Q16, gain_ana_Q16; + SKP_int32 nom_Q16, den_Q24; + /* Convert to monic coefficients */ lambda_Q16 = -lambda_Q16; for( i = order - 1; i > 0; i-- ) { - coefs_Q24[ i - 1 ] = SKP_SMLAWB( coefs_Q24[ i - 1 ], coefs_Q24[ i ], lambda_Q16 ); + coefs_syn_Q24[ i - 1 ] = SKP_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 ); + coefs_ana_Q24[ i - 1 ] = SKP_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 ); } - nom_Q16 = SKP_SMLAWB( 1 << 16, lambda_Q16, -lambda_Q16 ); - den_Q24 = SKP_SMLAWB( 1 << 24, coefs_Q24[ 0 ], -lambda_Q16 ); - gain_Q16 = SKP_DIV32_varQ( nom_Q16, den_Q24, 24 ); + lambda_Q16 = -lambda_Q16; + nom_Q16 = SKP_SMLAWB( SKP_FIX_CONST( 1.0, 16 ), -lambda_Q16, lambda_Q16 ); + den_Q24 = SKP_SMLAWB( SKP_FIX_CONST( 1.0, 24 ), coefs_syn_Q24[ 0 ], lambda_Q16 ); + gain_syn_Q16 = SKP_DIV32_varQ( nom_Q16, den_Q24, 24 ); + den_Q24 = SKP_SMLAWB( SKP_FIX_CONST( 1.0, 24 ), coefs_ana_Q24[ 0 ], lambda_Q16 ); + gain_ana_Q16 = SKP_DIV32_varQ( nom_Q16, den_Q24, 24 ); for( i = 0; i < order; i++ ) { - coefs_Q24[ i ] = SKP_SMULWW( gain_Q16, coefs_Q24[ i ] ); + coefs_syn_Q24[ i ] = SKP_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] ); + coefs_ana_Q24[ i ] = SKP_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] ); } -} - -/* Limit max amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */ -SKP_INLINE void limit_warped_coefs( - SKP_int32 *coefs_syn_Q24, - SKP_int32 *coefs_ana_Q24, - SKP_int lambda_Q16, - SKP_int32 limit_Q24, - SKP_int order -) { - SKP_int i, iter, ind; - SKP_int32 tmp, maxabs_Q24, chirp_Q16; for( iter = 0; iter < 10; iter++ ) { /* Find maximum absolute value */ - ind = 1; - maxabs_Q24 = SKP_abs( coefs_syn_Q24[ ind ] ); - for( i = 2; i < order - 1; i++ ) { - tmp = SKP_abs( coefs_syn_Q24[ i ] ); + maxabs_Q24 = -1; + for( i = 0; i < order; i++ ) { + tmp = SKP_max( SKP_abs_int32( coefs_syn_Q24[ i ] ), SKP_abs_int32( coefs_ana_Q24[ i ] ) ); if( tmp > maxabs_Q24 ) { maxabs_Q24 = tmp; ind = i; } } if( maxabs_Q24 <= limit_Q24 ) { + /* Coefficients are within range - done */ return; } - /* Convert to true warped coefficients */ + /* Convert back to true warped coefficients */ for( i = 1; i < order; i++ ) { coefs_syn_Q24[ i - 1 ] = SKP_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 ); coefs_ana_Q24[ i - 1 ] = SKP_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 ); } + gain_syn_Q16 = SKP_INVERSE32_varQ( gain_syn_Q16, 32 ); + gain_ana_Q16 = SKP_INVERSE32_varQ( gain_ana_Q16, 32 ); + for( i = 0; i < order; i++ ) { + coefs_syn_Q24[ i ] = SKP_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] ); + coefs_ana_Q24[ i ] = SKP_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] ); + } /* Apply bandwidth expansion */ chirp_Q16 = SKP_FIX_CONST( 0.99, 16 ) - SKP_DIV32_varQ( @@ -107,14 +111,24 @@ SKP_INLINE void limit_warped_coefs( SKP_Silk_bwexpander_32( coefs_syn_Q24, order, chirp_Q16 ); SKP_Silk_bwexpander_32( coefs_ana_Q24, order, chirp_Q16 ); - /* Convert back to monic warped coefficients */ + /* Convert to monic warped coefficients */ lambda_Q16 = -lambda_Q16; for( i = order - 1; i > 0; i-- ) { coefs_syn_Q24[ i - 1 ] = SKP_SMLAWB( coefs_syn_Q24[ i - 1 ], coefs_syn_Q24[ i ], lambda_Q16 ); coefs_ana_Q24[ i - 1 ] = SKP_SMLAWB( coefs_ana_Q24[ i - 1 ], coefs_ana_Q24[ i ], lambda_Q16 ); } lambda_Q16 = -lambda_Q16; + nom_Q16 = SKP_SMLAWB( SKP_FIX_CONST( 1.0, 16 ), -lambda_Q16, lambda_Q16 ); + den_Q24 = SKP_SMLAWB( SKP_FIX_CONST( 1.0, 24 ), coefs_syn_Q24[ 0 ], lambda_Q16 ); + gain_syn_Q16 = SKP_DIV32_varQ( nom_Q16, den_Q24, 24 ); + den_Q24 = SKP_SMLAWB( SKP_FIX_CONST( 1.0, 24 ), coefs_ana_Q24[ 0 ], lambda_Q16 ); + gain_ana_Q16 = SKP_DIV32_varQ( nom_Q16, den_Q24, 24 ); + for( i = 0; i < order; i++ ) { + coefs_syn_Q24[ i ] = SKP_SMULWW( gain_syn_Q16, coefs_syn_Q24[ i ] ); + coefs_ana_Q24[ i ] = SKP_SMULWW( gain_ana_Q16, coefs_ana_Q24[ i ] ); + } } + SKP_assert( 0 ); } /**************************************************************/ @@ -128,7 +142,7 @@ void SKP_Silk_noise_shape_analysis_FIX( ) { SKP_Silk_shape_state_FIX *psShapeSt = &psEnc->sShape; - SKP_int k, i, nSamples, Qnrg, b_Q14, scale = 0, sz; + SKP_int k, i, nSamples, Qnrg, b_Q14, warping_Q16, scale = 0; SKP_int32 SNR_adj_dB_Q7, HarmBoost_Q16, HarmShapeGain_Q16, Tilt_Q16, tmp32; SKP_int32 nrg, pre_nrg_Q30, log_energy_Q7, log_energy_prev_Q7, energy_variation_Q7; SKP_int32 delta_Q16, BWExp1_Q16, BWExp2_Q16, gain_mult_Q16, gain_add_Q16, strength_Q16, b_Q8; @@ -142,7 +156,7 @@ void SKP_Silk_noise_shape_analysis_FIX( SKP_int32 sqrt_nrg[ MAX_NB_SUBFR ], Qnrg_vec[ MAX_NB_SUBFR ]; /* Point to start of first LPC analysis block */ - x_ptr = x + psEnc->sCmn.la_shape - SKP_SMULBB( SHAPE_LPC_WIN_MS, psEnc->sCmn.fs_kHz ) + psEnc->sCmn.subfr_length; + x_ptr = x - psEnc->sCmn.la_shape; /****************/ /* CONTROL SNR */ @@ -151,11 +165,12 @@ void SKP_Silk_noise_shape_analysis_FIX( psEncCtrl->current_SNR_dB_Q7 = psEnc->SNR_dB_Q7; #else /* Reduce SNR_dB values if recent bitstream has exceeded TargetRate */ - psEncCtrl->current_SNR_dB_Q7 = psEnc->SNR_dB_Q7 - SKP_SMULWB( SKP_LSHIFT( ( SKP_int32 )psEnc->BufferedInChannel_ms, 7 ), 3277 ); + psEncCtrl->current_SNR_dB_Q7 = psEnc->SNR_dB_Q7 - SKP_SMULWB( SKP_LSHIFT( ( SKP_int32 )psEnc->BufferedInChannel_ms, 7 ), + SKP_FIX_CONST( 0.05, 16 ) ); #endif /* Reduce SNR_dB if inband FEC used */ - if( psEnc->speech_activity_Q8 > LBRR_SPEECH_ACTIVITY_THRES_Q8 ) { + if( psEnc->speech_activity_Q8 > SKP_FIX_CONST( LBRR_SPEECH_ACTIVITY_THRES, 8 ) ) { psEncCtrl->current_SNR_dB_Q7 -= SKP_RSHIFT( psEnc->inBandFEC_SNR_comp_Q8, 1 ); } @@ -167,23 +182,24 @@ void SKP_Silk_noise_shape_analysis_FIX( + psEncCtrl->input_quality_bands_Q15[ 1 ], 2 ); /* Coding quality level, between 0.0_Q0 and 1.0_Q0, but in Q14 */ - psEncCtrl->coding_quality_Q14 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->current_SNR_dB_Q7 - ( 17 << 7 ), 4 ) ), 1 ); + psEncCtrl->coding_quality_Q14 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->current_SNR_dB_Q7 - + SKP_FIX_CONST( 18.0, 7 ), 4 ) ), 1 ); /* Reduce coding SNR during low speech activity */ - b_Q8 = ( 1 << 8 ) - psEnc->speech_activity_Q8; + b_Q8 = SKP_FIX_CONST( 1.0, 8 ) - psEnc->speech_activity_Q8; b_Q8 = SKP_SMULWB( SKP_LSHIFT( b_Q8, 8 ), b_Q8 ); SNR_adj_dB_Q7 = SKP_SMLAWB( psEncCtrl->current_SNR_dB_Q7, - SKP_SMULBB( -BG_SNR_DECR_dB_Q7 >> ( 4 + 1 ), b_Q8 ), // Q11 - SKP_SMULWB( ( 1 << 14 ) + psEncCtrl->input_quality_Q14, psEncCtrl->coding_quality_Q14 ) ); // Q12 + SKP_SMULBB( SKP_FIX_CONST( -BG_SNR_DECR_dB, 7 ) >> ( 4 + 1 ), b_Q8 ), // Q11 + SKP_SMULWB( SKP_FIX_CONST( 1.0, 14 ) + psEncCtrl->input_quality_Q14, psEncCtrl->coding_quality_Q14 ) ); // Q12 if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /* Reduce gains for periodic signals */ - SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, HARM_SNR_INCR_dB_Q7 << 1, psEnc->LTPCorr_Q15 ); + SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, SKP_FIX_CONST( HARM_SNR_INCR_dB, 8 ), psEnc->LTPCorr_Q15 ); } else { /* For unvoiced signals and low-quality input, adjust the quality slower than SNR_dB setting */ SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, - SKP_SMLAWB( 6 << ( 7 + 2 ), -104856, psEncCtrl->current_SNR_dB_Q7 ), //-104856_Q18 = -0.4_Q0, Q9 - ( 1 << 14 ) - psEncCtrl->input_quality_Q14 ); // Q14 + SKP_SMLAWB( SKP_FIX_CONST( 6.0, 9 ), -SKP_FIX_CONST( 0.4, 18 ), psEncCtrl->current_SNR_dB_Q7 ), + SKP_FIX_CONST( 1.0, 14 ) - psEncCtrl->input_quality_Q14 ); } /*************************/ @@ -212,53 +228,70 @@ void SKP_Silk_noise_shape_analysis_FIX( pitch_res_ptr += nSamples; } - psEncCtrl->sparseness_Q8 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_SMULWB( energy_variation_Q7 - ( 5 << 7 ), 6554 ) ), 7 ); // 6554_Q16 = 0.1_Q0 + psEncCtrl->sparseness_Q8 = SKP_RSHIFT( SKP_Silk_sigm_Q15( SKP_SMULWB( energy_variation_Q7 - + SKP_FIX_CONST( 5.0, 7 ), SKP_FIX_CONST( 0.1, 16 ) ) ), 7 ); /* Set quantization offset depending on sparseness measure */ - if( psEncCtrl->sparseness_Q8 > SPARSENESS_THRESHOLD_QNT_OFFSET_Q8 ) { + if( psEncCtrl->sparseness_Q8 > SKP_FIX_CONST( SPARSENESS_THRESHOLD_QNT_OFFSET, 8 ) ) { psEncCtrl->sCmn.QuantOffsetType = 0; } else { psEncCtrl->sCmn.QuantOffsetType = 1; } /* Increase coding SNR for sparse signals */ - SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, SPARSE_SNR_INCR_dB_Q7 << 8, psEncCtrl->sparseness_Q8 - ( 1 << 7 ) ); + SNR_adj_dB_Q7 = SKP_SMLAWB( SNR_adj_dB_Q7, SKP_FIX_CONST( SPARSE_SNR_INCR_dB, 15 ), psEncCtrl->sparseness_Q8 - SKP_FIX_CONST( 0.5, 8 ) ); } /*******************************/ /* Control bandwidth expansion */ /*******************************/ - delta_Q16 = SKP_SMULWB( ( 1 << 16 ) - SKP_SMULBB( 3, psEncCtrl->coding_quality_Q14 ), LOW_RATE_BANDWIDTH_EXPANSION_DELTA_Q16 ); - BWExp1_Q16 = BANDWIDTH_EXPANSION_Q16 - delta_Q16; - BWExp2_Q16 = BANDWIDTH_EXPANSION_Q16 + delta_Q16; - if( psEnc->sCmn.fs_kHz == 24 ) { - /* Less bandwidth expansion for super wideband */ - BWExp1_Q16 = ( 1 << 16 ) - SKP_SMULWB( SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16, ( 1 << 16 ) - BWExp1_Q16 ); - BWExp2_Q16 = ( 1 << 16 ) - SKP_SMULWB( SWB_BANDWIDTH_EXPANSION_REDUCTION_Q16, ( 1 << 16 ) - BWExp2_Q16 ); - } + /* More BWE for signals with high prediction gain */ + strength_Q16 = SKP_SMULWB( psEncCtrl->predGain_Q16, SKP_FIX_CONST( FIND_PITCH_WHITE_NOISE_FRACTION, 16 ) ); + BWExp1_Q16 = BWExp2_Q16 = SKP_DIV32_varQ( SKP_FIX_CONST( BANDWIDTH_EXPANSION, 16 ), + SKP_SMLAWW( SKP_FIX_CONST( 1.0, 16 ), strength_Q16, strength_Q16 ), 16 ); + delta_Q16 = SKP_SMULWB( SKP_FIX_CONST( 1.0, 16 ) - SKP_SMULBB( 3, psEncCtrl->coding_quality_Q14 ), + SKP_FIX_CONST( LOW_RATE_BANDWIDTH_EXPANSION_DELTA, 16 ) ); + BWExp1_Q16 = SKP_SUB32( BWExp1_Q16, delta_Q16 ); + BWExp2_Q16 = SKP_ADD32( BWExp2_Q16, delta_Q16 ); /* BWExp1 will be applied after BWExp2, so make it relative */ BWExp1_Q16 = SKP_DIV32_16( SKP_LSHIFT( BWExp1_Q16, 14 ), SKP_RSHIFT( BWExp2_Q16, 2 ) ); - /* Warping coefficient */ - psEncCtrl->sCmn.warping_Q16 = psEnc->sCmn.fs_kHz * WARPING_MULTIPLIER_Q16; - psEncCtrl->sCmn.warping_Q16 = SKP_min( psEncCtrl->sCmn.warping_Q16, 32767 ); + if( psEnc->sCmn.warping_Q16 > 0 ) { + /* Slightly more warping in analysis will move quantization noise up in frequency, where it's better masked */ + warping_Q16 = SKP_SMLAWB( psEnc->sCmn.warping_Q16, psEncCtrl->coding_quality_Q14, SKP_FIX_CONST( 0.01, 18 ) ); + } else { + warping_Q16 = 0; + } /********************************************/ /* Compute noise shaping AR coefs and gains */ /********************************************/ - sz = ( SKP_int )SKP_SMULBB( SHAPE_LPC_WIN_MS, psEnc->sCmn.fs_kHz ); for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) { - /* Apply window */ - SKP_Silk_apply_sine_window( x_windowed, x_ptr, 0, SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz ); + /* Apply window: sine slope followed by flat part followed by cosine slope */ + SKP_int shift, slope_part, flat_part; + flat_part = psEnc->sCmn.fs_kHz * 3; + slope_part = SKP_RSHIFT( psEnc->sCmn.shapeWinLength - flat_part, 1 ); + + SKP_Silk_apply_sine_window( x_windowed, x_ptr, 1, slope_part ); + shift = slope_part; + SKP_memcpy( x_windowed + shift, x_ptr + shift, flat_part * sizeof(SKP_int16) ); + shift += flat_part; + SKP_Silk_apply_sine_window( x_windowed + shift, x_ptr + shift, 2, slope_part ); /* Update pointer: next LPC analysis block */ x_ptr += psEnc->sCmn.subfr_length; - /* Calculate warped auto correlation */ - SKP_Silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, psEncCtrl->sCmn.warping_Q16, sz, psEnc->sCmn.shapingLPCOrder ); + if( psEnc->sCmn.warping_Q16 > 0 ) { + /* Calculate warped auto correlation */ + SKP_Silk_warped_autocorrelation_FIX( auto_corr, &scale, x_windowed, warping_Q16, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder ); + } else { + /* Calculate regular auto correlation */ + SKP_Silk_autocorr( auto_corr, &scale, x_windowed, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder + 1 ); + } /* Add white noise, as a fraction of energy */ - auto_corr[0] = SKP_ADD32( auto_corr[0], SKP_max_32( SKP_SMULWB( SKP_RSHIFT( auto_corr[ 0 ], 4 ), SHAPE_WHITE_NOISE_FRACTION_Q20 ), 1 ) ); + auto_corr[0] = SKP_ADD32( auto_corr[0], SKP_max_32( SKP_SMULWB( SKP_RSHIFT( auto_corr[ 0 ], 4 ), + SKP_FIX_CONST( SHAPE_WHITE_NOISE_FRACTION, 20 ) ), 1 ) ); /* Calculate the reflection coefficients using schur */ nrg = SKP_Silk_schur64( refl_coef_Q16, auto_corr, psEnc->sCmn.shapingLPCOrder ); @@ -267,26 +300,6 @@ void SKP_Silk_noise_shape_analysis_FIX( /* Convert reflection coefficients to prediction coefficients */ SKP_Silk_k2a_Q16( AR2_Q24, refl_coef_Q16, psEnc->sCmn.shapingLPCOrder ); - /* Convert residual energy to non-warped scale */ - gain_mult_Q16 = warped_gain( AR2_Q24, psEncCtrl->sCmn.warping_Q16, psEnc->sCmn.shapingLPCOrder ); - gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, gain_mult_Q16 ); - SKP_assert( gain_mult_Q16 >= 0 ); // If breaking, add dynamic scaling - nrg = SKP_SMULWW( nrg, gain_mult_Q16 ); - SKP_assert( nrg >= 0 ); // If breaking, add dynamic scaling - - /* Bandwidth expansion for synthesis filter shaping */ - SKP_Silk_bwexpander_32( AR2_Q24, psEnc->sCmn.shapingLPCOrder, BWExp2_Q16 ); - - /* Compute noise shaping filter coefficients */ - SKP_memcpy( AR1_Q24, AR2_Q24, psEnc->sCmn.shapingLPCOrder * sizeof( SKP_int32 ) ); - - /* Bandwidth expansion for analysis filter shaping */ - SKP_assert( BWExp1_Q16 <= ( 1 << 16 ) ); // If ever breaking, use LPC_stabilize() in these cases to stay within range - SKP_Silk_bwexpander_32( AR1_Q24, psEnc->sCmn.shapingLPCOrder, BWExp1_Q16 ); - - /* Increase residual energy */ - nrg = SKP_SMLAWB( nrg, SKP_RSHIFT( auto_corr[ 0 ], 8 ), SHAPE_MIN_ENERGY_RATIO_Q24 ); - Qnrg = -scale; // range: -12...30 SKP_assert( Qnrg >= -12 ); SKP_assert( Qnrg <= 30 ); @@ -305,6 +318,22 @@ void SKP_Silk_noise_shape_analysis_FIX( psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( tmp32, 16 - Qnrg ); + if( psEnc->sCmn.warping_Q16 > 0 ) { + /* Adjust gain for warping */ + gain_mult_Q16 = warped_gain( AR2_Q24, warping_Q16, psEnc->sCmn.shapingLPCOrder ); + psEncCtrl->Gains_Q16[ k ] = SKP_SMULWW( psEncCtrl->Gains_Q16[ k ], gain_mult_Q16 ); + } + + /* Bandwidth expansion for synthesis filter shaping */ + SKP_Silk_bwexpander_32( AR2_Q24, psEnc->sCmn.shapingLPCOrder, BWExp2_Q16 ); + + /* Compute noise shaping filter coefficients */ + SKP_memcpy( AR1_Q24, AR2_Q24, psEnc->sCmn.shapingLPCOrder * sizeof( SKP_int32 ) ); + + /* Bandwidth expansion for analysis filter shaping */ + SKP_assert( BWExp1_Q16 <= SKP_FIX_CONST( 1.0, 16 ) ); + SKP_Silk_bwexpander_32( AR1_Q24, psEnc->sCmn.shapingLPCOrder, BWExp1_Q16 ); + /* Ratio of prediction gains, in energy domain */ SKP_Silk_LPC_inverse_pred_gain_Q24( &pre_nrg_Q30, AR2_Q24, psEnc->sCmn.shapingLPCOrder ); SKP_Silk_LPC_inverse_pred_gain_Q24( &nrg, AR1_Q24, psEnc->sCmn.shapingLPCOrder ); @@ -313,12 +342,8 @@ void SKP_Silk_noise_shape_analysis_FIX( pre_nrg_Q30 = SKP_LSHIFT32( SKP_SMULWB( pre_nrg_Q30, SKP_FIX_CONST( 0.7, 15 ) ), 1 ); psEncCtrl->GainsPre_Q14[ k ] = ( SKP_int ) SKP_FIX_CONST( 0.3, 14 ) + SKP_DIV32_varQ( pre_nrg_Q30, nrg, 14 ); - /* Convert to monic warped prediction coefficients */ - warped_true2monic_coefs( AR1_Q24, psEncCtrl->sCmn.warping_Q16, psEnc->sCmn.shapingLPCOrder ); - warped_true2monic_coefs( AR2_Q24, psEncCtrl->sCmn.warping_Q16, psEnc->sCmn.shapingLPCOrder ); - - /* Limit absolute values */ - limit_warped_coefs( AR2_Q24, AR1_Q24, psEncCtrl->sCmn.warping_Q16, SKP_FIX_CONST( 3.999, 24 ), psEnc->sCmn.shapingLPCOrder ); + /* Convert to monic warped prediction coefficients and limit absolute values */ + limit_warped_coefs( AR2_Q24, AR1_Q24, warping_Q16, SKP_FIX_CONST( 3.999, 24 ), psEnc->sCmn.shapingLPCOrder ); /* Convert from Q24 to Q13 and store in int16 */ for( i = 0; i < psEnc->sCmn.shapingLPCOrder; i++ ) { @@ -331,9 +356,9 @@ void SKP_Silk_noise_shape_analysis_FIX( /* Gain tweaking */ /*****************/ /* Increase gains during low speech activity and put lower limit on gains */ - gain_mult_Q16 = SKP_Silk_log2lin( -SKP_SMLAWB( -16 << 7, SNR_adj_dB_Q7, 10486 ) ); // 10486_Q16 = 0.16_Q0 - gain_add_Q16 = SKP_Silk_log2lin( SKP_SMLAWB( 16 << 7, NOISE_FLOOR_dB_Q7, 10486 ) ); // 10486_Q16 = 0.16_Q0 - tmp32 = SKP_Silk_log2lin( SKP_SMLAWB( 16 << 7, RELATIVE_MIN_GAIN_dB_Q7, 10486 ) ); // 10486_Q16 = 0.16_Q0 + gain_mult_Q16 = SKP_Silk_log2lin( -SKP_SMLAWB( -SKP_FIX_CONST( 16.0, 7 ), SNR_adj_dB_Q7, SKP_FIX_CONST( 0.16, 16 ) ) ); + gain_add_Q16 = SKP_Silk_log2lin( SKP_SMLAWB( SKP_FIX_CONST( 16.0, 7 ), SKP_FIX_CONST( NOISE_FLOOR_dB, 7 ), SKP_FIX_CONST( 0.16, 16 ) ) ); + tmp32 = SKP_Silk_log2lin( SKP_SMLAWB( SKP_FIX_CONST( 16.0, 7 ), SKP_FIX_CONST( RELATIVE_MIN_GAIN_dB, 7 ), SKP_FIX_CONST( 0.16, 16 ) ) ); tmp32 = SKP_SMULWW( psEnc->avgGain_Q16, tmp32 ); gain_add_Q16 = SKP_ADD_SAT32( gain_add_Q16, tmp32 ); SKP_assert( gain_mult_Q16 >= 0 ); @@ -349,32 +374,12 @@ void SKP_Silk_noise_shape_analysis_FIX( psEnc->avgGain_Q16, SKP_SMULWB( psEncCtrl->Gains_Q16[ k ] - psEnc->avgGain_Q16, - SKP_RSHIFT_ROUND( SKP_SMULBB( psEnc->speech_activity_Q8, GAIN_SMOOTHING_COEF_Q10 ), 2 ) + SKP_RSHIFT_ROUND( SKP_SMULBB( psEnc->speech_activity_Q8, SKP_FIX_CONST( GAIN_SMOOTHING_COEF, 10 ) ), 2 ) ) ); } - /************************************************/ - /* Decrease level during fricatives (de-essing) */ - /************************************************/ - gain_mult_Q16 = ( 1 << 16 ) + SKP_RSHIFT_ROUND( SKP_MLA( INPUT_TILT_Q26, psEncCtrl->coding_quality_Q14, HIGH_RATE_INPUT_TILT_Q12 ), 10 ); - - if( psEncCtrl->input_tilt_Q15 <= 0 && psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED ) { - if( psEnc->sCmn.fs_kHz == 24 ) { - SKP_int32 essStrength_Q15 = SKP_SMULWW( -psEncCtrl->input_tilt_Q15, - SKP_SMULBB( psEnc->speech_activity_Q8, ( 1 << 8 ) - psEncCtrl->sparseness_Q8 ) ); - tmp32 = SKP_Silk_log2lin( ( 16 << 7 ) - SKP_SMULWB( essStrength_Q15, - SKP_SMULWB( DE_ESSER_COEF_SWB_dB_Q7, 20972 ) ) ); // 20972_Q17 = 0.16_Q0 - gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, tmp32 ); - } else if( psEnc->sCmn.fs_kHz == 16 ) { - SKP_int32 essStrength_Q15 = SKP_SMULWW(-psEncCtrl->input_tilt_Q15, - SKP_SMULBB( psEnc->speech_activity_Q8, ( 1 << 8 ) - psEncCtrl->sparseness_Q8 )); - tmp32 = SKP_Silk_log2lin( ( 16 << 7 ) - SKP_SMULWB( essStrength_Q15, - SKP_SMULWB( DE_ESSER_COEF_WB_dB_Q7, 20972 ) ) ); // 20972_Q17 = 0.16_Q0 - gain_mult_Q16 = SKP_SMULWW( gain_mult_Q16, tmp32 ); - } else { - SKP_assert( psEnc->sCmn.fs_kHz == 12 || psEnc->sCmn.fs_kHz == 8 ); - } - } + gain_mult_Q16 = SKP_FIX_CONST( 1.0, 16 ) + SKP_RSHIFT_ROUND( SKP_MLA( SKP_FIX_CONST( INPUT_TILT, 26 ), + psEncCtrl->coding_quality_Q14, SKP_FIX_CONST( HIGH_RATE_INPUT_TILT, 12 ) ), 10 ); for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) { psEncCtrl->GainsPre_Q14[ k ] = SKP_SMULWB( gain_mult_Q16, psEncCtrl->GainsPre_Q14[ k ] ); @@ -384,47 +389,50 @@ void SKP_Silk_noise_shape_analysis_FIX( /* Control low-frequency shaping and noise tilt */ /************************************************/ /* Less low frequency shaping for noisy inputs */ - strength_Q16 = SKP_MUL( LOW_FREQ_SHAPING_Q0, ( 1 << 16 ) + SKP_SMULBB( LOW_QUALITY_LOW_FREQ_SHAPING_DECR_Q1, psEncCtrl->input_quality_bands_Q15[ 0 ] - ( 1 << 15 ) ) ); + strength_Q16 = SKP_MUL( SKP_FIX_CONST( LOW_FREQ_SHAPING, 0 ), SKP_FIX_CONST( 1.0, 16 ) + + SKP_SMULBB( SKP_FIX_CONST( LOW_QUALITY_LOW_FREQ_SHAPING_DECR, 1 ), psEncCtrl->input_quality_bands_Q15[ 0 ] - SKP_FIX_CONST( 1.0, 15 ) ) ); if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /* Reduce low frequencies quantization noise for periodic signals, depending on pitch lag */ /*f = 400; freqz([1, -0.98 + 2e-4 * f], [1, -0.97 + 7e-4 * f], 2^12, Fs); axis([0, 1000, -10, 1])*/ - SKP_int fs_kHz_inv = SKP_DIV32_16( 3277, psEnc->sCmn.fs_kHz ); // 0.2_Q0 = 3277_Q14 + SKP_int fs_kHz_inv = SKP_DIV32_16( SKP_FIX_CONST( 0.2, 14 ), psEnc->sCmn.fs_kHz ); for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) { - b_Q14 = fs_kHz_inv + SKP_DIV32_16( ( 3 << 14 ), psEncCtrl->sCmn.pitchL[ k ] ); + b_Q14 = fs_kHz_inv + SKP_DIV32_16( SKP_FIX_CONST( 3.0, 14 ), psEncCtrl->sCmn.pitchL[ k ] ); /* Pack two coefficients in one int32 */ - psEncCtrl->LF_shp_Q14[ k ] = SKP_LSHIFT( ( 1 << 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, b_Q14 ), 16 ); - psEncCtrl->LF_shp_Q14[ k ] |= (SKP_uint16)( b_Q14 - ( 1 << 14 ) ); + psEncCtrl->LF_shp_Q14[ k ] = SKP_LSHIFT( SKP_FIX_CONST( 1.0, 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, b_Q14 ), 16 ); + psEncCtrl->LF_shp_Q14[ k ] |= (SKP_uint16)( b_Q14 - SKP_FIX_CONST( 1.0, 14 ) ); } - SKP_assert( HARM_HP_NOISE_COEF_Q24 < ( 1 << 23 ) ); // Guarantees that second argument to SMULWB() is within range of an SKP_int16 - Tilt_Q16 = - HP_NOISE_COEF_Q16 - - SKP_SMULWB( ( 1 << 16 ) - HP_NOISE_COEF_Q16, SKP_SMULWB( HARM_HP_NOISE_COEF_Q24, psEnc->speech_activity_Q8 ) ); + SKP_assert( SKP_FIX_CONST( HARM_HP_NOISE_COEF, 24 ) < SKP_FIX_CONST( 0.5, 24 ) ); // Guarantees that second argument to SMULWB() is within range of an SKP_int16 + Tilt_Q16 = - SKP_FIX_CONST( HP_NOISE_COEF, 16 ) - + SKP_SMULWB( SKP_FIX_CONST( 1.0, 16 ) - SKP_FIX_CONST( HP_NOISE_COEF, 16 ), + SKP_SMULWB( SKP_FIX_CONST( HARM_HP_NOISE_COEF, 24 ), psEnc->speech_activity_Q8 ) ); } else { b_Q14 = SKP_DIV32_16( 21299, psEnc->sCmn.fs_kHz ); // 1.3_Q0 = 21299_Q14 /* Pack two coefficients in one int32 */ - psEncCtrl->LF_shp_Q14[ 0 ] = SKP_LSHIFT( ( 1 << 14 ) - b_Q14 - SKP_SMULWB( strength_Q16, SKP_SMULWB( 39322, b_Q14 ) ), 16 ); // 0.6_Q0 = 39322_Q16 - psEncCtrl->LF_shp_Q14[ 0 ] |= (SKP_uint16)( b_Q14 - ( 1 << 14 ) ); + psEncCtrl->LF_shp_Q14[ 0 ] = SKP_LSHIFT( SKP_FIX_CONST( 1.0, 14 ) - b_Q14 - + SKP_SMULWB( strength_Q16, SKP_SMULWB( SKP_FIX_CONST( 0.6, 16 ), b_Q14 ) ), 16 ); + psEncCtrl->LF_shp_Q14[ 0 ] |= (SKP_uint16)( b_Q14 - SKP_FIX_CONST( 1.0, 14 ) ); for( k = 1; k < psEnc->sCmn.nb_subfr; k++ ) { - psEncCtrl->LF_shp_Q14[ k ] = psEncCtrl->LF_shp_Q14[ k - 1 ]; + psEncCtrl->LF_shp_Q14[ k ] = psEncCtrl->LF_shp_Q14[ 0 ]; } - Tilt_Q16 = -HP_NOISE_COEF_Q16; + Tilt_Q16 = -SKP_FIX_CONST( HP_NOISE_COEF, 16 ); } /****************************/ /* HARMONIC SHAPING CONTROL */ /****************************/ /* Control boosting of harmonic frequencies */ - HarmBoost_Q16 = SKP_SMULWB( SKP_SMULWB( ( 1 << 17 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 3 ), - psEnc->LTPCorr_Q15 ), LOW_RATE_HARMONIC_BOOST_Q16 ); + HarmBoost_Q16 = SKP_SMULWB( SKP_SMULWB( SKP_FIX_CONST( 1.0, 17 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 3 ), + psEnc->LTPCorr_Q15 ), SKP_FIX_CONST( LOW_RATE_HARMONIC_BOOST, 16 ) ); /* More harmonic boost for noisy input signals */ HarmBoost_Q16 = SKP_SMLAWB( HarmBoost_Q16, - ( 1 << 16 ) - SKP_LSHIFT( psEncCtrl->input_quality_Q14, 2 ), LOW_INPUT_QUALITY_HARMONIC_BOOST_Q16 ); + SKP_FIX_CONST( 1.0, 16 ) - SKP_LSHIFT( psEncCtrl->input_quality_Q14, 2 ), SKP_FIX_CONST( LOW_INPUT_QUALITY_HARMONIC_BOOST, 16 ) ); if( USE_HARM_SHAPING && psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /* More harmonic noise shaping for high bitrates or noisy input */ - HarmShapeGain_Q16 = SKP_SMLAWB( HARMONIC_SHAPING_Q16, - ( 1 << 16 ) - SKP_SMULWB( ( 1 << 18 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 4 ), - psEncCtrl->input_quality_Q14 ), HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING_Q16 ); + HarmShapeGain_Q16 = SKP_SMLAWB( SKP_FIX_CONST( HARMONIC_SHAPING, 16 ), + SKP_FIX_CONST( 1.0, 16 ) - SKP_SMULWB( SKP_FIX_CONST( 1.0, 18 ) - SKP_LSHIFT( psEncCtrl->coding_quality_Q14, 4 ), + psEncCtrl->input_quality_Q14 ), SKP_FIX_CONST( HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING, 16 ) ); /* Less harmonic noise shaping for less periodic signals */ HarmShapeGain_Q16 = SKP_SMULWB( SKP_LSHIFT( HarmShapeGain_Q16, 1 ), @@ -438,11 +446,11 @@ void SKP_Silk_noise_shape_analysis_FIX( /*************************/ for( k = 0; k < MAX_NB_SUBFR; k++ ) { psShapeSt->HarmBoost_smth_Q16 = - SKP_SMLAWB( psShapeSt->HarmBoost_smth_Q16, HarmBoost_Q16 - psShapeSt->HarmBoost_smth_Q16, SUBFR_SMTH_COEF_Q16 ); + SKP_SMLAWB( psShapeSt->HarmBoost_smth_Q16, HarmBoost_Q16 - psShapeSt->HarmBoost_smth_Q16, SKP_FIX_CONST( SUBFR_SMTH_COEF, 16 ) ); psShapeSt->HarmShapeGain_smth_Q16 = - SKP_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - psShapeSt->HarmShapeGain_smth_Q16, SUBFR_SMTH_COEF_Q16 ); + SKP_SMLAWB( psShapeSt->HarmShapeGain_smth_Q16, HarmShapeGain_Q16 - psShapeSt->HarmShapeGain_smth_Q16, SKP_FIX_CONST( SUBFR_SMTH_COEF, 16 ) ); psShapeSt->Tilt_smth_Q16 = - SKP_SMLAWB( psShapeSt->Tilt_smth_Q16, Tilt_Q16 - psShapeSt->Tilt_smth_Q16, SUBFR_SMTH_COEF_Q16 ); + SKP_SMLAWB( psShapeSt->Tilt_smth_Q16, Tilt_Q16 - psShapeSt->Tilt_smth_Q16, SKP_FIX_CONST( SUBFR_SMTH_COEF, 16 ) ); psEncCtrl->HarmBoost_Q14[ k ] = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->HarmBoost_smth_Q16, 2 ); psEncCtrl->HarmShapeGain_Q14[ k ] = ( SKP_int )SKP_RSHIFT_ROUND( psShapeSt->HarmShapeGain_smth_Q16, 2 ); diff --git a/src_FIX/SKP_Silk_prefilter_FIX.c b/src_FIX/SKP_Silk_prefilter_FIX.c index 1b7dcd2d7c2648ab7648ea20457edd3b4a29cdc2..c0a22728f0ae8407a2a5cc4dc6ed271a5e86b192 100644 --- a/src_FIX/SKP_Silk_prefilter_FIX.c +++ b/src_FIX/SKP_Silk_prefilter_FIX.c @@ -26,7 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" -#include "SKP_Silk_perceptual_parameters_FIX.h" +#include "SKP_Silk_tuning_parameters.h" /* SKP_Silk_prefilter. Prefilter for finding Quantizer input signal */ SKP_INLINE void SKP_Silk_prefilt_FIX( @@ -120,15 +120,15 @@ void SKP_Silk_prefilter_FIX( AR1_shp_Q13 = &psEncCtrl->AR1_Q13[ k * MAX_SHAPE_LPC_ORDER ]; /* Short term FIR filtering*/ - SKP_Silk_warped_LPC_analysis_filter_FIX( P->sAR_shp1, st_res, AR1_shp_Q13, px, - psEncCtrl->sCmn.warping_Q16, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder ); + SKP_Silk_warped_LPC_analysis_filter_FIX( P->sAR_shp, st_res, AR1_shp_Q13, px, + psEnc->sCmn.warping_Q16, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder ); /* reduce (mainly) low frequencies during harmonic emphasis */ B_Q12[ 0 ] = SKP_RSHIFT_ROUND( psEncCtrl->GainsPre_Q14[ k ], 2 ); - tmp_32 = SKP_SMLABB( INPUT_TILT_Q26, psEncCtrl->HarmBoost_Q14[ k ], HarmShapeGain_Q12 ); /* Q26 */ - tmp_32 = SKP_SMLABB( tmp_32, psEncCtrl->coding_quality_Q14, HIGH_RATE_INPUT_TILT_Q12 ); /* Q26 */ - tmp_32 = SKP_SMULWB( tmp_32, -psEncCtrl->GainsPre_Q14[ k ] ); /* Q24 */ - tmp_32 = SKP_RSHIFT_ROUND( tmp_32, 12 ); /* Q12 */ + tmp_32 = SKP_SMLABB( SKP_FIX_CONST( INPUT_TILT, 26 ), psEncCtrl->HarmBoost_Q14[ k ], HarmShapeGain_Q12 ); /* Q26 */ + tmp_32 = SKP_SMLABB( tmp_32, psEncCtrl->coding_quality_Q14, SKP_FIX_CONST( HIGH_RATE_INPUT_TILT, 12 ) ); /* Q26 */ + tmp_32 = SKP_SMULWB( tmp_32, -psEncCtrl->GainsPre_Q14[ k ] ); /* Q24 */ + tmp_32 = SKP_RSHIFT_ROUND( tmp_32, 12 ); /* Q12 */ B_Q12[ 1 ]= SKP_SAT16( tmp_32 ); x_filt_Q12[ 0 ] = SKP_SMLABB( SKP_SMULBB( st_res[ 0 ], B_Q12[ 0 ] ), P->sHarmHP, B_Q12[ 1 ] ); @@ -165,10 +165,10 @@ SKP_INLINE void SKP_Silk_prefilt_FIX( SKP_int16 *LTP_shp_buf; /* To speed up use temp variables instead of using the struct */ - LTP_shp_buf = P->sLTP_shp1; - LTP_shp_buf_idx = P->sLTP_shp_buf_idx1; - sLF_AR_shp_Q12 = P->sLF_AR_shp1_Q12; - sLF_MA_shp_Q12 = P->sLF_MA_shp1_Q12; + LTP_shp_buf = P->sLTP_shp; + LTP_shp_buf_idx = P->sLTP_shp_buf_idx; + sLF_AR_shp_Q12 = P->sLF_AR_shp_Q12; + sLF_MA_shp_Q12 = P->sLF_MA_shp_Q12; for( i = 0; i < length; i++ ) { if( lag > 0 ) { @@ -195,7 +195,7 @@ SKP_INLINE void SKP_Silk_prefilt_FIX( } /* Copy temp variable back to state */ - P->sLF_AR_shp1_Q12 = sLF_AR_shp_Q12; - P->sLF_MA_shp1_Q12 = sLF_MA_shp_Q12; - P->sLTP_shp_buf_idx1 = LTP_shp_buf_idx; + P->sLF_AR_shp_Q12 = sLF_AR_shp_Q12; + P->sLF_MA_shp_Q12 = sLF_MA_shp_Q12; + P->sLTP_shp_buf_idx = LTP_shp_buf_idx; } diff --git a/src_FIX/SKP_Silk_process_gains_FIX.c b/src_FIX/SKP_Silk_process_gains_FIX.c index 272fd29d6e04d5c291ab823b95ac6af050bd70b1..301687afb7c230f233283e5e5f33322ed9c689e4 100644 --- a/src_FIX/SKP_Silk_process_gains_FIX.c +++ b/src_FIX/SKP_Silk_process_gains_FIX.c @@ -26,6 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" +#include "SKP_Silk_tuning_parameters.h" /* Processing of gains */ void SKP_Silk_process_gains_FIX( @@ -35,21 +36,20 @@ void SKP_Silk_process_gains_FIX( { SKP_Silk_shape_state_FIX *psShapeSt = &psEnc->sShape; SKP_int k; - SKP_int32 s_Q16, InvMaxSqrVal_Q16, gain, gain_squared, ResNrg, ResNrgPart; + SKP_int32 s_Q16, InvMaxSqrVal_Q16, gain, gain_squared, ResNrg, ResNrgPart, quant_offset_Q10; /* Gain reduction when LTP coding gain is high */ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { /*s = -0.5f * SKP_sigmoid( 0.25f * ( psEncCtrl->LTPredCodGain - 12.0f ) ); */ - s_Q16 = -SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->LTPredCodGain_Q7 - (12 << 7), 4 ) ); + s_Q16 = -SKP_Silk_sigm_Q15( SKP_RSHIFT_ROUND( psEncCtrl->LTPredCodGain_Q7 - SKP_FIX_CONST( 12.0, 7 ), 4 ) ); for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) { psEncCtrl->Gains_Q16[ k ] = SKP_SMLAWB( psEncCtrl->Gains_Q16[ k ], psEncCtrl->Gains_Q16[ k ], s_Q16 ); } } /* Limit the quantized signal */ - /* 69 = 21.0f + 16/0.33 */ InvMaxSqrVal_Q16 = SKP_DIV32_16( SKP_Silk_log2lin( - SKP_SMULWB( (69 << 7) - psEncCtrl->current_SNR_dB_Q7, SKP_FIX_CONST( 0.33, 16 )) ), psEnc->sCmn.subfr_length ); + SKP_SMULWB( SKP_FIX_CONST( 70.0, 7 ) - psEncCtrl->current_SNR_dB_Q7, SKP_FIX_CONST( 0.33, 16 ) ) ), psEnc->sCmn.subfr_length ); for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) { /* Soft limit on ratio residual energy and squared gains */ @@ -74,10 +74,10 @@ void SKP_Silk_process_gains_FIX( /* recalculate with higher precision */ gain_squared = SKP_SMLAWW( SKP_LSHIFT( ResNrgPart, 16 ), gain, gain ); SKP_assert( gain_squared > 0 ); - gain = SKP_Silk_SQRT_APPROX( gain_squared ); /* Q8 */ + gain = SKP_Silk_SQRT_APPROX( gain_squared ); /* Q8 */ psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( gain, 8 ); /* Q16 */ } else { - gain = SKP_Silk_SQRT_APPROX( gain_squared ); /* Q0 */ + gain = SKP_Silk_SQRT_APPROX( gain_squared ); /* Q0 */ psEncCtrl->Gains_Q16[ k ] = SKP_LSHIFT_SAT32( gain, 16 ); /* Q16 */ } } @@ -87,7 +87,7 @@ void SKP_Silk_process_gains_FIX( &psShapeSt->LastGainIndex, psEnc->sCmn.nFramesInPayloadBuf, psEnc->sCmn.nb_subfr ); /* Set quantizer offset for voiced signals. Larger offset when LTP coding gain is low or tilt is high (ie low-pass) */ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { - if( psEncCtrl->LTPredCodGain_Q7 + SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) > ( 1 << 7 ) ) { + if( psEncCtrl->LTPredCodGain_Q7 + SKP_RSHIFT( psEncCtrl->input_tilt_Q15, 8 ) > SKP_FIX_CONST( 1.0, 7 ) ) { psEncCtrl->sCmn.QuantOffsetType = 0; } else { psEncCtrl->sCmn.QuantOffsetType = 1; @@ -95,19 +95,14 @@ void SKP_Silk_process_gains_FIX( } /* Quantizer boundary adjustment */ - if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { - psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( 1.2, 10 ) - - SKP_SMULWB( SKP_FIX_CONST( 0.4, 18 ), psEnc->speech_activity_Q8 ) - - SKP_SMULWB( SKP_FIX_CONST( 0.3, 12 ), psEncCtrl->input_quality_Q14 ) - + SKP_SMULBB( SKP_FIX_CONST( 0.2, 10 ), psEncCtrl->sCmn.QuantOffsetType ) - - SKP_SMULWB( SKP_FIX_CONST( 0.1, 12 ), psEncCtrl->coding_quality_Q14 ); - } else { - psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( 1.2, 10 ) - - SKP_SMULWB( SKP_FIX_CONST( 0.4, 18 ), psEnc->speech_activity_Q8 ) - - SKP_SMULWB( SKP_FIX_CONST( 0.4, 12 ), psEncCtrl->input_quality_Q14 ) - + SKP_SMULBB( SKP_FIX_CONST( 0.4, 10 ), psEncCtrl->sCmn.QuantOffsetType ) - - SKP_SMULWB( SKP_FIX_CONST( 0.1, 12 ), psEncCtrl->coding_quality_Q14 ); - } - SKP_assert( psEncCtrl->Lambda_Q10 >= 0 ); + quant_offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrl->sCmn.sigtype ][ psEncCtrl->sCmn.QuantOffsetType ]; + psEncCtrl->Lambda_Q10 = SKP_FIX_CONST( LAMBDA_OFFSET, 10 ) + + SKP_SMULBB( SKP_FIX_CONST( LAMBDA_DELAYED_DECISIONS, 10 ), psEnc->sCmn.nStatesDelayedDecision ) + + SKP_SMULWB( SKP_FIX_CONST( LAMBDA_SPEECH_ACT, 18 ), psEnc->speech_activity_Q8 ) + + SKP_SMULWB( SKP_FIX_CONST( LAMBDA_INPUT_QUALITY, 12 ), psEncCtrl->input_quality_Q14 ) + + SKP_SMULWB( SKP_FIX_CONST( LAMBDA_CODING_QUALITY, 12 ), psEncCtrl->coding_quality_Q14 ) + + SKP_SMULWB( SKP_FIX_CONST( LAMBDA_QUANT_OFFSET, 16 ), quant_offset_Q10 ); + + SKP_assert( psEncCtrl->Lambda_Q10 > 0 ); SKP_assert( psEncCtrl->Lambda_Q10 < SKP_FIX_CONST( 2, 10 ) ); } diff --git a/src_FIX/SKP_Silk_solve_LS_FIX.c b/src_FIX/SKP_Silk_solve_LS_FIX.c index 23c0c9c842c0369eb3d6d54f625ee0641a91e918..f61e9fbcf8867f837644c17cea3907c68d0bd2ff 100644 --- a/src_FIX/SKP_Silk_solve_LS_FIX.c +++ b/src_FIX/SKP_Silk_solve_LS_FIX.c @@ -26,6 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FIX.h" +#include "SKP_Silk_tuning_parameters.h" /*****************************/ /* Internal function headers */ @@ -120,7 +121,7 @@ SKP_INLINE void SKP_Silk_LDL_factorize_FIX( SKP_assert( M <= MAX_MATRIX_SIZE ); status = 1; - diag_min_value = SKP_max_32( SKP_SMMUL( SKP_ADD_SAT32( A[ 0 ], A[ SKP_SMULBB( M, M ) - 1 ] ), FIND_LTP_COND_FAC_Q31 ), 1 << 9 ); + diag_min_value = SKP_max_32( SKP_SMMUL( SKP_ADD_SAT32( A[ 0 ], A[ SKP_SMULBB( M, M ) - 1 ] ), SKP_FIX_CONST( FIND_LTP_COND_FAC, 31 ) ), 1 << 9 ); for( loop_count = 0; loop_count < M && status == 1; loop_count++ ) { status = 0; for( j = 0; j < M; j++ ) { diff --git a/src_FIX/SKP_Silk_structs_FIX.h b/src_FIX/SKP_Silk_structs_FIX.h index 8e2eb2c32b110a1ddca2e00809abe63f15d8ca3f..261610cd00a0cb652b2b74e33c073328dc70e69e 100644 --- a/src_FIX/SKP_Silk_structs_FIX.h +++ b/src_FIX/SKP_Silk_structs_FIX.h @@ -29,7 +29,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SKP_SILK_STRUCTS_FIX_H #include "SKP_Silk_typedef.h" -#include "SKP_Silk_define_FIX.h" #include "SKP_Silk_main.h" #include "SKP_Silk_structs.h" @@ -52,17 +51,11 @@ typedef struct { /* Prefilter state */ /********************************/ typedef struct { - SKP_int16 sLTP_shp1[ LTP_BUF_LENGTH ]; - SKP_int32 sAR_shp1[ MAX_SHAPE_LPC_ORDER + 1 ]; - SKP_int32 sAR_shp2_Q14[ MAX_SHAPE_LPC_ORDER ]; - SKP_int16 sLTP_shp2_FIX[ LTP_BUF_LENGTH ]; - SKP_int sLTP_shp_buf_idx1; - SKP_int sAR_shp_buf_idx2; - SKP_int sLTP_shp_buf_idx2; - SKP_int32 sLF_AR_shp1_Q12; - SKP_int32 sLF_MA_shp1_Q12; - SKP_int32 sLF_AR_shp2_Q12; - SKP_int32 sLF_MA_shp2_Q12; + SKP_int16 sLTP_shp[ LTP_BUF_LENGTH ]; + SKP_int32 sAR_shp[ MAX_SHAPE_LPC_ORDER + 1 ]; + SKP_int sLTP_shp_buf_idx; + SKP_int32 sLF_AR_shp_Q12; + SKP_int32 sLF_MA_shp_Q12; SKP_int sHarmHP; SKP_int32 rand_seed; SKP_int lagPrev; @@ -96,7 +89,7 @@ typedef struct { SKP_Silk_nsq_state sNSQ_LBRR; /* Noise Shape Quantizer State ( for low bitrate redundancy ) */ /* Buffer for find pitch and noise shape analysis */ - SKP_array_of_int16_4_byte_aligned( x_buf, 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ); + SKP_DWORD_ALIGN SKP_int16 x_buf[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; SKP_int LTPCorr_Q15; /* Normalized correlation from pitch lag estimator */ SKP_int mu_LTP_Q8; /* Rate-distortion tradeoff in LTP quantization */ SKP_int32 SNR_dB_Q7; /* Quality setting */ @@ -104,7 +97,6 @@ typedef struct { SKP_int32 avgGain_Q16_one_bit_per_sample; /* average gain during active speech */ SKP_int BufferedInChannel_ms; /* Simulated number of ms buffer because of exceeded TargetRate_bps */ SKP_int speech_activity_Q8; /* Speech activity in Q8 */ - SKP_int32 pitchEstimationThreshold_Q16; /* Threshold for pitch estimator */ /* Parameters For LTP scaling Control */ SKP_int prevLTPredCodGain_Q7; @@ -122,14 +114,14 @@ typedef struct { /* Prediction and coding parameters */ SKP_int32 Gains_Q16[ MAX_NB_SUBFR ]; - SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER ); + SKP_DWORD_ALIGN SKP_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ]; SKP_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ]; SKP_int LTP_scale_Q14; /* Noise shaping parameters */ /* Testing */ - SKP_array_of_int16_4_byte_aligned( AR1_Q13, MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ); - SKP_array_of_int16_4_byte_aligned( AR2_Q13, MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ); + SKP_DWORD_ALIGN SKP_int16 AR1_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ]; + SKP_DWORD_ALIGN SKP_int16 AR2_Q13[ MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER ]; SKP_int32 LF_shp_Q14[ MAX_NB_SUBFR ]; /* Packs two int16 coefficients per int32 value */ SKP_int GainsPre_Q14[ MAX_NB_SUBFR ]; SKP_int HarmBoost_Q14[ MAX_NB_SUBFR ]; @@ -143,6 +135,7 @@ typedef struct { /* measures */ SKP_int sparseness_Q8; + SKP_int32 predGain_Q16; SKP_int LTPredCodGain_Q7; SKP_int input_quality_bands_Q15[ VAD_N_BANDS ]; SKP_int input_tilt_Q15; diff --git a/src_FIX/SKP_Silk_warped_autocorrelation_FIX.c b/src_FIX/SKP_Silk_warped_autocorrelation_FIX.c index 7bb4ae041218c4baba999299fa285a7d42c036de..b9dabed736bc40bcd277424d688c463ed2f5b0cb 100644 --- a/src_FIX/SKP_Silk_warped_autocorrelation_FIX.c +++ b/src_FIX/SKP_Silk_warped_autocorrelation_FIX.c @@ -28,41 +28,43 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_main_FIX.h" #define QC 10 +#define QS 14 /* Autocorrelations for a warped frequency axis */ void SKP_Silk_warped_autocorrelation_FIX( SKP_int32 *corr, /* O Result [order + 1] */ SKP_int *scale, /* O Scaling of the correlation vector */ const SKP_int16 *input, /* I Input data to correlate */ - const SKP_int16 warping_Q16, /* I Warping coefficient */ + const SKP_int warping_Q16, /* I Warping coefficient */ const SKP_int length, /* I Length of input */ const SKP_int order /* I Correlation order (even) */ ) { SKP_int n, i, lsh; - SKP_int32 tmp1_Q16, tmp2_Q16; - SKP_int32 state_Q16[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 }; - SKP_int64 corr_QC[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 }; + SKP_int32 tmp1_QS, tmp2_QS; + SKP_int32 state_QS[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 }; + SKP_int64 corr_QC[ MAX_SHAPE_LPC_ORDER + 1 ] = { 0 }; /* Order must be even */ SKP_assert( ( order & 1 ) == 0 ); + SKP_assert( 2 * QS - QC >= 0 ); /* Loop over samples */ for( n = 0; n < length; n++ ) { - tmp1_Q16 = SKP_LSHIFT32( ( SKP_int32 )input[ n ], 16 ); + tmp1_QS = SKP_LSHIFT32( ( SKP_int32 )input[ n ], QS ); /* Loop over allpass sections */ for( i = 0; i < order; i += 2 ) { /* Output of allpass section */ - tmp2_Q16 = SKP_SMLAWB( state_Q16[ i ], state_Q16[ i + 1 ] - tmp1_Q16, warping_Q16 ); - state_Q16[ i ] = tmp1_Q16; - corr_QC[ i ] += SKP_RSHIFT64( SKP_SMULL( tmp1_Q16, state_Q16[ 0 ] ), 32 - QC ); + tmp2_QS = SKP_SMLAWB( state_QS[ i ], state_QS[ i + 1 ] - tmp1_QS, warping_Q16 ); + state_QS[ i ] = tmp1_QS; + corr_QC[ i ] += SKP_RSHIFT64( SKP_SMULL( tmp1_QS, state_QS[ 0 ] ), 2 * QS - QC ); /* Output of allpass section */ - tmp1_Q16 = SKP_SMLAWB( state_Q16[ i + 1 ], state_Q16[ i + 2 ] - tmp2_Q16, warping_Q16 ); - state_Q16[ i + 1 ] = tmp2_Q16; - corr_QC[ i + 1 ] += SKP_RSHIFT64( SKP_SMULL( tmp2_Q16, state_Q16[ 0 ] ), 32 - QC ); + tmp1_QS = SKP_SMLAWB( state_QS[ i + 1 ], state_QS[ i + 2 ] - tmp2_QS, warping_Q16 ); + state_QS[ i + 1 ] = tmp2_QS; + corr_QC[ i + 1 ] += SKP_RSHIFT64( SKP_SMULL( tmp2_QS, state_QS[ 0 ] ), 2 * QS - QC ); } - state_Q16[ order ] = tmp1_Q16; - corr_QC[ order ] += SKP_RSHIFT64( SKP_SMULL( tmp1_Q16, state_Q16[ 0 ] ), 32 - QC ); + state_QS[ order ] = tmp1_QS; + corr_QC[ order ] += SKP_RSHIFT64( SKP_SMULL( tmp1_QS, state_QS[ 0 ] ), 2 * QS - QC ); } lsh = SKP_Silk_CLZ64( corr_QC[ 0 ] ) - 35; diff --git a/src_FLP/SKP_Silk_HP_variable_cutoff_FLP.c b/src_FLP/SKP_Silk_HP_variable_cutoff_FLP.c index 66ee3d9507f1188ed17820e15bce4097a24f2162..9700f7b97317bff77ec907cdde4592db37ae62a6 100644 --- a/src_FLP/SKP_Silk_HP_variable_cutoff_FLP.c +++ b/src_FLP/SKP_Silk_HP_variable_cutoff_FLP.c @@ -26,6 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FLP.h" +#include "SKP_Silk_tuning_parameters.h" #if HIGH_PASS_INPUT @@ -72,7 +73,7 @@ void SKP_Silk_HP_variable_cutoff_FLP( psEnc->variable_HP_smth2 += VARIABLE_HP_SMTH_COEF2 * ( psEnc->variable_HP_smth1 - psEnc->variable_HP_smth2 ); /* Convert from log scale to Hertz */ - psEncCtrl->pitch_freq_low_Hz = ( SKP_float )pow( 2.0, psEnc->variable_HP_smth2 ); + psEncCtrl->pitch_freq_low_Hz = ( SKP_float )pow( 2.0f, psEnc->variable_HP_smth2 ); /* Limit frequency range */ psEncCtrl->pitch_freq_low_Hz = SKP_LIMIT_float( psEncCtrl->pitch_freq_low_Hz, VARIABLE_HP_MIN_FREQ, VARIABLE_HP_MAX_FREQ ); diff --git a/src_FLP/SKP_Silk_LPC_analysis_filter_FLP.c b/src_FLP/SKP_Silk_LPC_analysis_filter_FLP.c index 3bbe58683748d8d5047d197e93fe3b479bdbe793..1f716670e8f01ddb9ee1954565252b641c74728c 100644 --- a/src_FLP/SKP_Silk_LPC_analysis_filter_FLP.c +++ b/src_FLP/SKP_Silk_LPC_analysis_filter_FLP.c @@ -46,6 +46,10 @@ void SKP_Silk_LPC_analysis_filter_FLP( SKP_assert( Order <= length ); switch( Order ) { + case 6: + SKP_Silk_LPC_analysis_filter6_FLP( r_LPC, PredCoef, s, length ); + break; + case 8: SKP_Silk_LPC_analysis_filter8_FLP( r_LPC, PredCoef, s, length ); break; @@ -204,3 +208,31 @@ void SKP_Silk_LPC_analysis_filter8_FLP( r_LPC[ix] = s_ptr[ 1 ] - LPC_pred; } } + +/* 6th order LPC analysis filter, does not write first 6 samples */ +void SKP_Silk_LPC_analysis_filter6_FLP( + SKP_float r_LPC[], /* O LPC residual signal */ + const SKP_float PredCoef[], /* I LPC coefficients */ + const SKP_float s[], /* I Input signal */ + const SKP_int length /* I Length of input signal */ +) +{ + SKP_int ix = 8; + SKP_float LPC_pred; + const SKP_float *s_ptr; + + for ( ; ix < length; ix++) { + s_ptr = &s[ix - 1]; + + /* short-term prediction */ + LPC_pred = s_ptr[ 0 ] * PredCoef[ 0 ] + + s_ptr[ -1 ] * PredCoef[ 1 ] + + s_ptr[ -2 ] * PredCoef[ 2 ] + + s_ptr[ -3 ] * PredCoef[ 3 ] + + s_ptr[ -4 ] * PredCoef[ 4 ] + + s_ptr[ -5 ] * PredCoef[ 5 ]; + + /* prediction error */ + r_LPC[ix] = s_ptr[ 1 ] - LPC_pred; + } +} diff --git a/src_FLP/SKP_Silk_LTP_analysis_filter_FLP.c b/src_FLP/SKP_Silk_LTP_analysis_filter_FLP.c index 1089a27bad2436471dfb4ddbcbdb856ac2c1e82b..1b565c743cec309c32108a62e423e43d74647eb2 100644 --- a/src_FLP/SKP_Silk_LTP_analysis_filter_FLP.c +++ b/src_FLP/SKP_Silk_LTP_analysis_filter_FLP.c @@ -28,14 +28,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_main_FLP.h" void SKP_Silk_LTP_analysis_filter_FLP( - SKP_float *LTP_res, /* O LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */ - const SKP_float *x, /* I Input signal, with preceeding samples */ - const SKP_float B[ LTP_ORDER * MAX_NB_SUBFR ], /* I LTP coefficients for each subframe */ - const SKP_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */ - const SKP_float invGains[ MAX_NB_SUBFR ], /* I Inverse quantization gains */ - const SKP_int subfr_length, /* I Length of each subframe */ - const SKP_int nb_subfr, /* I number of subframes */ - const SKP_int pre_length /* I Preceeding samples for each subframe */ + SKP_float *LTP_res, /* O LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */ + const SKP_float *x, /* I Input signal, with preceeding samples */ + const SKP_float B[ LTP_ORDER * MAX_NB_SUBFR ], /* I LTP coefficients for each subframe */ + const SKP_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */ + const SKP_float invGains[ MAX_NB_SUBFR ], /* I Inverse quantization gains */ + const SKP_int subfr_length, /* I Length of each subframe */ + const SKP_int nb_subfr, /* I number of subframes */ + const SKP_int pre_length /* I Preceeding samples for each subframe */ ) { const SKP_float *x_ptr, *x_lag_ptr; diff --git a/src_FLP/SKP_Silk_LTP_scale_ctrl_FLP.c b/src_FLP/SKP_Silk_LTP_scale_ctrl_FLP.c index 0380d12afd3fb87e0e44f4d0904d55513d700a23..5039d54d47a58bd713a6ddb515a2314f01f42202 100644 --- a/src_FLP/SKP_Silk_LTP_scale_ctrl_FLP.c +++ b/src_FLP/SKP_Silk_LTP_scale_ctrl_FLP.c @@ -51,7 +51,7 @@ void SKP_Silk_LTP_scale_ctrl_FLP( psEnc->prevLTPredCodGain = psEncCtrl->LTPredCodGain; - /* combine input and filtered input */ + /* Combine input and filtered input */ g_out = 0.5f * psEncCtrl->LTPredCodGain + ( 1.0f - 0.5f ) * psEnc->HPLTPredCodGain; g_limit = SKP_sigmoid( 0.5f * ( g_out - 6 ) ); diff --git a/src_FLP/SKP_Silk_NLSF_MSVQ_decode_FLP.c b/src_FLP/SKP_Silk_NLSF_MSVQ_decode_FLP.c index 589ac3641828a81e116f898e2b120f1d150948ba..1b7cdc6f69c3864cf705f751a194e485bee1dd02 100644 --- a/src_FLP/SKP_Silk_NLSF_MSVQ_decode_FLP.c +++ b/src_FLP/SKP_Silk_NLSF_MSVQ_decode_FLP.c @@ -39,7 +39,6 @@ void SKP_Silk_NLSF_MSVQ_decode_FLP( SKP_int s; SKP_int i; - /* Check that each index is within valid range */ SKP_assert( 0 <= NLSFIndices[ 0 ] && NLSFIndices[ 0 ] < psNLSF_CB_FLP->CBStages[ 0 ].nVectors ); @@ -85,6 +84,11 @@ void SKP_Silk_NLSF_MSVQ_decode_FLP( } } + /* Add 1/2 */ + for( i = 0; i < LPC_order; i++ ) { + pNLSF[ i ] += 0.5f; + } + /* NLSF stabilization */ SKP_Silk_NLSF_stabilize_FLP( pNLSF, psNLSF_CB_FLP->NDeltaMin, LPC_order ); } diff --git a/src_FLP/SKP_Silk_NLSF_MSVQ_encode_FLP.c b/src_FLP/SKP_Silk_NLSF_MSVQ_encode_FLP.c index bf0878eb3badb9d767998252ba00ae9ba322b48c..e74e03d26a99945738f45c9de7fa3ea2e24f8031 100644 --- a/src_FLP/SKP_Silk_NLSF_MSVQ_encode_FLP.c +++ b/src_FLP/SKP_Silk_NLSF_MSVQ_encode_FLP.c @@ -43,9 +43,8 @@ void SKP_Silk_NLSF_MSVQ_encode_FLP( const SKP_int deactivate_fluc_red /* I Deactivate fluctuation reduction */ ) { - SKP_int i, s, k, cur_survivors, prev_survivors, input_index, cb_index, bestIndex; + SKP_int i, s, k, cur_survivors, prev_survivors, min_survivors, input_index, cb_index, bestIndex; SKP_float se, wsse, rateDistThreshold, bestRateDist; - SKP_float pNLSF_in[ MAX_LPC_ORDER ]; #if( LOW_COMPLEXITY_ONLY == 1 ) SKP_float pRateDist[ NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED_LC_MODE ]; @@ -79,24 +78,24 @@ void SKP_Silk_NLSF_MSVQ_encode_FLP( cur_survivors = NLSF_MSVQ_Survivors; - - - /* Copy the input vector */ - SKP_memcpy( pNLSF_in, pNLSF, LPC_order * sizeof(SKP_float) ); - /****************************************************/ /* Tree search for the multi-stage vector quantizer */ /****************************************************/ /* Clear accumulated rates */ SKP_memset( pRate, 0, NLSF_MSVQ_Survivors * sizeof( SKP_float ) ); - - /* Copy NLSFs into residual signal vector */ - SKP_memcpy( pRes, pNLSF, LPC_order * sizeof( SKP_float ) ); + + /* Subtract 1/2 from NLSF input vector to create initial residual */ + for( i = 0; i < LPC_order; i++ ) { + pRes[ i ] = pNLSF[ i ] - 0.5f; + } /* Set first stage values */ prev_survivors = 1; + /* Minimum number of survivors */ + min_survivors = NLSF_MSVQ_Survivors / 2; + /* Loop over all stages */ for( s = 0; s < psNLSF_CB_FLP->nStages; s++ ) { @@ -120,8 +119,8 @@ void SKP_Silk_NLSF_MSVQ_encode_FLP( SKP_Silk_insertion_sort_increasing_FLP( pRateDist, pTempIndices, prev_survivors * pCurrentCBStage->nVectors, cur_survivors ); /* Discard survivors with rate-distortion values too far above the best one */ - rateDistThreshold = NLSF_MSVQ_SURV_MAX_REL_RD * pRateDist[ 0 ]; - while( pRateDist[ cur_survivors - 1 ] > rateDistThreshold && cur_survivors > 1 ) { + rateDistThreshold = ( 1.0f + NLSF_MSVQ_Survivors * NLSF_MSVQ_SURV_MAX_REL_RD ) * pRateDist[ 0 ]; + while( pRateDist[ cur_survivors - 1 ] > rateDistThreshold && cur_survivors > min_survivors ) { cur_survivors--; } diff --git a/src_FLP/SKP_Silk_VQ_nearest_neighbor_FLP.c b/src_FLP/SKP_Silk_VQ_nearest_neighbor_FLP.c index 490903f6b3ac0a02395e81062bc6cc0ff7e7e1a5..61b65b3f59245ff8f066971f10923dccae1e3a36 100644 --- a/src_FLP/SKP_Silk_VQ_nearest_neighbor_FLP.c +++ b/src_FLP/SKP_Silk_VQ_nearest_neighbor_FLP.c @@ -27,6 +27,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_main_FLP.h" +#define Q14_CONVERSION_FAC 6.1035e-005f // 1 / 2^14 + /* entropy constrained MATRIX-weighted VQ, for a single input data vector */ void SKP_Silk_VQ_WMat_EC_FLP( SKP_int *ind, /* O Index of best codebook vector */ diff --git a/src_FLP/SKP_Silk_apply_sine_window_FLP.c b/src_FLP/SKP_Silk_apply_sine_window_FLP.c index 8fcbbe206453e4d1ca335f9a6c198ac651e613ab..17e8f1c5524584120b81f9e79c93b690aa14ecd1 100644 --- a/src_FLP/SKP_Silk_apply_sine_window_FLP.c +++ b/src_FLP/SKP_Silk_apply_sine_window_FLP.c @@ -29,7 +29,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Apply sine window to signal vector. */ /* Window types: */ -/* 0 -> sine window from 0 to pi */ /* 1 -> sine window from 0 to pi/2 */ /* 2 -> sine window from pi/2 to pi */ void SKP_Silk_apply_sine_window_FLP( @@ -42,13 +41,12 @@ void SKP_Silk_apply_sine_window_FLP( SKP_int k; SKP_float freq, c, S0, S1; + SKP_assert( win_type == 1 || win_type == 2 ); + /* Length must be multiple of 4 */ SKP_assert( ( length & 3 ) == 0 ); freq = PI / ( length + 1 ); - if( win_type == 0 ) { - freq = 2.0f * freq; - } /* Approximation of 2 * cos(f) */ c = 2.0f - freq * freq; diff --git a/src_FLP/SKP_Silk_control_codec_FLP.c b/src_FLP/SKP_Silk_control_codec_FLP.c index ba75d03db820a7144086d40546b65b3ef2bd28bf..dd0e4d62cd161baec0717b7ccfb880e054fdba51 100644 --- a/src_FLP/SKP_Silk_control_codec_FLP.c +++ b/src_FLP/SKP_Silk_control_codec_FLP.c @@ -26,157 +26,73 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FLP.h" +#include "SKP_Silk_setup_complexity.h" -/* ToDo: Move the functions below to common to be able to use them in FLP control codec also */ SKP_INLINE SKP_int SKP_Silk_setup_resamplers( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int API_fs_Hz, /* I */ - SKP_int fs_kHz /* I */ + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ + SKP_int fs_kHz /* I Internal sampling rate (kHz) */ ); SKP_INLINE SKP_int SKP_Silk_setup_packetsize( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int PacketSize_ms /* I */ + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ + SKP_int PacketSize_ms /* I Packet length (ms) */ ); SKP_INLINE SKP_int SKP_Silk_setup_fs( SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int fs_kHz /* I */ -); - -SKP_INLINE SKP_int SKP_Silk_setup_complexity( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int Complexity /* I */ + SKP_int fs_kHz, /* I */ + SKP_int PacketSize_ms /* I */ ); SKP_INLINE SKP_int SKP_Silk_setup_rate( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int TargetRate_bps /* I */ + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ + SKP_int TargetRate_bps /* I Target max bitrate */ ); SKP_INLINE SKP_int SKP_Silk_setup_LBRR( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int INBandFEC_enabled /* I */ + SKP_Silk_encoder_state_FLP *psEnc /* I/O Pointer to Silk encoder state FLP */ ); -/* Control encoder SNR */ +/* Control encoder */ SKP_int SKP_Silk_control_encoder_FLP( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ - const SKP_int32 API_fs_Hz, /* I External (API) sampling rate (Hz) */ - const SKP_int max_internal_fs_kHz,/* I Maximum internal sampling rate (kHz) */ - const SKP_int PacketSize_ms, /* I Packet length (ms) */ - SKP_int32 TargetRate_bps, /* I Target max bitrate (if SNR_dB == 0) */ - const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ - const SKP_int INBandFEC_enabled, /* I Enable (1) / disable (0) inband FEC */ - const SKP_int DTX_enabled, /* I Enable / disable DTX */ - const SKP_int InputFramesize_ms, /* I Inputframe in ms */ - const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ + const SKP_int PacketSize_ms, /* I Packet length (ms) */ + const SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) */ + const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ + const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ ) { SKP_int fs_kHz, ret = 0; - /* State machine for the SWB/WB switching */ - fs_kHz = psEnc->sCmn.fs_kHz; - - /* Only switch during low speech activity, when no frames are sitting in the payload buffer */ - if( API_fs_Hz == 8000 || fs_kHz == 0 || API_fs_Hz < fs_kHz * 1000 || fs_kHz > max_internal_fs_kHz ) { - /* Switching is not possible, encoder just initialized, internal mode higher than external, */ - /* or internal mode higher than maximum allowed internal mode */ - fs_kHz = SKP_min( SKP_DIV32_16( API_fs_Hz, 1000 ), max_internal_fs_kHz ); - } else { - /* Accumulate the difference between the target rate and limit for switching down */ - psEnc->sCmn.bitrateDiff += SKP_MUL( InputFramesize_ms, TargetRate_bps - psEnc->sCmn.bitrate_threshold_down ); - psEnc->sCmn.bitrateDiff = SKP_min( psEnc->sCmn.bitrateDiff, 0 ); - - if( psEnc->speech_activity < 0.5f && psEnc->sCmn.nFramesInPayloadBuf == 0 ) { /* Low speech activity and payload buffer empty */ - /* Check if we should switch down */ -#if SWITCH_TRANSITION_FILTERING - if( ( psEnc->sCmn.sLP.transition_frame_no == 0 ) && /* Transition phase not active */ - ( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD || /* Bitrate threshold is met */ - ( psEnc->sCmn.sSWBdetect.WB_detected * psEnc->sCmn.fs_kHz == 24 ) ) ) { /* Forced down-switching due to WB input */ - psEnc->sCmn.sLP.transition_frame_no = 1; /* Begin transition phase */ - psEnc->sCmn.sLP.mode = 0; /* Switch down */ - } else if( - ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && /* Transition phase complete */ - ( psEnc->sCmn.sLP.mode == 0 ) ) { /* Ready to switch down */ - psEnc->sCmn.sLP.transition_frame_no = 0; /* Ready for new transition phase */ -#else - if( psEnc->sCmn.bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) { /* Bitrate threshold is met */ -#endif - psEnc->sCmn.bitrateDiff = 0; - - /* Switch to a lower sample frequency */ - if( psEnc->sCmn.fs_kHz == 24 ) { - fs_kHz = 16; - } else if( psEnc->sCmn.fs_kHz == 16 ) { - fs_kHz = 12; - } else { - SKP_assert( psEnc->sCmn.fs_kHz == 12 ); - fs_kHz = 8; - } - } - - /* Check if we should switch up */ - if( ( ( psEnc->sCmn.fs_kHz * 1000 < API_fs_Hz ) && - ( TargetRate_bps >= psEnc->sCmn.bitrate_threshold_up ) && - ( psEnc->sCmn.sSWBdetect.WB_detected * psEnc->sCmn.fs_kHz != 16 ) ) && - ( ( psEnc->sCmn.fs_kHz == 16 ) && ( max_internal_fs_kHz >= 24 ) || - ( psEnc->sCmn.fs_kHz == 12 ) && ( max_internal_fs_kHz >= 16 ) || - ( psEnc->sCmn.fs_kHz == 8 ) && ( max_internal_fs_kHz >= 12 ) ) -#if SWITCH_TRANSITION_FILTERING - && ( psEnc->sCmn.sLP.transition_frame_no == 0 ) ) { /* No transition phase running, ready to switch */ - psEnc->sCmn.sLP.mode = 1; /* Switch up */ -#else - ) { -#endif - psEnc->sCmn.bitrateDiff = 0; - - /* Switch to a higher sample frequency */ - if( psEnc->sCmn.fs_kHz == 8 ) { - fs_kHz = 12; - } else if( psEnc->sCmn.fs_kHz == 12 ) { - fs_kHz = 16; - } else { - SKP_assert( psEnc->sCmn.fs_kHz == 16 ); - fs_kHz = 24; - } - } + if( psEnc->sCmn.controlled_since_last_payload != 0 ) { + if( psEnc->sCmn.API_fs_Hz != psEnc->sCmn.prev_API_fs_Hz && psEnc->sCmn.fs_kHz > 0 ) { + /* Change in API sampling rate in the middle of encoding a packet */ + ret += SKP_Silk_setup_resamplers( psEnc, psEnc->sCmn.fs_kHz ); } + return ret; } -#if SWITCH_TRANSITION_FILTERING - /* After switching up, stop transition filter during speech inactivity */ - if( ( psEnc->sCmn.sLP.mode == 1 ) && - ( psEnc->sCmn.sLP.transition_frame_no >= TRANSITION_FRAMES_UP ) && - ( psEnc->speech_activity < 0.5f ) && - ( psEnc->sCmn.nFramesInPayloadBuf == 0 ) ) { - - psEnc->sCmn.sLP.transition_frame_no = 0; - - /* Reset transition filter state */ - SKP_memset( psEnc->sCmn.sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) ); - } -#endif + /* Beyond this point we know that there are no previously coded frames in the payload buffer */ /********************************************/ - /* Prepare resampler and buffered data */ + /* Determine internal sampling rate */ /********************************************/ - SKP_Silk_setup_resamplers( psEnc, API_fs_Hz, fs_kHz ); + fs_kHz = SKP_Silk_control_audio_bandwidth( &psEnc->sCmn, TargetRate_bps ); /********************************************/ - /* Set packet size */ + /* Prepare resampler and buffered data */ /********************************************/ - ret += SKP_Silk_setup_packetsize( psEnc, PacketSize_ms ); + ret += SKP_Silk_setup_resamplers( psEnc, fs_kHz ); /********************************************/ /* Set internal sampling frequency */ /********************************************/ - ret += SKP_Silk_setup_fs( psEnc, fs_kHz ); + ret += SKP_Silk_setup_fs( psEnc, fs_kHz, PacketSize_ms ); /********************************************/ /* Set encoding complexity */ /********************************************/ - ret += SKP_Silk_setup_complexity( psEnc, Complexity ); + ret += SKP_Silk_setup_complexity( &psEnc->sCmn, Complexity ); /********************************************/ /* Set bitrate/coding quality */ @@ -194,15 +110,9 @@ SKP_int SKP_Silk_control_encoder_FLP( /********************************************/ /* Set LBRR usage */ /********************************************/ - ret += SKP_Silk_setup_LBRR( psEnc, INBandFEC_enabled ); + ret += SKP_Silk_setup_LBRR( psEnc ); - /********************************************/ - /* Set DTX mode */ - /********************************************/ - if( DTX_enabled < 0 || DTX_enabled > 1 ) { - ret = SKP_SILK_ENC_INVALID_DTX_SETTING; - } - psEnc->sCmn.useDTX = DTX_enabled; + psEnc->sCmn.controlled_since_last_payload = 1; return ret; } @@ -210,7 +120,7 @@ SKP_int SKP_Silk_control_encoder_FLP( /* Control low bitrate redundancy usage */ void SKP_Silk_LBRR_ctrl_FLP( SKP_Silk_encoder_state_FLP *psEnc, /* I Encoder state FLP */ - SKP_Silk_encoder_control *psEncCtrl /* I/O Encoder control */ + SKP_Silk_encoder_control *psEncCtrlC /* I/O Encoder control */ ) { SKP_int LBRR_usage; @@ -221,12 +131,12 @@ void SKP_Silk_LBRR_ctrl_FLP( /* Usage Control based on sensitivity and packet loss caracteristics */ /* For now only enable adding to next for active frames. Make more complex later */ LBRR_usage = SKP_SILK_NO_LBRR; - if( psEnc->speech_activity > LBRR_SPEECH_ACTIVITY_THRES && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { // nb! maybe multiply loss prob and speech activity - LBRR_usage = SKP_SILK_ADD_LBRR_TO_PLUS1; + if( psEnc->speech_activity > LBRR_SPEECH_ACTIVITY_THRES && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { + LBRR_usage = SKP_SILK_LBRR; } - psEncCtrl->LBRR_usage = LBRR_usage; + psEncCtrlC->LBRR_usage = LBRR_usage; } else { - psEncCtrl->LBRR_usage = SKP_SILK_NO_LBRR; + psEncCtrlC->LBRR_usage = SKP_SILK_NO_LBRR; } } @@ -239,90 +149,91 @@ SKP_INLINE SKP_int SKP_Silk_setup_packetsize( if( ( PacketSize_ms != 10 ) && ( PacketSize_ms != 20 ) && ( PacketSize_ms != 40 ) && - ( PacketSize_ms != 60 ) && - ( PacketSize_ms != 80 ) && - ( PacketSize_ms != 100 ) ) { + ( PacketSize_ms != 60 ) ) { ret = SKP_SILK_ENC_PACKET_SIZE_NOT_SUPPORTED; } else { if( PacketSize_ms != psEnc->sCmn.PacketSize_ms ) { if( PacketSize_ms == 10 ) { - if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { - /* Only allowed when the payload buffer is empty */ - psEnc->sCmn.nb_subfr = MAX_NB_SUBFR >> 1; - psEnc->sCmn.frame_length = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr ); - psEnc->sCmn.PacketSize_ms = PacketSize_ms; - psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, psEnc->sCmn.fs_kHz ); - /* Packet length changes. Reset LBRR buffer */ - SKP_Silk_LBRR_reset( &psEnc->sCmn ); - } + /* Only allowed when the payload buffer is empty */ + psEnc->sCmn.nb_subfr = MAX_NB_SUBFR >> 1; + psEnc->sCmn.PacketSize_ms = PacketSize_ms; + psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS_2_SF, psEnc->sCmn.fs_kHz ); + /* Packet length changes. Reset LBRR buffer */ + SKP_Silk_LBRR_reset( &psEnc->sCmn ); } else{ psEnc->sCmn.nb_subfr = MAX_NB_SUBFR; - psEnc->sCmn.frame_length = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr ); psEnc->sCmn.PacketSize_ms = PacketSize_ms; psEnc->sPred.pitch_LPC_win_length = SKP_SMULBB( FIND_PITCH_LPC_WIN_MS, psEnc->sCmn.fs_kHz ); /* Packet length changes. Reset LBRR buffer */ SKP_Silk_LBRR_reset( &psEnc->sCmn ); } } + psEnc->sCmn.frame_length = SKP_SMULBB( psEnc->sCmn.subfr_length, psEnc->sCmn.nb_subfr ); } + return(ret); } SKP_INLINE SKP_int SKP_Silk_setup_resamplers( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int API_fs_Hz, /* I */ - SKP_int fs_kHz /* I */ + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ + SKP_int fs_kHz /* I External (API) sampling rate (Hz) */ ) { SKP_int ret = SKP_SILK_NO_ERROR; - if( psEnc->sCmn.fs_kHz != fs_kHz || psEnc->sCmn.prev_API_fs_Hz != API_fs_Hz ) { + if( psEnc->sCmn.fs_kHz != fs_kHz || psEnc->sCmn.prev_API_fs_Hz != psEnc->sCmn.API_fs_Hz ) { - /* Allocate space for worst case temporary upsampling, 8 to 48 kHz, so a factor 6 */ - SKP_int16 x_buf_API_fs_Hz[ ( MAX_API_FS_KHZ / 8 ) * ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) ]; - SKP_int16 x_bufFIX[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; + if( psEnc->sCmn.fs_kHz == 0 ) { + /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */ + ret += SKP_Silk_resampler_init( &psEnc->sCmn.resampler_state, psEnc->sCmn.API_fs_Hz, fs_kHz * 1000 ); + } else { + /* Allocate space for worst case temporary upsampling, 8 to 48 kHz, so a factor 6 */ + SKP_int16 x_buf_API_fs_Hz[ ( 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ) * ( MAX_API_FS_KHZ / 8 ) ]; + SKP_int16 x_bufFIX[ 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ]; - SKP_int32 nSamples_temp = 2 * psEnc->sCmn.frame_length + psEnc->sCmn.la_shape; + SKP_int32 nSamples_temp = 2 * psEnc->sCmn.frame_length + LA_SHAPE_MS * psEnc->sCmn.fs_kHz; - SKP_float2short_array( x_bufFIX, psEnc->x_buf, 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ); + SKP_float2short_array( x_bufFIX, psEnc->x_buf, nSamples_temp ); - if( fs_kHz * 1000 < API_fs_Hz && psEnc->sCmn.fs_kHz != 0 ) { - /* Resample buffered data in x_buf to API_fs_Hz */ + if( fs_kHz * 1000 < psEnc->sCmn.API_fs_Hz && psEnc->sCmn.fs_kHz != 0 ) { + /* Resample buffered data in x_buf to API_fs_Hz */ - SKP_Silk_resampler_state_struct temp_resampler_state; + SKP_Silk_resampler_state_struct temp_resampler_state; - /* Initialize resampler for temporary resampling of x_buf data to API_fs_Hz */ - ret += SKP_Silk_resampler_init( &temp_resampler_state, psEnc->sCmn.fs_kHz * 1000, API_fs_Hz ); + /* Initialize resampler for temporary resampling of x_buf data to API_fs_Hz */ + ret += SKP_Silk_resampler_init( &temp_resampler_state, psEnc->sCmn.fs_kHz * 1000, psEnc->sCmn.API_fs_Hz ); - /* Temporary resampling of x_buf data to API_fs_Hz */ - ret += SKP_Silk_resampler( &temp_resampler_state, x_buf_API_fs_Hz, x_bufFIX, nSamples_temp ); + /* Temporary resampling of x_buf data to API_fs_Hz */ + ret += SKP_Silk_resampler( &temp_resampler_state, x_buf_API_fs_Hz, x_bufFIX, nSamples_temp ); - /* Calculate number of samples that has been temporarily upsampled */ - nSamples_temp = SKP_DIV32_16( nSamples_temp * API_fs_Hz, psEnc->sCmn.fs_kHz * 1000 ); + /* Calculate number of samples that has been temporarily upsampled */ + nSamples_temp = SKP_DIV32_16( nSamples_temp * psEnc->sCmn.API_fs_Hz, psEnc->sCmn.fs_kHz * 1000 ); - /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */ - ret += SKP_Silk_resampler_init( &psEnc->sCmn.resampler_state, API_fs_Hz, fs_kHz * 1000 ); + /* Initialize the resampler for enc_API.c preparing resampling from API_fs_Hz to fs_kHz */ + ret += SKP_Silk_resampler_init( &psEnc->sCmn.resampler_state, psEnc->sCmn.API_fs_Hz, fs_kHz * 1000 ); - } else { - /* Copy data */ - SKP_memcpy( x_buf_API_fs_Hz, x_bufFIX, nSamples_temp * sizeof( SKP_int16 ) ); - } + } else { + /* Copy data */ + SKP_memcpy( x_buf_API_fs_Hz, x_bufFIX, nSamples_temp * sizeof( SKP_int16 ) ); + } - if( 1000 * fs_kHz != API_fs_Hz ) { - /* Correct resampler state (unless resampling by a factor 1) by resampling buffered data from API_fs_Hz to fs_kHz */ - ret += SKP_Silk_resampler( &psEnc->sCmn.resampler_state, x_bufFIX, x_buf_API_fs_Hz, nSamples_temp ); + if( 1000 * fs_kHz != psEnc->sCmn.API_fs_Hz ) { + /* Correct resampler state (unless resampling by a factor 1) by resampling buffered data from API_fs_Hz to fs_kHz */ + ret += SKP_Silk_resampler( &psEnc->sCmn.resampler_state, x_bufFIX, x_buf_API_fs_Hz, nSamples_temp ); + } + SKP_short2float_array( psEnc->x_buf, x_bufFIX, ( 2 * MAX_FRAME_LENGTH_MS + LA_SHAPE_MS ) * fs_kHz ); } - SKP_short2float_array( psEnc->x_buf, x_bufFIX, 2 * MAX_FRAME_LENGTH + LA_SHAPE_MAX ); } - psEnc->sCmn.prev_API_fs_Hz = API_fs_Hz; + psEnc->sCmn.prev_API_fs_Hz = psEnc->sCmn.API_fs_Hz; return(ret); } SKP_INLINE SKP_int SKP_Silk_setup_fs( SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int fs_kHz /* I */ + SKP_int fs_kHz, /* I */ + SKP_int PacketSize_ms /* I */ ) { SKP_int ret = SKP_SILK_NO_ERROR; @@ -380,10 +291,8 @@ SKP_INLINE SKP_int SKP_Silk_setup_fs( psEnc->psNLSF_CB_FLP[ 1 ] = &SKP_Silk_NLSF_CB1_16_FLP; } psEnc->sCmn.subfr_length = SUB_FRAME_LENGTH_MS * fs_kHz; - psEnc->sCmn.frame_length = psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr; psEnc->sCmn.ltp_mem_length = LTP_MEM_LENGTH_MS * fs_kHz; psEnc->sCmn.la_pitch = LA_PITCH_MS * fs_kHz; - psEnc->sCmn.la_shape = LA_SHAPE_MS * fs_kHz; psEnc->sPred.min_pitch_lag = 3 * fs_kHz; psEnc->sPred.max_pitch_lag = 18 * fs_kHz; if( psEnc->sCmn.nb_subfr == MAX_NB_SUBFR ){ @@ -409,75 +318,22 @@ SKP_INLINE SKP_int SKP_Silk_setup_fs( psEnc->sCmn.bitrate_threshold_down = 0; } psEnc->sCmn.fs_kHz_changed = 1; - - /* Check that settings are valid */ - SKP_assert( ( psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr ) == psEnc->sCmn.frame_length ); } - return( ret ); -} -SKP_INLINE SKP_int SKP_Silk_setup_complexity( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int Complexity /* I */ -) -{ - SKP_int ret = SKP_SILK_NO_ERROR; + /********************************************/ + /* Set packet size */ + /********************************************/ + ret += SKP_Silk_setup_packetsize( psEnc, PacketSize_ms ); /* Check that settings are valid */ - if( LOW_COMPLEXITY_ONLY && Complexity != 0 ) { - ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING; - } - - /* Set encoding complexity */ - if( Complexity == 0 || LOW_COMPLEXITY_ONLY ) { - /* Low complexity */ - psEnc->sCmn.Complexity = 0; - psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_LC_MODE; - psEnc->pitchEstimationThreshold = FIND_PITCH_CORRELATION_THRESHOLD_LC_MODE; - psEnc->sCmn.pitchEstimationLPCOrder = 8; - psEnc->sCmn.shapingLPCOrder = 8; - psEnc->sCmn.nStatesDelayedDecision = 1; - psEnc->sCmn.useInterpolatedNLSFs = 0; - psEnc->sCmn.LTPQuantLowComplexity = 1; - psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS_LC_MODE; - } else if( Complexity == 1 ) { - /* Medium complexity */ - psEnc->sCmn.Complexity = 1; - psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_MC_MODE; - psEnc->pitchEstimationThreshold = FIND_PITCH_CORRELATION_THRESHOLD_MC_MODE; - psEnc->sCmn.pitchEstimationLPCOrder = 12; - psEnc->sCmn.shapingLPCOrder = 12; - psEnc->sCmn.nStatesDelayedDecision = 2; - psEnc->sCmn.useInterpolatedNLSFs = 0; - psEnc->sCmn.LTPQuantLowComplexity = 0; - psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS_MC_MODE; - } else if( Complexity == 2 ) { - /* High complexity */ - psEnc->sCmn.Complexity = 2; - psEnc->sCmn.pitchEstimationComplexity = PITCH_EST_COMPLEXITY_HC_MODE; - psEnc->pitchEstimationThreshold = FIND_PITCH_CORRELATION_THRESHOLD_HC_MODE; - psEnc->sCmn.pitchEstimationLPCOrder = 16; - psEnc->sCmn.shapingLPCOrder = 16; - psEnc->sCmn.nStatesDelayedDecision = 4; - psEnc->sCmn.useInterpolatedNLSFs = 1; - psEnc->sCmn.LTPQuantLowComplexity = 0; - psEnc->sCmn.NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS; - } else { - ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING; - } - - /* Do not allow higher pitch estimation LPC order than predict LPC order */ - psEnc->sCmn.pitchEstimationLPCOrder = SKP_min_int( psEnc->sCmn.pitchEstimationLPCOrder, psEnc->sCmn.predictLPCOrder ); - - SKP_assert( psEnc->sCmn.pitchEstimationLPCOrder <= MAX_FIND_PITCH_LPC_ORDER ); - SKP_assert( psEnc->sCmn.shapingLPCOrder <= MAX_SHAPE_LPC_ORDER ); - SKP_assert( psEnc->sCmn.nStatesDelayedDecision <= MAX_DEL_DEC_STATES ); + SKP_assert( ( psEnc->sCmn.subfr_length * psEnc->sCmn.nb_subfr ) == psEnc->sCmn.frame_length ); + return( ret ); } SKP_INLINE SKP_int SKP_Silk_setup_rate( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int TargetRate_bps /* I */ + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ + SKP_int TargetRate_bps /* I Target max bitrate */ ) { SKP_int k, ret = SKP_SILK_NO_ERROR; @@ -485,16 +341,6 @@ SKP_INLINE SKP_int SKP_Silk_setup_rate( const SKP_int32 *rateTable; /* Set bitrate/coding quality */ - TargetRate_bps = SKP_min( TargetRate_bps, 100000 ); - if( psEnc->sCmn.fs_kHz == 8 ) { - TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_NB_BPS ); - } else if( psEnc->sCmn.fs_kHz == 12 ) { - TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_MB_BPS ); - } else if( psEnc->sCmn.fs_kHz == 16 ) { - TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_WB_BPS ); - } else { - TargetRate_bps = SKP_max( TargetRate_bps, MIN_TARGET_RATE_SWB_BPS ); - } if( TargetRate_bps != psEnc->sCmn.TargetRate_bps ) { psEnc->sCmn.TargetRate_bps = TargetRate_bps; @@ -522,57 +368,53 @@ SKP_INLINE SKP_int SKP_Silk_setup_rate( } SKP_INLINE SKP_int SKP_Silk_setup_LBRR( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O */ - SKP_int INBandFEC_enabled /* I */ + SKP_Silk_encoder_state_FLP *psEnc /* I/O Pointer to Silk encoder state FLP */ ) { SKP_int ret = SKP_SILK_NO_ERROR; - SKP_int32 LBRRRate_thres_bps; #if USE_LBRR - if( INBandFEC_enabled < 0 || INBandFEC_enabled > 1 ) { + SKP_int32 LBRRRate_thres_bps; + + if( psEnc->sCmn.useInBandFEC < 0 || psEnc->sCmn.useInBandFEC > 1 ) { ret = SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING; } - /* Only change settings if first frame in packet */ - if( psEnc->sCmn.nFramesInPayloadBuf == 0 ) { - - psEnc->sCmn.LBRR_enabled = INBandFEC_enabled; - if( psEnc->sCmn.fs_kHz == 8 ) { - LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 9000; - } else if( psEnc->sCmn.fs_kHz == 12 ) { - LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 6000;; - } else if( psEnc->sCmn.fs_kHz == 16 ) { - LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 3000; - } else { - LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS; - } + psEnc->sCmn.LBRR_enabled = psEnc->sCmn.useInBandFEC; + if( psEnc->sCmn.fs_kHz == 8 ) { + LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 9000; + } else if( psEnc->sCmn.fs_kHz == 12 ) { + LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 6000;; + } else if( psEnc->sCmn.fs_kHz == 16 ) { + LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS - 3000; + } else { + LBRRRate_thres_bps = INBAND_FEC_MIN_RATE_BPS; + } - if( psEnc->sCmn.TargetRate_bps >= LBRRRate_thres_bps ) { - /* Set gain increase / rate reduction for LBRR usage */ - /* Coarsely tuned with PESQ for now. */ - /* Linear regression coefs G = 8 - 0.5 * loss */ - /* Meaning that at 16% loss main rate and redundant rate is the same, -> G = 0 */ - psEnc->sCmn.LBRR_GainIncreases = SKP_max_int( 8 - SKP_RSHIFT( psEnc->sCmn.PacketLoss_perc, 1 ), 0 ); - - /* Set main stream rate compensation */ - if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { - /* Tuned to give aprox same mean / weighted bitrate as no inband FEC */ - psEnc->inBandFEC_SNR_comp = 6.0f - 0.5f * psEnc->sCmn.LBRR_GainIncreases; - } else { - psEnc->inBandFEC_SNR_comp = 0; - psEnc->sCmn.LBRR_enabled = 0; - } + if( psEnc->sCmn.TargetRate_bps >= LBRRRate_thres_bps ) { + /* Set gain increase / rate reduction for LBRR usage */ + /* Coarsely tuned with PESQ for now. */ + /* Linear regression coefs G = 8 - 0.5 * loss */ + /* Meaning that at 16% loss main rate and redundant rate is the same, -> G = 0 */ + psEnc->sCmn.LBRR_GainIncreases = SKP_max_int( 8 - SKP_RSHIFT( psEnc->sCmn.PacketLoss_perc, 1 ), 0 ); + + /* Set main stream rate compensation */ + if( psEnc->sCmn.LBRR_enabled && psEnc->sCmn.PacketLoss_perc > LBRR_LOSS_THRES ) { + /* Tuned to give approx same mean / weighted bitrate as no inband FEC */ + psEnc->inBandFEC_SNR_comp = 6.0f - 0.5f * psEnc->sCmn.LBRR_GainIncreases; } else { - psEnc->inBandFEC_SNR_comp = 0; - psEnc->sCmn.LBRR_enabled = 0; + psEnc->inBandFEC_SNR_comp = 0; + psEnc->sCmn.LBRR_enabled = 0; } + } else { + psEnc->inBandFEC_SNR_comp = 0; + psEnc->sCmn.LBRR_enabled = 0; } #else - if( INBandFEC_enabled != 0 ) { + if( psEnc->sCmn.LBRR_enabled != 0 ) { ret = SKP_SILK_ENC_INVALID_INBAND_FEC_SETTING; + psEnc->sCmn.LBRR_enabled = 0; } - psEnc->sCmn.LBRR_enabled = 0; #endif - return( ret ); + return ret; } diff --git a/src_FLP/SKP_Silk_encode_frame_FLP.c b/src_FLP/SKP_Silk_encode_frame_FLP.c index 8d044897d5dc0ec1e11394cc73173a1b9cb4a584..664b03708ad121e218db5ac3aab405842020b5e2 100644 --- a/src_FLP/SKP_Silk_encode_frame_FLP.c +++ b/src_FLP/SKP_Silk_encode_frame_FLP.c @@ -1,14 +1,41 @@ -#include <stdlib.h> +/*********************************************************************** +Copyright (c) 2006-2010, Skype Limited. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, (subject to the limitations in the disclaimer below) +are permitted provided that the following conditions are met: +- Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +- Neither the name of Skype Limited, nor the names of specific +contributors, may be used to endorse or promote products derived from +this software without specific prior written permission. +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED +BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +***********************************************************************/ + #include "SKP_Silk_main_FLP.h" +#include "SKP_Silk_tuning_parameters.h" /****************/ /* Encode frame */ /****************/ SKP_int SKP_Silk_encode_frame_FLP( SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ - SKP_int16 *pnBytesOut, /* I/O Number of payload bytes; */ + SKP_int32 *pnBytesOut, /* I/O Number of payload bytes */ /* input: max length; output: used */ - ec_enc *psRangeEnc, /* I/O compressor data structure */ + ec_enc *psRangeEnc, /* I/O compressor data structure */ const SKP_int16 *pIn /* I Input speech frame */ ) { @@ -27,7 +54,6 @@ SKP_int SKP_Silk_encode_frame_FLP( const SKP_uint16 *FrameTermination_CDF; - sEncCtrl.sCmn.LBRR_usage = 0; TIC(ENCODE_FRAME) sEncCtrl.sCmn.Seed = psEnc->sCmn.frameCounter++ & 3; @@ -67,11 +93,11 @@ TOC(HP_IN) /*******************************************/ /* Copy new frame to front of input buffer */ /*******************************************/ - SKP_short2float_array( x_frame + psEnc->sCmn.la_shape, pIn_HP_LP, psEnc->sCmn.frame_length ); + SKP_short2float_array( x_frame + LA_SHAPE_MS * psEnc->sCmn.fs_kHz, pIn_HP_LP, psEnc->sCmn.frame_length ); /* Add tiny signal to avoid high CPU load from denormalized floating point numbers */ for( k = 0; k < 8; k++ ) { - x_frame[ psEnc->sCmn.la_shape + k * ( psEnc->sCmn.frame_length >> 3 ) ] += ( 1 - ( k & 2 ) ) * 1e-6f; + x_frame[ LA_SHAPE_MS * psEnc->sCmn.fs_kHz + k * ( psEnc->sCmn.frame_length >> 3 ) ] += ( 1 - ( k & 2 ) ) * 1e-6f; } /*****************************************/ @@ -123,8 +149,7 @@ TOC(LBRR) /* Noise shaping quantization */ /*****************************************/ TIC(NSQ) - SKP_Silk_NSQ_wrapper_FLP( psEnc, &sEncCtrl, xfw, - &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 0 ); + SKP_Silk_NSQ_wrapper_FLP( psEnc, &sEncCtrl, xfw, &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 0 ); TOC(NSQ) /**************************************************/ @@ -166,11 +191,11 @@ TOC(ENCODE_PARAMS) /****************************************/ /* Update input buffer */ SKP_memmove( psEnc->x_buf, &psEnc->x_buf[ psEnc->sCmn.frame_length ], - ( psEnc->sCmn.ltp_mem_length + psEnc->sCmn.la_shape ) * sizeof( SKP_float ) ); + ( psEnc->sCmn.ltp_mem_length + LA_SHAPE_MS * psEnc->sCmn.fs_kHz ) * sizeof( SKP_float ) ); /* Parameters needed for next frame */ - psEnc->sCmn.prev_sigtype = sEncCtrl.sCmn.sigtype; - psEnc->sCmn.prevLag = sEncCtrl.sCmn.pitchL[ psEnc->sCmn.nb_subfr - 1 ]; + psEnc->sCmn.prev_sigtype = sEncCtrl.sCmn.sigtype; + psEnc->sCmn.prevLag = sEncCtrl.sCmn.pitchL[ psEnc->sCmn.nb_subfr - 1 ]; psEnc->sCmn.first_frame_after_reset = 0; if( 0 ) { //psEnc->sCmn.sRC.error ) { @@ -188,18 +213,14 @@ TOC(ENCODE_PARAMS) LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK; /* Check if FEC information should be added */ - frame_terminator = SKP_SILK_LAST_FRAME; - if( psEnc->sCmn.LBRR_buffer[ LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS1 ) { - frame_terminator = SKP_SILK_LBRR_VER1; - } - if( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage == SKP_SILK_ADD_LBRR_TO_PLUS2 ) { - frame_terminator = SKP_SILK_LBRR_VER2; - LBRR_idx = psEnc->sCmn.oldest_LBRR_idx; - } + //frame_terminator = psEnc->sCmn.LBRR_buffer[ LBRR_idx ].usage; + frame_terminator = SKP_SILK_NO_LBRR; /* Add the frame termination info to stream */ ec_encode_bin( psRangeEnc, FrameTermination_CDF[ frame_terminator ], FrameTermination_CDF[ frame_terminator + 1 ], 16 ); + + /* Code excitation signal */ for( i = 0; i < psEnc->sCmn.nFramesInPayloadBuf; i++ ) { SKP_Silk_encode_pulses( psRangeEnc, psEnc->sCmn.sigtype[ i ], psEnc->sCmn.QuantOffsetType[ i ], &psEnc->sCmn.q[ i * psEnc->sCmn.frame_length ], psEnc->sCmn.frame_length ); @@ -241,9 +262,9 @@ TOC(ENCODE_PARAMS) SKP_memcpy( psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].payload, LBRRpayload, nBytesLBRR * sizeof( SKP_uint8 ) ); psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].nBytes = nBytesLBRR; - /* The below line describes how FEC should be used */ + /* The line below describes how FEC should be used */ psEnc->sCmn.LBRR_buffer[ psEnc->sCmn.oldest_LBRR_idx ].usage = sEncCtrl.sCmn.LBRR_usage; - psEnc->sCmn.oldest_LBRR_idx = ( ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK ); + psEnc->sCmn.oldest_LBRR_idx = ( psEnc->sCmn.oldest_LBRR_idx + 1 ) & LBRR_IDX_MASK; } else { /* Not enough space: Payload will be discarded */ @@ -252,17 +273,12 @@ TOC(ENCODE_PARAMS) ret = SKP_SILK_ENC_PAYLOAD_BUF_TOO_SHORT; } - /* Reset the number of frames in payload buffer */ + /* Reset the number of frames in payload buffer */ psEnc->sCmn.nFramesInPayloadBuf = 0; } else { - /* No payload for you this time */ + /* No payload this time */ *pnBytesOut = 0; - /* Encode that more frames follows */ - frame_terminator = SKP_SILK_MORE_FRAMES; - ec_encode_bin( psRangeEnc, FrameTermination_CDF[ frame_terminator ], - FrameTermination_CDF[ frame_terminator + 1 ], 16 ); - /* Payload length so far */ nBytes = SKP_RSHIFT( ec_enc_tell( psRangeEnc, 0 ) + 7, 3 ); @@ -271,9 +287,14 @@ TOC(ENCODE_PARAMS) &psEnc->sCmn.q[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ] ); } - /* simulate number of ms buffered in channel because of exceeding TargetRate */ + /* Check for arithmetic coder errors */ + if( 0 ) { //psEnc->sCmn.sRC.error ) { + ret = SKP_SILK_ENC_INTERNAL_ERROR; + } + + /* Simulate number of ms buffered in channel because of exceeding TargetRate */ psEnc->BufferedInChannel_ms += ( 8.0f * 1000.0f * ( nBytes - psEnc->sCmn.nBytesInPayloadBuf ) ) / psEnc->sCmn.TargetRate_bps; - psEnc->BufferedInChannel_ms -= SUB_FRAME_LENGTH_MS * psEnc->sCmn.nb_subfr; + psEnc->BufferedInChannel_ms -= SKP_SMULBB( SUB_FRAME_LENGTH_MS, psEnc->sCmn.nb_subfr ); psEnc->BufferedInChannel_ms = SKP_LIMIT_float( psEnc->BufferedInChannel_ms, 0.0f, 100.0f ); psEnc->sCmn.nBytesInPayloadBuf = nBytes; @@ -327,7 +348,9 @@ void SKP_Silk_LBRR_encode_FLP( SKP_int typeOffset, LTP_scaleIndex, Rate_only_parameters = 0; ec_byte_buffer range_enc_celt_buf; - /* Control use of inband LBRR */ + /*******************************************/ + /* Control use of inband LBRR */ + /*******************************************/ SKP_Silk_LBRR_ctrl_FLP( psEnc, &psEncCtrl->sCmn ); if( psEnc->sCmn.LBRR_enabled ) { @@ -358,9 +381,9 @@ void SKP_Silk_LBRR_encode_FLP( psEnc->sCmn.LBRRprevLastGainIndex = psEnc->sShape.LastGainIndex; /* Increase Gains to get target LBRR rate */ psEncCtrl->sCmn.GainsIndices[ 0 ] += psEnc->sCmn.LBRR_GainIncreases; - psEncCtrl->sCmn.GainsIndices[ 0 ] = SKP_LIMIT( psEncCtrl->sCmn.GainsIndices[ 0 ], 0, N_LEVELS_QGAIN - 1 ); + psEncCtrl->sCmn.GainsIndices[ 0 ] = SKP_LIMIT_int( psEncCtrl->sCmn.GainsIndices[ 0 ], 0, N_LEVELS_QGAIN - 1 ); } - /* Decode to get Gains in sync with decoder */ + /* Decode to get gains in sync with decoder */ SKP_Silk_gains_dequant( Gains_Q16, psEncCtrl->sCmn.GainsIndices, &psEnc->sCmn.LBRRprevLastGainIndex, psEnc->sCmn.nFramesInPayloadBuf, psEnc->sCmn.nb_subfr ); @@ -372,12 +395,9 @@ void SKP_Silk_LBRR_encode_FLP( /*****************************************/ /* Noise shaping quantization */ /*****************************************/ - SKP_Silk_NSQ_wrapper_FLP( psEnc, psEncCtrl, xfw, - &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 1 ); + SKP_Silk_NSQ_wrapper_FLP( psEnc, psEncCtrl, xfw, &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 1 ); } else { - SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 0, - psEnc->sCmn.frame_length * sizeof( SKP_int ) ); - + SKP_memset( &psEnc->sCmn.q_LBRR[ psEnc->sCmn.nFramesInPayloadBuf * psEnc->sCmn.frame_length ], 0, psEnc->sCmn.frame_length * sizeof( SKP_int8 ) ); psEncCtrl->sCmn.LTP_scaleIndex = 0; } /****************************************/ @@ -395,10 +415,7 @@ void SKP_Silk_LBRR_encode_FLP( /* Encode Parameters */ /****************************************/ SKP_Silk_encode_parameters( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sCmn.sRC_LBRR ); - - /****************************************/ - /* Encode Parameters */ - /****************************************/ + if( psEnc->sCmn.sRC_LBRR.error ) { /* Encoder returned error: Clear payload buffer */ nFramesInPayloadBuf = 0; @@ -446,12 +463,12 @@ void SKP_Silk_LBRR_encode_FLP( *pnBytesOut = nBytes; } else { - /* Not enough space: Payload will be discarded */ + /* Not enough space: payload will be discarded */ *pnBytesOut = 0; SKP_assert( 0 ); } } else { - /* No payload for you this time */ + /* No payload this time */ *pnBytesOut = 0; /* Encode that more frames follows */ @@ -461,8 +478,8 @@ void SKP_Silk_LBRR_encode_FLP( } /* Restore original Gains */ - SKP_memcpy( psEncCtrl->sCmn.GainsIndices, TempGainsIndices, psEnc->sCmn.nb_subfr * sizeof( SKP_int ) ); - SKP_memcpy( psEncCtrl->Gains, TempGains, psEnc->sCmn.nb_subfr * sizeof( SKP_float ) ); + SKP_memcpy( psEncCtrl->sCmn.GainsIndices, TempGainsIndices, psEnc->sCmn.nb_subfr * sizeof( SKP_int ) ); + SKP_memcpy( psEncCtrl->Gains, TempGains, psEnc->sCmn.nb_subfr * sizeof( SKP_float ) ); /* Restore LTP scale index and typeoffset */ psEncCtrl->sCmn.LTP_scaleIndex = LTP_scaleIndex; diff --git a/src_FLP/SKP_Silk_find_LPC_FLP.c b/src_FLP/SKP_Silk_find_LPC_FLP.c index 88f135854e2fb51854f159e4b475f0c7473fb542..e5ffa7e4757e1a4c26c2b5a237dea4acf4297159 100644 --- a/src_FLP/SKP_Silk_find_LPC_FLP.c +++ b/src_FLP/SKP_Silk_find_LPC_FLP.c @@ -26,6 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FLP.h" +#include "SKP_Silk_tuning_parameters.h" void SKP_Silk_find_LPC_FLP( SKP_float NLSF[], /* O NLSFs */ @@ -57,6 +58,7 @@ void SKP_Silk_find_LPC_FLP( /* adding it to the residual energy of the first 10 ms in each iteration of the search below */ res_nrg -= SKP_Silk_burg_modified_FLP( a_tmp, x + ( MAX_NB_SUBFR / 2 ) * subfr_length, subfr_length, MAX_NB_SUBFR / 2, FIND_LPC_COND_FAC, LPC_order ); + SKP_Silk_bwexpander_FLP( a_tmp, LPC_order, FIND_LPC_CHIRP ); /* Convert to NLSFs */ SKP_Silk_A2NLSF_FLP( NLSF, a_tmp, LPC_order ); diff --git a/src_FLP/SKP_Silk_find_LTP_FLP.c b/src_FLP/SKP_Silk_find_LTP_FLP.c index 42acbcfd9a3988a9f6e186c5958bc8e903a1a7c1..155105f881512486e2013d81b850ea6678006669 100644 --- a/src_FLP/SKP_Silk_find_LTP_FLP.c +++ b/src_FLP/SKP_Silk_find_LTP_FLP.c @@ -26,6 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FLP.h" +#include "SKP_Silk_tuning_parameters.h" void SKP_Silk_find_LTP_FLP( SKP_float b[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */ diff --git a/src_FLP/SKP_Silk_find_pitch_lags_FLP.c b/src_FLP/SKP_Silk_find_pitch_lags_FLP.c index 09482dc65b73aa52a5bcd1a5ff6e8a334afe9c4b..ad9d77546873321dad68ccff97c2cc5288546c1d 100644 --- a/src_FLP/SKP_Silk_find_pitch_lags_FLP.c +++ b/src_FLP/SKP_Silk_find_pitch_lags_FLP.c @@ -27,6 +27,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <stdlib.h> #include "SKP_Silk_main_FLP.h" +#include "SKP_Silk_tuning_parameters.h" void SKP_Silk_find_pitch_lags_FLP( SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ @@ -36,13 +37,14 @@ void SKP_Silk_find_pitch_lags_FLP( ) { SKP_Silk_predict_state_FLP *psPredSt = &psEnc->sPred; + SKP_int buf_len; + SKP_float thrhld, res_nrg; const SKP_float *x_buf_ptr, *x_buf; SKP_float auto_corr[ MAX_FIND_PITCH_LPC_ORDER + 1 ]; SKP_float A[ MAX_FIND_PITCH_LPC_ORDER ]; SKP_float refl_coef[ MAX_FIND_PITCH_LPC_ORDER ]; SKP_float Wsig[ FIND_PITCH_LPC_WIN_MAX ]; - SKP_float thrhld, *Wsig_ptr; - SKP_int buf_len; + SKP_float *Wsig_ptr; /******************************************/ /* Setup buffer lengths etc based on Fs */ @@ -82,7 +84,10 @@ void SKP_Silk_find_pitch_lags_FLP( auto_corr[ 0 ] += auto_corr[ 0 ] * FIND_PITCH_WHITE_NOISE_FRACTION; /* Calculate the reflection coefficients using Schur */ - SKP_Silk_schur_FLP( refl_coef, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder ); + res_nrg = SKP_Silk_schur_FLP( refl_coef, auto_corr, psEnc->sCmn.pitchEstimationLPCOrder ); + + /* Prediction gain */ + psEncCtrl->predGain = auto_corr[ 0 ] / SKP_max_float( res_nrg, 1.0f ); /* Convert reflection coefficients to prediction coefficients */ SKP_Silk_k2a_FLP( A, refl_coef, psEnc->sCmn.pitchEstimationLPCOrder ); @@ -97,16 +102,16 @@ void SKP_Silk_find_pitch_lags_FLP( SKP_memset( res, 0, psEnc->sCmn.pitchEstimationLPCOrder * sizeof( SKP_float ) ); /* Threshold for pitch estimator */ - thrhld = 0.5f; + thrhld = 0.45f; thrhld -= 0.004f * psEnc->sCmn.pitchEstimationLPCOrder; - thrhld -= 0.1f * ( SKP_float )sqrt( psEnc->speech_activity ); - thrhld += 0.14f * psEnc->sCmn.prev_sigtype; - thrhld -= 0.12f * psEncCtrl->input_tilt; + thrhld -= 0.1f * psEnc->speech_activity; + thrhld += 0.15f * psEnc->sCmn.prev_sigtype; + thrhld -= 0.1f * psEncCtrl->input_tilt; /*****************************************/ /* Call Pitch estimator */ /*****************************************/ psEncCtrl->sCmn.sigtype = SKP_Silk_pitch_analysis_core_FLP( res, psEncCtrl->sCmn.pitchL, &psEncCtrl->sCmn.lagIndex, - &psEncCtrl->sCmn.contourIndex, &psEnc->LTPCorr, psEnc->sCmn.prevLag, psEnc->pitchEstimationThreshold, + &psEncCtrl->sCmn.contourIndex, &psEnc->LTPCorr, psEnc->sCmn.prevLag, psEnc->sCmn.pitchEstimationThreshold_Q16 / 65536.0f, thrhld, psEnc->sCmn.fs_kHz, psEnc->sCmn.pitchEstimationComplexity, psEnc->sCmn.nb_subfr ); } diff --git a/src_FLP/SKP_Silk_init_encoder_FLP.c b/src_FLP/SKP_Silk_init_encoder_FLP.c index d9a17a7caf972f9422e19b68621115edd86a56f3..d3e60b81f99cb4c850dea35816b516669d4e4483 100644 --- a/src_FLP/SKP_Silk_init_encoder_FLP.c +++ b/src_FLP/SKP_Silk_init_encoder_FLP.c @@ -39,9 +39,6 @@ SKP_int SKP_Silk_init_encoder_FLP( /* Clear the entire encoder state */ SKP_memset( psEnc, 0, sizeof( SKP_Silk_encoder_state_FLP ) ); - /* Initialize to 24 kHz API sampling, 24 kHz max internal sampling, 20 ms packets, 25 kbps, 0% packet loss, and init non-zero values */ - ret = SKP_Silk_control_encoder_FLP( psEnc, 24000, 24, 20, 25, 0, 0, 0, 10, 0 ); - #if HIGH_PASS_INPUT psEnc->variable_HP_smth1 = SKP_Silk_log2( 70.0 ); psEnc->variable_HP_smth2 = SKP_Silk_log2( 70.0 ); @@ -49,8 +46,6 @@ SKP_int SKP_Silk_init_encoder_FLP( /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */ psEnc->sCmn.first_frame_after_reset = 1; - psEnc->sCmn.fs_kHz_changed = 0; - psEnc->sCmn.LBRR_enabled = 0; /* Initialize Silk VAD */ ret += SKP_Silk_VAD_Init( &psEnc->sCmn.sVAD ); diff --git a/src_FLP/SKP_Silk_main_FLP.h b/src_FLP/SKP_Silk_main_FLP.h index f06cd7900a2d16c2ed2a221b162d2b4252fa9db7..75e0a168d8622341d456fa1f306688268ef719e3 100644 --- a/src_FLP/SKP_Silk_main_FLP.h +++ b/src_FLP/SKP_Silk_main_FLP.h @@ -33,7 +33,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_structs_FLP.h" #include "SKP_Silk_tables_FLP.h" #include "SKP_Silk_main.h" -#include "SKP_Silk_define_FLP.h" +#include "SKP_Silk_define.h" +#include "SKP_debug.h" +#include "entenc.h" /* uncomment to compile without SSE optimizations */ //#undef SKP_USE_SSE @@ -43,26 +45,6 @@ extern "C" { #endif -void SKP_Silk_LBRR_ctrl_FLP( - SKP_Silk_encoder_state_FLP *psEnc, /* I Encoder state FLP */ - SKP_Silk_encoder_control *psEncCtrl /* I/O Encoder control */ -); - -void SKP_Silk_LTP_scale_ctrl_FLP( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ - SKP_Silk_encoder_control_FLP *psEncCtrl /* I/O Encoder control FLP */ -); - -void SKP_Silk_quant_LTP_gains_FLP( - SKP_float B[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (Un-)quantized LTP gains */ - SKP_int cbk_index[ MAX_NB_SUBFR ], /* O Codebook index */ - SKP_int *periodicity_index, /* O Periodicity index */ - const SKP_float W[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ], /* I Error weights */ - const SKP_float mu, /* I Mu value (R/D tradeoff) */ - const SKP_int lowComplexity, /* I Flag for low complexity */ - const SKP_int nb_subfr /* I number of subframes */ -); - /*********************/ /* Encoder Functions */ /*********************/ @@ -78,25 +60,18 @@ void SKP_Silk_HP_variable_cutoff_FLP( /* Encoder main function */ SKP_int SKP_Silk_encode_frame_FLP( SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ - SKP_int16 *pnBytesOut, /* I/O Number of payload bytes; */ + SKP_int32 *pnBytesOut, /* I/O Number of payload bytes; */ /* input: max length; output: used */ ec_enc *psRangeEnc, /* I/O compressor data structure */ const SKP_int16 *pIn /* I Input speech frame */ ); -/* Limit, stabilize, and quantize NLSFs */ -void SKP_Silk_process_NLSFs_FLP( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ - SKP_Silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */ - SKP_float *pNLSF /* I/O NLSFs (quantized output) */ -); - /* Low Bitrate Redundancy (LBRR) encoding. Reuse all parameters but encode with lower bitrate */ void SKP_Silk_LBRR_encode_FLP( SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ SKP_Silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */ SKP_uint8 *pCode, /* O Payload */ - SKP_int16 *pnBytesOut, /* I/O Payload bytes; in: max; out: used */ + SKP_int32 *pnBytesOut, /* I/O Payload bytes; in: max; out: used */ const SKP_float xfw[] /* I Input signal */ ); @@ -107,22 +82,16 @@ SKP_int SKP_Silk_init_encoder_FLP( /* Control the Silk encoder */ SKP_int SKP_Silk_control_encoder_FLP( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ - const SKP_int32 API_fs_Hz, /* I External (API) sampling rate (Hz) */ - const SKP_int max_internal_fs_kHz,/* I Maximum internal sampling rate (kHz) */ - const SKP_int PacketSize_ms, /* I Packet length (ms) */ - SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) (used if SNR_dB == 0) */ - const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ - const SKP_int INBandFEC_enabled, /* I Enable (1) / disable (0) inband FEC */ - const SKP_int DTX_enabled, /* I Enable / disable DTX */ - const SKP_int InputFramesize_ms, /* I Inputframe in ms */ - const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */ + const SKP_int PacketSize_ms, /* I Packet length (ms) */ + const SKP_int32 TargetRate_bps, /* I Target max bitrate (bps) */ + const SKP_int PacketLoss_perc, /* I Packet loss rate (in percent) */ + const SKP_int Complexity /* I Complexity (0->low; 1->medium; 2->high) */ ); /****************/ /* Prefiltering */ /****************/ -/* Main Prefilter Function */ void SKP_Silk_prefilter_FLP( SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ const SKP_Silk_encoder_control_FLP *psEncCtrl, /* I Encoder control FLP */ @@ -150,9 +119,22 @@ void SKP_Silk_warped_autocorrelation_FLP( const SKP_int order /* I Correlation order (even) */ ); -/**************/ -/* Find pitch */ -/**************/ +/* Control low bitrate redundancy usage */ +void SKP_Silk_LBRR_ctrl_FLP( + SKP_Silk_encoder_state_FLP *psEnc, /* I Encoder state FLP */ + SKP_Silk_encoder_control *psEncCtrlC /* I/O Encoder control */ +); + +/* Calculation of LTP state scaling */ +void SKP_Silk_LTP_scale_ctrl_FLP( + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ + SKP_Silk_encoder_control_FLP *psEncCtrl /* I/O Encoder control FLP */ +); + +/**********************************************/ +/* Prediction Analysis */ +/**********************************************/ +/* Find pitch lags */ void SKP_Silk_find_pitch_lags_FLP( SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ SKP_Silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */ @@ -160,81 +142,26 @@ void SKP_Silk_find_pitch_lags_FLP( const SKP_float x[] /* I Speech signal */ ); -/******************/ -/* NLSF Quantizer */ -/******************/ -/* NLSF vector encoder */ -void SKP_Silk_NLSF_MSVQ_encode_FLP( - SKP_int *NLSFIndices, /* O Codebook path vector [ CB_STAGES ] */ - SKP_float *pNLSF, /* I/O Quantized NLSF vector [ LPC_ORDER ] */ - const SKP_Silk_NLSF_CB_FLP *psNLSF_CB_FLP, /* I Codebook object */ - const SKP_float *pNLSF_q_prev, /* I Prev. quantized NLSF vector [LPC_ORDER] */ - const SKP_float *pW, /* I NLSF weight vector [ LPC_ORDER ] */ - const SKP_float NLSF_mu, /* I Rate weight for the RD optimization */ - const SKP_float NLSF_mu_fluc_red, /* I Fluctuation reduction error weight */ - const SKP_int NLSF_MSVQ_Survivors,/* I Max survivors from each stage */ - const SKP_int LPC_order, /* I LPC order */ - const SKP_int deactivate_fluc_red /* I Deactivate fluctuation reduction */ -); - -/* NLSF vector decoder */ -void SKP_Silk_NLSF_MSVQ_decode_FLP( - SKP_float *pNLSF, /* O Decoded output vector [ LPC_ORDER ] */ - const SKP_Silk_NLSF_CB_FLP *psNLSF_CB_FLP, /* I NLSF codebook struct */ - const SKP_int *NLSFIndices, /* I NLSF indices [ nStages ] */ - const SKP_int LPC_order /* I LPC order used */ -); - -/* Rate-Distortion calculations for multiple input data vectors */ -void SKP_Silk_NLSF_VQ_rate_distortion_FLP( - SKP_float *pRD, /* O Rate-distortion values [psNLSF_CBS_FLP->nVectors*N] */ - const SKP_Silk_NLSF_CBS_FLP *psNLSF_CBS_FLP, /* I NLSF codebook stage struct */ - const SKP_float *in, /* I Input vectors to be quantized */ - const SKP_float *w, /* I Weight vector */ - const SKP_float *rate_acc, /* I Accumulated rates from previous stage */ - const SKP_float mu, /* I Weight between weighted error and rate */ - const SKP_int N, /* I Number of input vectors to be quantized */ - const SKP_int LPC_order /* I LPC order */ -); - -/* compute weighted quantization errors for LPC_order element input vectors, over one codebook stage */ -void SKP_Silk_NLSF_VQ_sum_error_FLP( - SKP_float *err, /* O Weighted quantization errors [ N * K ] */ - const SKP_float *in, /* I Input vectors [ N * LPC_order ] */ - const SKP_float *w, /* I Weighting vectors [ N * LPC_order ] */ - const SKP_float *pCB, /* I Codebook vectors [ K * LPC_order ] */ - const SKP_int N, /* I Number of input vectors */ - const SKP_int K, /* I Number of codebook vectors */ - const SKP_int LPC_order /* I LPC order */ -); - -/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */ -SKP_float SKP_Silk_residual_energy_covar_FLP( /* O Weighted residual energy */ - const SKP_float *c, /* I Filter coefficients */ - SKP_float *wXX, /* I/O Weighted correlation matrix, reg. out */ - const SKP_float *wXx, /* I Weighted correlation vector */ - const SKP_float wxx, /* I Weighted correlation value */ - const SKP_int D /* I Dimension */ -); - -/* Entropy constrained MATRIX-weighted VQ, for a single input data vector */ -void SKP_Silk_VQ_WMat_EC_FLP( - SKP_int *ind, /* O Index of best codebook vector */ - SKP_float *rate_dist, /* O Best weighted quant. error + mu * rate */ - const SKP_float *in, /* I Input vector to be quantized */ - const SKP_float *W, /* I Weighting matrix */ - const SKP_int16 *cb, /* I Codebook */ - const SKP_int16 *cl_Q6, /* I Code length for each codebook vector */ - const SKP_float mu, /* I Tradeoff between WSSE and rate */ - const SKP_int L /* I Number of vectors in codebook */ +/* Find LPC and LTP coefficients */ +void SKP_Silk_find_pred_coefs_FLP( + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ + SKP_Silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */ + const SKP_float res_pitch[] /* I Residual from pitch analysis */ ); -/* Processing of gains */ -void SKP_Silk_process_gains_FLP( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ - SKP_Silk_encoder_control_FLP *psEncCtrl /* I/O Encoder control FLP */ +/* LPC analysis */ +void SKP_Silk_find_LPC_FLP( + SKP_float NLSF[], /* O NLSFs */ + SKP_int *interpIndex, /* O NLSF interp. index for NLSF interp. */ + const SKP_float prev_NLSFq[], /* I Previous NLSFs, for NLSF interpolation */ + const SKP_int useInterpNLSFs, /* I Flag */ + const SKP_int LPC_order, /* I LPC order */ + const SKP_float x[], /* I Input signal */ + const SKP_int subfr_length, /* I Subframe length incl preceeding samples */ + const SKP_int nb_subfr /* I: Number of subframes */ ); +/* LTP analysis */ void SKP_Silk_find_LTP_FLP( SKP_float b[ MAX_NB_SUBFR * LTP_ORDER ], /* O LTP coefs */ SKP_float WLTP[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */ @@ -247,17 +174,6 @@ void SKP_Silk_find_LTP_FLP( const SKP_int mem_offset /* I Number of samples in LTP memory */ ); -void SKP_Silk_find_LPC_FLP( - SKP_float NLSF[], /* O NLSFs */ - SKP_int *interpIndex, /* O NLSF interp. index for NLSF interp. */ - const SKP_float prev_NLSFq[], /* I Previous NLSFs, for NLSF interpolation */ - const SKP_int useInterpNLSFs, /* I Flag */ - const SKP_int LPC_order, /* I LPC order */ - const SKP_float x[], /* I Input signal */ - const SKP_int subfr_length, /* I Subframe length incl preceeding samples */ - const SKP_int nb_subfr /* I: Number of subframes */ -); - void SKP_Silk_LTP_analysis_filter_FLP( SKP_float *LTP_res, /* O LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */ const SKP_float *x, /* I Input signal, with preceeding samples */ @@ -269,6 +185,8 @@ void SKP_Silk_LTP_analysis_filter_FLP( const SKP_int pre_length /* I Preceeding samples for each subframe */ ); +/* Calculates residual energies of input subframes where all subframes have LPC_order */ +/* of preceeding samples */ void SKP_Silk_residual_energy_FLP( SKP_float nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */ const SKP_float x[], /* I Input signal */ @@ -279,12 +197,6 @@ void SKP_Silk_residual_energy_FLP( const SKP_int LPC_order /* I LPC order */ ); -void SKP_Silk_find_pred_coefs_FLP( - SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ - SKP_Silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */ - const SKP_float res_pitch[] /* I Residual from pitch analysis */ -); - /* 16th order LPC analysis filter */ void SKP_Silk_LPC_analysis_filter_FLP( SKP_float r_LPC[], /* O LPC residual signal */ @@ -326,6 +238,107 @@ void SKP_Silk_LPC_analysis_filter8_FLP( const SKP_int length /* I Length of input signal */ ); +/* 6th order LPC analysis filter, does not write first 6 samples */ +void SKP_Silk_LPC_analysis_filter6_FLP( + SKP_float r_LPC[], /* O LPC residual signal */ + const SKP_float PredCoef[], /* I LPC coefficients */ + const SKP_float s[], /* I Input signal */ + const SKP_int length /* I Length of input signal */ +); + +/* LTP tap quantizer */ +void SKP_Silk_quant_LTP_gains_FLP( + SKP_float B[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (Un-)quantized LTP gains */ + SKP_int cbk_index[ MAX_NB_SUBFR ], /* O Codebook index */ + SKP_int *periodicity_index, /* O Periodicity index */ + const SKP_float W[ MAX_NB_SUBFR*LTP_ORDER*LTP_ORDER ], /* I Error weights */ + const SKP_float mu, /* I Mu value (R/D tradeoff) */ + const SKP_int lowComplexity, /* I Flag for low complexity */ + const SKP_int nb_subfr /* I number of subframes */ +); + +/******************/ +/* NLSF Quantizer */ +/******************/ +/* Limit, stabilize, and quantize NLSFs */ +void SKP_Silk_process_NLSFs_FLP( + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ + SKP_Silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */ + SKP_float *pNLSF /* I/O NLSFs (quantized output) */ +); + +/* NLSF vector encoder */ +void SKP_Silk_NLSF_MSVQ_encode_FLP( + SKP_int *NLSFIndices, /* O Codebook path vector [ CB_STAGES ] */ + SKP_float *pNLSF, /* I/O Quantized NLSF vector [ LPC_ORDER ] */ + const SKP_Silk_NLSF_CB_FLP *psNLSF_CB_FLP, /* I Codebook object */ + const SKP_float *pNLSF_q_prev, /* I Prev. quantized NLSF vector [LPC_ORDER] */ + const SKP_float *pW, /* I NLSF weight vector [ LPC_ORDER ] */ + const SKP_float NLSF_mu, /* I Rate weight for the RD optimization */ + const SKP_float NLSF_mu_fluc_red, /* I Fluctuation reduction error weight */ + const SKP_int NLSF_MSVQ_Survivors,/* I Max survivors from each stage */ + const SKP_int LPC_order, /* I LPC order */ + const SKP_int deactivate_fluc_red /* I Deactivate fluctuation reduction */ +); + +/* Rate-Distortion calculations for multiple input data vectors */ +void SKP_Silk_NLSF_VQ_rate_distortion_FLP( + SKP_float *pRD, /* O Rate-distortion values [psNLSF_CBS_FLP->nVectors*N] */ + const SKP_Silk_NLSF_CBS_FLP *psNLSF_CBS_FLP, /* I NLSF codebook stage struct */ + const SKP_float *in, /* I Input vectors to be quantized */ + const SKP_float *w, /* I Weight vector */ + const SKP_float *rate_acc, /* I Accumulated rates from previous stage */ + const SKP_float mu, /* I Weight between weighted error and rate */ + const SKP_int N, /* I Number of input vectors to be quantized */ + const SKP_int LPC_order /* I LPC order */ +); + +/* Compute weighted quantization errors for an LPC_order element input vector, over one codebook stage */ +void SKP_Silk_NLSF_VQ_sum_error_FLP( + SKP_float *err, /* O Weighted quantization errors [ N * K ] */ + const SKP_float *in, /* I Input vectors [ N * LPC_order ] */ + const SKP_float *w, /* I Weighting vectors [ N * LPC_order ] */ + const SKP_float *pCB, /* I Codebook vectors [ K * LPC_order ] */ + const SKP_int N, /* I Number of input vectors */ + const SKP_int K, /* I Number of codebook vectors */ + const SKP_int LPC_order /* I LPC order */ +); + +/* NLSF vector decoder */ +void SKP_Silk_NLSF_MSVQ_decode_FLP( + SKP_float *pNLSF, /* O Decoded output vector [ LPC_ORDER ] */ + const SKP_Silk_NLSF_CB_FLP *psNLSF_CB_FLP, /* I NLSF codebook struct */ + const SKP_int *NLSFIndices, /* I NLSF indices [ nStages ] */ + const SKP_int LPC_order /* I LPC order used */ +); + +/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */ +SKP_float SKP_Silk_residual_energy_covar_FLP( /* O Weighted residual energy */ + const SKP_float *c, /* I Filter coefficients */ + SKP_float *wXX, /* I/O Weighted correlation matrix, reg. out */ + const SKP_float *wXx, /* I Weighted correlation vector */ + const SKP_float wxx, /* I Weighted correlation value */ + const SKP_int D /* I Dimension */ +); + +/* Entropy constrained MATRIX-weighted VQ, for a single input data vector */ +void SKP_Silk_VQ_WMat_EC_FLP( + SKP_int *ind, /* O Index of best codebook vector */ + SKP_float *rate_dist, /* O Best weighted quant. error + mu * rate */ + const SKP_float *in, /* I Input vector to be quantized */ + const SKP_float *W, /* I Weighting matrix */ + const SKP_int16 *cb, /* I Codebook */ + const SKP_int16 *cl_Q6, /* I Code length for each codebook vector */ + const SKP_float mu, /* I Tradeoff between WSSE and rate */ + const SKP_int L /* I Number of vectors in codebook */ +); + +/* Processing of gains */ +void SKP_Silk_process_gains_FLP( + SKP_Silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */ + SKP_Silk_encoder_control_FLP *psEncCtrl /* I/O Encoder control FLP */ +); + /******************/ /* Linear Algebra */ /******************/ @@ -346,6 +359,7 @@ void SKP_Silk_corrVector_FLP( SKP_float *Xt /* O X'*t correlation vector [order] */ ); +/* Add noise to matrix diagonal */ void SKP_Silk_regularize_correlations_FLP( SKP_float *XX, /* I/O Correlation matrices */ SKP_float *xx, /* I/O Correlation values */ @@ -353,7 +367,7 @@ void SKP_Silk_regularize_correlations_FLP( const SKP_int D /* I Dimension of XX */ ); -/* Function to solve linear equation Ax = b, when A is an MxM symmetric square matrix */ +/* Function to solve linear equation Ax = b, where A is an MxM symmetric matrix */ void SKP_Silk_solve_LDL_FLP( SKP_float *A, /* I/O Symmetric square matrix, out: reg. */ const SKP_int M, /* I Size of matrix */ @@ -363,7 +377,6 @@ void SKP_Silk_solve_LDL_FLP( /* Apply sine window to signal vector. */ /* Window types: */ -/* 0 -> sine window from 0 to pi */ /* 1 -> sine window from 0 to pi/2 */ /* 2 -> sine window from pi/2 to pi */ void SKP_Silk_apply_sine_window_FLP( diff --git a/src_FLP/SKP_Silk_noise_shape_analysis_FLP.c b/src_FLP/SKP_Silk_noise_shape_analysis_FLP.c index 0511ebed68beba6810fafba3fc2c9a24baf381ee..316aa9d0aafcde30d7e9de464660d41c322e3f19 100644 --- a/src_FLP/SKP_Silk_noise_shape_analysis_FLP.c +++ b/src_FLP/SKP_Silk_noise_shape_analysis_FLP.c @@ -26,7 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FLP.h" -#include "SKP_Silk_perceptual_parameters.h" +#include "SKP_Silk_tuning_parameters.h" /* Compute gain to make warped filter coefficients have a zero mean log frequency response on a */ /* non-warped frequency scale. (So that it can be implemented with a minimum-phase monic filter.) */ @@ -46,68 +46,76 @@ SKP_INLINE SKP_float warped_gain( return (SKP_float)( 1.0f / ( 1.0f - lambda * gain ) ); } -/* Convert warped filter coefficients to monic pseudo-warped coefficients */ +/* Convert warped filter coefficients to monic pseudo-warped coefficients and limit maximum */ +/* amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */ SKP_INLINE void warped_true2monic_coefs( - SKP_float *coefs, - SKP_float lambda, - SKP_int order -) { - SKP_int i; - SKP_float gain; - - lambda = -lambda; - for( i = order - 1; i > 0; i-- ) { - coefs[ i - 1 ] += lambda * coefs[ i ]; - } - gain = ( 1.0f - lambda * lambda ) / ( 1.0f - lambda * coefs[ 0 ] ); - for( i = 0; i < order; i++ ) { - coefs[ i ] *= gain; - } -} - -/* Limit max amplitude of monic warped coefficients by using bandwidth expansion on the true coefficients */ -SKP_INLINE void limit_warped_coefs( SKP_float *coefs_syn, SKP_float *coefs_ana, SKP_float lambda, SKP_float limit, SKP_int order ) { - SKP_int i, iter, ind; - SKP_float tmp, maxabs, chirp; + SKP_int i, iter, ind = 0; + SKP_float tmp, maxabs, chirp, gain_syn, gain_ana; + /* Convert to monic coefficients */ + for( i = order - 1; i > 0; i-- ) { + coefs_syn[ i - 1 ] -= lambda * coefs_syn[ i ]; + coefs_ana[ i - 1 ] -= lambda * coefs_ana[ i ]; + } + gain_syn = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_syn[ 0 ] ); + gain_ana = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_ana[ 0 ] ); + for( i = 0; i < order; i++ ) { + coefs_syn[ i ] *= gain_syn; + coefs_ana[ i ] *= gain_ana; + } + + /* Limit */ for( iter = 0; iter < 10; iter++ ) { /* Find maximum absolute value */ - ind = 1; - maxabs = SKP_abs( coefs_syn[ ind ] ); - for( i = 2; i < order - 1; i++ ) { - tmp = SKP_abs( coefs_syn[ i ] ); + maxabs = -1.0f; + for( i = 0; i < order; i++ ) { + tmp = SKP_max( SKP_abs_float( coefs_syn[ i ] ), SKP_abs_float( coefs_ana[ i ] ) ); if( tmp > maxabs ) { maxabs = tmp; ind = i; } } if( maxabs <= limit ) { + /* Coefficients are within range - done */ return; } - /* Convert to true warped coefficients */ + /* Convert back to true warped coefficients */ for( i = 1; i < order; i++ ) { coefs_syn[ i - 1 ] += lambda * coefs_syn[ i ]; coefs_ana[ i - 1 ] += lambda * coefs_ana[ i ]; } + gain_syn = 1.0f / gain_syn; + gain_ana = 1.0f / gain_ana; + for( i = 0; i < order; i++ ) { + coefs_syn[ i ] *= gain_syn; + coefs_ana[ i ] *= gain_ana; + } /* Apply bandwidth expansion */ chirp = 0.99f - ( 0.8f + 0.1f * iter ) * ( maxabs - limit ) / ( maxabs * ( ind + 1 ) ); SKP_Silk_bwexpander_FLP( coefs_syn, order, chirp ); SKP_Silk_bwexpander_FLP( coefs_ana, order, chirp ); - /* Convert back to monic warped coefficients */ + /* Convert to monic warped coefficients */ for( i = order - 1; i > 0; i-- ) { coefs_syn[ i - 1 ] -= lambda * coefs_syn[ i ]; coefs_ana[ i - 1 ] -= lambda * coefs_ana[ i ]; } + gain_syn = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_syn[ 0 ] ); + gain_ana = ( 1.0f - lambda * lambda ) / ( 1.0f + lambda * coefs_ana[ 0 ] ); + for( i = 0; i < order; i++ ) { + coefs_syn[ i ] *= gain_syn; + coefs_ana[ i ] *= gain_ana; + } } + SKP_assert( 0 ); } /* Compute noise shaping coefficients and initial gain values */ @@ -128,7 +136,7 @@ void SKP_Silk_noise_shape_analysis_FLP( const SKP_float *x_ptr, *pitch_res_ptr; /* Point to start of first LPC analysis block */ - x_ptr = x + psEnc->sCmn.la_shape - SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz + psEnc->sCmn.subfr_length; + x_ptr = x - psEnc->sCmn.la_shape; /****************/ /* CONTROL SNR */ @@ -148,7 +156,7 @@ void SKP_Silk_noise_shape_analysis_FLP( psEncCtrl->input_quality = 0.5f * ( psEncCtrl->input_quality_bands[ 0 ] + psEncCtrl->input_quality_bands[ 1 ] ); /* Coding quality level, between 0.0 and 1.0 */ - psEncCtrl->coding_quality = SKP_sigmoid( 0.25f * ( psEncCtrl->current_SNR_dB - 17.0f ) ); + psEncCtrl->coding_quality = SKP_sigmoid( 0.25f * ( psEncCtrl->current_SNR_dB - 18.0f ) ); /* Reduce coding SNR during low speech activity */ b = 1.0f - psEnc->speech_activity; @@ -202,45 +210,60 @@ void SKP_Silk_noise_shape_analysis_FLP( /*******************************/ /* Control bandwidth expansion */ /*******************************/ + /* More BWE for signals with high prediction gain */ + strength = FIND_PITCH_WHITE_NOISE_FRACTION * psEncCtrl->predGain; /* between 0.0 and 1.0 */ + BWExp1 = BWExp2 = BANDWIDTH_EXPANSION / ( 1.0f + strength * strength ); delta = LOW_RATE_BANDWIDTH_EXPANSION_DELTA * ( 1.0f - 0.75f * psEncCtrl->coding_quality ); - BWExp1 = BANDWIDTH_EXPANSION - delta; - BWExp2 = BANDWIDTH_EXPANSION + delta; - if( psEnc->sCmn.fs_kHz == 24 ) { - /* Less bandwidth expansion for super wideband */ - BWExp1 = 1.0f - ( 1.0f - BWExp1 ) * SWB_BANDWIDTH_EXPANSION_REDUCTION; - BWExp2 = 1.0f - ( 1.0f - BWExp2 ) * SWB_BANDWIDTH_EXPANSION_REDUCTION; - } + BWExp1 -= delta; + BWExp2 += delta; /* BWExp1 will be applied after BWExp2, so make it relative */ BWExp1 /= BWExp2; - /* Warping coefficient */ - psEncCtrl->sCmn.warping_Q16 = psEnc->sCmn.fs_kHz * WARPING_MULTIPLIER_Q16; - psEncCtrl->sCmn.warping_Q16 = SKP_min( psEncCtrl->sCmn.warping_Q16, 32767 ); - warping = (SKP_float)psEncCtrl->sCmn.warping_Q16 / 65536.0f; + if( psEnc->sCmn.warping_Q16 > 0 ) { + /* Slightly more warping in analysis will move quantization noise up in frequency, where it's better masked */ + warping = (SKP_float)psEnc->sCmn.warping_Q16 / 65536.0f + 0.01f * psEncCtrl->coding_quality; + } else { + warping = 0.0f; + } /********************************************/ /* Compute noise shaping AR coefs and gains */ /********************************************/ for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) { - /* Apply window */ - SKP_Silk_apply_sine_window_FLP( x_windowed, x_ptr, 0, SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz ); + /* Apply window: sine slope followed by flat part followed by cosine slope */ + SKP_int shift, slope_part, flat_part; + flat_part = psEnc->sCmn.fs_kHz * 3; + slope_part = ( psEnc->sCmn.shapeWinLength - flat_part ) / 2; + + SKP_Silk_apply_sine_window_FLP( x_windowed, x_ptr, 1, slope_part ); + shift = slope_part; + SKP_memcpy( x_windowed + shift, x_ptr + shift, flat_part * sizeof(SKP_float) ); + shift += flat_part; + SKP_Silk_apply_sine_window_FLP( x_windowed + shift, x_ptr + shift, 2, slope_part ); /* Update pointer: next LPC analysis block */ x_ptr += psEnc->sCmn.subfr_length; - /* Calculate warped auto correlation */ - SKP_Silk_warped_autocorrelation_FLP( auto_corr, x_windowed, warping, - SHAPE_LPC_WIN_MS * psEnc->sCmn.fs_kHz, psEnc->sCmn.shapingLPCOrder ); + if( psEnc->sCmn.warping_Q16 > 0 ) { + /* Calculate warped auto correlation */ + SKP_Silk_warped_autocorrelation_FLP( auto_corr, x_windowed, warping, + psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder ); + } else { + /* Calculate regular auto correlation */ + SKP_Silk_autocorrelation_FLP( auto_corr, x_windowed, psEnc->sCmn.shapeWinLength, psEnc->sCmn.shapingLPCOrder + 1 ); + } /* Add white noise, as a fraction of energy */ auto_corr[ 0 ] += auto_corr[ 0 ] * SHAPE_WHITE_NOISE_FRACTION; /* Convert correlations to prediction coefficients, and compute residual energy */ nrg = SKP_Silk_levinsondurbin_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], auto_corr, psEnc->sCmn.shapingLPCOrder ); + psEncCtrl->Gains[ k ] = ( SKP_float )sqrt( nrg ); - /* Convert residual energy to non-warped scale */ - gain_mult = warped_gain( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder ); - nrg *= gain_mult * gain_mult; + if( psEnc->sCmn.warping_Q16 > 0 ) { + /* Adjust gain for warping */ + psEncCtrl->Gains[ k ] *= warped_gain( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder ); + } /* Bandwidth expansion for synthesis filter shaping */ SKP_Silk_bwexpander_FLP( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder, BWExp2 ); @@ -254,21 +277,13 @@ void SKP_Silk_noise_shape_analysis_FLP( /* Bandwidth expansion for analysis filter shaping */ SKP_Silk_bwexpander_FLP( &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder, BWExp1 ); - /* Increase residual energy */ - nrg += SHAPE_MIN_ENERGY_RATIO * auto_corr[ 0 ]; - psEncCtrl->Gains[ k ] = ( SKP_float )sqrt( nrg ); - /* Ratio of prediction gains, in energy domain */ SKP_Silk_LPC_inverse_pred_gain_FLP( &pre_nrg, &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder ); SKP_Silk_LPC_inverse_pred_gain_FLP( &nrg, &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], psEnc->sCmn.shapingLPCOrder ); psEncCtrl->GainsPre[ k ] = 1.0f - 0.7f * ( 1.0f - pre_nrg / nrg ); - /* Convert to monic warped prediction coefficients */ - warped_true2monic_coefs( &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder ); - warped_true2monic_coefs( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], warping, psEnc->sCmn.shapingLPCOrder ); - - /* Limit absolute values */ - limit_warped_coefs( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], + /* Convert to monic warped prediction coefficients and limit absolute values */ + warped_true2monic_coefs( &psEncCtrl->AR2[ k * MAX_SHAPE_LPC_ORDER ], &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ], warping, 3.999f, psEnc->sCmn.shapingLPCOrder ); } @@ -285,20 +300,7 @@ void SKP_Silk_noise_shape_analysis_FLP( psEnc->avgGain += psEnc->speech_activity * GAIN_SMOOTHING_COEF * ( psEncCtrl->Gains[ k ] - psEnc->avgGain ); } - /************************************************/ - /* Decrease level during fricatives (de-essing) */ - /************************************************/ gain_mult = 1.0f + INPUT_TILT + psEncCtrl->coding_quality * HIGH_RATE_INPUT_TILT; - if( psEncCtrl->input_tilt <= 0.0f && psEncCtrl->sCmn.sigtype == SIG_TYPE_UNVOICED ) { - SKP_float essStrength = -psEncCtrl->input_tilt * psEnc->speech_activity * ( 1.0f - psEncCtrl->sparseness ); - if( psEnc->sCmn.fs_kHz == 24 ) { - gain_mult *= ( SKP_float )pow( 2.0f, -0.16f * DE_ESSER_COEF_SWB_dB * essStrength ); - } else if( psEnc->sCmn.fs_kHz == 16 ) { - gain_mult *= (SKP_float)pow( 2.0f, -0.16f * DE_ESSER_COEF_WB_dB * essStrength ); - } else { - SKP_assert( psEnc->sCmn.fs_kHz == 12 || psEnc->sCmn.fs_kHz == 8 ); - } - } for( k = 0; k < psEnc->sCmn.nb_subfr; k++ ) { psEncCtrl->GainsPre[ k ] *= gain_mult; @@ -324,8 +326,8 @@ void SKP_Silk_noise_shape_analysis_FLP( psEncCtrl->LF_MA_shp[ 0 ] = -1.0f + b; psEncCtrl->LF_AR_shp[ 0 ] = 1.0f - b - b * strength * 0.6f; for( k = 1; k < psEnc->sCmn.nb_subfr; k++ ) { - psEncCtrl->LF_MA_shp[ k ] = psEncCtrl->LF_MA_shp[ k - 1 ]; - psEncCtrl->LF_AR_shp[ k ] = psEncCtrl->LF_AR_shp[ k - 1 ]; + psEncCtrl->LF_MA_shp[ k ] = psEncCtrl->LF_MA_shp[ 0 ]; + psEncCtrl->LF_AR_shp[ k ] = psEncCtrl->LF_AR_shp[ 0 ]; } Tilt = -HP_NOISE_COEF; } diff --git a/src_FLP/SKP_Silk_prefilter_FLP.c b/src_FLP/SKP_Silk_prefilter_FLP.c index 85bdb4453d58a2b1be45b6c809d61aa97381434d..106d72f4c2f18a4b6e22d69614d2e03be04a562e 100644 --- a/src_FLP/SKP_Silk_prefilter_FLP.c +++ b/src_FLP/SKP_Silk_prefilter_FLP.c @@ -26,7 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FLP.h" -#include "SKP_Silk_perceptual_parameters.h" +#include "SKP_Silk_tuning_parameters.h" /* * SKP_Silk_prefilter. Prefilter for finding Quantizer input signal @@ -124,11 +124,11 @@ void SKP_Silk_prefilter_FLP( LF_AR_shp = psEncCtrl->LF_AR_shp[ k ]; AR1_shp = &psEncCtrl->AR1[ k * MAX_SHAPE_LPC_ORDER ]; - /* Short term FIR filtering*/ - SKP_Silk_warped_LPC_analysis_filter_FLP( P->sAR_shp1, st_res, AR1_shp, px, - (SKP_float)psEncCtrl->sCmn.warping_Q16 / 65536.0f, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder ); + /* Short term FIR filtering */ + SKP_Silk_warped_LPC_analysis_filter_FLP( P->sAR_shp, st_res, AR1_shp, px, + (SKP_float)psEnc->sCmn.warping_Q16 / 65536.0f, psEnc->sCmn.subfr_length, psEnc->sCmn.shapingLPCOrder ); - /* reduce (mainly) low frequencies during harmonic emphasis */ + /* Reduce (mainly) low frequencies during harmonic emphasis */ B[ 0 ] = psEncCtrl->GainsPre[ k ]; B[ 1 ] = -psEncCtrl->GainsPre[ k ] * ( psEncCtrl->HarmBoost[ k ] * HarmShapeGain + INPUT_TILT + psEncCtrl->coding_quality * HIGH_RATE_INPUT_TILT ); @@ -147,7 +147,7 @@ void SKP_Silk_prefilter_FLP( } /* -* SKP_Silk_prefilter_part1. Prefilter for finding Quantizer input signal +* Prefilter for finding Quantizer input signal */ SKP_INLINE void SKP_Silk_prefilt_FLP( SKP_Silk_prefilter_state_FLP *P,/* I/O state */ @@ -168,10 +168,10 @@ SKP_INLINE void SKP_Silk_prefilt_FLP( SKP_float *LTP_shp_buf; /* To speed up use temp variables instead of using the struct */ - LTP_shp_buf = P->sLTP_shp1; - LTP_shp_buf_idx = P->sLTP_shp_buf_idx1; - sLF_AR_shp = P->sLF_AR_shp1; - sLF_MA_shp = P->sLF_MA_shp1; + LTP_shp_buf = P->sLTP_shp; + LTP_shp_buf_idx = P->sLTP_shp_buf_idx; + sLF_AR_shp = P->sLF_AR_shp; + sLF_MA_shp = P->sLF_MA_shp; for( i = 0; i < length; i++ ) { if( lag > 0 ) { @@ -196,7 +196,7 @@ SKP_INLINE void SKP_Silk_prefilt_FLP( xw[ i ] = sLF_MA_shp - n_LTP; } /* Copy temp variable back to state */ - P->sLF_AR_shp1 = sLF_AR_shp; - P->sLF_MA_shp1 = sLF_MA_shp; - P->sLTP_shp_buf_idx1 = LTP_shp_buf_idx; + P->sLF_AR_shp = sLF_AR_shp; + P->sLF_MA_shp = sLF_MA_shp; + P->sLTP_shp_buf_idx = LTP_shp_buf_idx; } diff --git a/src_FLP/SKP_Silk_process_gains_FLP.c b/src_FLP/SKP_Silk_process_gains_FLP.c index ba5a369dc7b3e63f2cec1d48b756d093e93b79be..520d1b543638cc40c6d1476d7e07ad43f5084731 100644 --- a/src_FLP/SKP_Silk_process_gains_FLP.c +++ b/src_FLP/SKP_Silk_process_gains_FLP.c @@ -26,6 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_main_FLP.h" +#include "SKP_Silk_tuning_parameters.h" /* Processing of gains */ void SKP_Silk_process_gains_FLP( @@ -36,7 +37,7 @@ void SKP_Silk_process_gains_FLP( SKP_Silk_shape_state_FLP *psShapeSt = &psEnc->sShape; SKP_int k; SKP_int32 pGains_Q16[ MAX_NB_SUBFR ]; - SKP_float s, InvMaxSqrVal, gain; + SKP_float s, InvMaxSqrVal, gain, quant_offset; /* Gain reduction when LTP coding gain is high */ if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { @@ -79,18 +80,14 @@ void SKP_Silk_process_gains_FLP( } /* Quantizer boundary adjustment */ - if( psEncCtrl->sCmn.sigtype == SIG_TYPE_VOICED ) { - psEncCtrl->Lambda = 1.2f - 0.4f * psEnc->speech_activity - - 0.3f * psEncCtrl->input_quality - + 0.2f * psEncCtrl->sCmn.QuantOffsetType - - 0.1f * psEncCtrl->coding_quality; - } else { - psEncCtrl->Lambda = 1.2f - 0.4f * psEnc->speech_activity - - 0.4f * psEncCtrl->input_quality - + 0.4f * psEncCtrl->sCmn.QuantOffsetType - - 0.1f * psEncCtrl->coding_quality; - } + quant_offset = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrl->sCmn.sigtype ][ psEncCtrl->sCmn.QuantOffsetType ] / 1024.0f; + psEncCtrl->Lambda = LAMBDA_OFFSET + + LAMBDA_DELAYED_DECISIONS * psEnc->sCmn.nStatesDelayedDecision + + LAMBDA_SPEECH_ACT * psEnc->speech_activity + + LAMBDA_INPUT_QUALITY * psEncCtrl->input_quality + + LAMBDA_CODING_QUALITY * psEncCtrl->coding_quality + + LAMBDA_QUANT_OFFSET * quant_offset; - SKP_assert( psEncCtrl->Lambda >= 0.0f ); - SKP_assert( psEncCtrl->Lambda < 2.0f ); + SKP_assert( psEncCtrl->Lambda > 0.0f ); + SKP_assert( psEncCtrl->Lambda < 2.0f ); } diff --git a/src_FLP/SKP_Silk_quant_LTP_gains_FLP.c b/src_FLP/SKP_Silk_quant_LTP_gains_FLP.c index e29c3a26fbe9be401a0c71c35239d8acdb93d468..8353117bb4a79ab9b7b31a934ac267e720e279e9 100644 --- a/src_FLP/SKP_Silk_quant_LTP_gains_FLP.c +++ b/src_FLP/SKP_Silk_quant_LTP_gains_FLP.c @@ -27,6 +27,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_main_FLP.h" +#define Q14_CONVERSION_FAC 6.1035e-005f // 1 / 2^14 + void SKP_Silk_quant_LTP_gains_FLP( SKP_float B[ MAX_NB_SUBFR * LTP_ORDER ], /* I/O (Un-)quantized LTP gains */ SKP_int cbk_index[ MAX_NB_SUBFR ], /* O Codebook index */ @@ -83,7 +85,7 @@ void SKP_Silk_quant_LTP_gains_FLP( if( rate_dist < min_rate_dist ) { min_rate_dist = rate_dist; - SKP_memcpy( cbk_index, temp_idx, nb_subfr * sizeof( SKP_int ) ); + SKP_memcpy( cbk_index, temp_idx, nb_subfr * sizeof( SKP_int ) ); *periodicity_index = k; } diff --git a/src_FLP/SKP_Silk_solve_LS_FLP.c b/src_FLP/SKP_Silk_solve_LS_FLP.c index 59f572c712529991345dafc437df85c2ec8a72a4..6e52b377840f4f43637e61e80335ffa01c9ef9c9 100644 --- a/src_FLP/SKP_Silk_solve_LS_FLP.c +++ b/src_FLP/SKP_Silk_solve_LS_FLP.c @@ -25,8 +25,8 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ - #include "SKP_Silk_main_FLP.h" +#include "SKP_Silk_tuning_parameters.h" /********************************************************************** * LDL Factorisation. Finds the upper triangular matrix L and the diagonal @@ -190,7 +190,7 @@ void SKP_Silk_LDL_FLP( ptr2 = matrix_adr( L, j + 1, 0, M); for( i = j + 1; i < M; i++ ) { temp = 0.0; - for( k = 0; k < j; k++ ) { + for( k = 0; k < j; k++ ) { temp += ptr2[ k ] * v[ k ]; } matrix_ptr( L, i, j, M ) = ( SKP_float )( ( ptr1[ i ] - temp ) * Dinv[ j ] ); diff --git a/src_FLP/SKP_Silk_structs_FLP.h b/src_FLP/SKP_Silk_structs_FLP.h index 212c20a48c5b9a1ece15ba771b312a37571ab1bb..d30cbca27fc816b65cc3665b59da33666584461e 100644 --- a/src_FLP/SKP_Silk_structs_FLP.h +++ b/src_FLP/SKP_Silk_structs_FLP.h @@ -50,17 +50,11 @@ typedef struct { /* Prefilter state */ /********************************/ typedef struct { - SKP_float sLTP_shp1[ LTP_BUF_LENGTH ]; - SKP_float sLTP_shp2[ LTP_BUF_LENGTH ]; - SKP_float sAR_shp1[ MAX_SHAPE_LPC_ORDER + 1 ]; - SKP_float sAR_shp2[ MAX_SHAPE_LPC_ORDER ]; - SKP_int sLTP_shp_buf_idx1; - SKP_int sLTP_shp_buf_idx2; - SKP_int sAR_shp_buf_idx2; - SKP_float sLF_AR_shp1; - SKP_float sLF_MA_shp1; - SKP_float sLF_AR_shp2; - SKP_float sLF_MA_shp2; + SKP_float sLTP_shp[ LTP_BUF_LENGTH ]; + SKP_float sAR_shp[ MAX_SHAPE_LPC_ORDER + 1 ]; + SKP_int sLTP_shp_buf_idx; + SKP_float sLF_AR_shp; + SKP_float sLF_MA_shp; SKP_float sHarmHP; SKP_int32 rand_seed; SKP_int lagPrev; @@ -122,7 +116,6 @@ typedef struct { SKP_float avgGain; /* average gain during active speech */ SKP_float BufferedInChannel_ms; /* Simulated number of ms buffer in channel because of exceeded TargetRate_bps */ SKP_float speech_activity; /* Speech activity */ - SKP_float pitchEstimationThreshold; /* Threshold for pitch estimator */ /* Parameters for LTP scaling control */ SKP_float prevLTPredCodGain; @@ -163,6 +156,7 @@ typedef struct { /* Measures */ SKP_float sparseness; + SKP_float predGain; SKP_float LTPredCodGain; SKP_float input_quality_bands[ VAD_N_BANDS ]; SKP_float input_tilt; diff --git a/src_FLP/SKP_Silk_tables_FLP.h b/src_FLP/SKP_Silk_tables_FLP.h index d2cbf2f0fe217443fa8ea223551556543ed8896b..cabc526131d17d72c9eeb636cb8737a9c1ded9d4 100644 --- a/src_FLP/SKP_Silk_tables_FLP.h +++ b/src_FLP/SKP_Silk_tables_FLP.h @@ -30,6 +30,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_structs_FLP.h" +#ifdef __cplusplus +extern "C" +{ +#endif + /* filters */ extern const SKP_float SKP_Silk_HarmShapeFIR_FLP[ HARM_SHAPE_FIR_TAPS ]; @@ -40,4 +45,8 @@ extern const SKP_float SKP_Silk_Quantization_Offsets[ 2 ][ 2 ]; extern const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB0_16_FLP, SKP_Silk_NLSF_CB1_16_FLP; extern const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB0_10_FLP, SKP_Silk_NLSF_CB1_10_FLP; +#ifdef __cplusplus +} +#endif + #endif diff --git a/src_FLP/SKP_Silk_tables_NLSF_CB0_10_FLP.c b/src_FLP/SKP_Silk_tables_NLSF_CB0_10_FLP.c index a6a6146b5052f0328d7e95d41adc1725284b1c22..e25b0850bffe818d51e3cca9e5f3c7dbed30324d 100644 --- a/src_FLP/SKP_Silk_tables_NLSF_CB0_10_FLP.c +++ b/src_FLP/SKP_Silk_tables_NLSF_CB0_10_FLP.c @@ -28,7 +28,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /**********************************************/ /* This file has been automatically generated */ /* */ -/* ROM usage: 5.32 kB */ +/* ROM usage: 5.68 kB */ /**********************************************/ #include "SKP_Silk_tables_FLP.h" @@ -36,685 +36,729 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. const SKP_float SKP_Silk_NLSF_MSVQ_CB0_10_rates[ NLSF_MSVQ_CB0_10_VECTORS ] = { - 4.62500000000000000000f, 5.21875000000000000000f, - 5.28125000000000000000f, 5.31250000000000000000f, - 5.31250000000000000000f, 5.40625000000000000000f, - 5.40625000000000000000f, 5.46875000000000000000f, + 4.75000000000000000000f, 4.75000000000000000000f, + 4.87500000000000000000f, 5.12500000000000000000f, + 5.37500000000000000000f, 5.37500000000000000000f, + 5.43750000000000000000f, 5.43750000000000000000f, + 5.43750000000000000000f, 5.50000000000000000000f, 5.50000000000000000000f, 5.50000000000000000000f, - 5.50000000000000000000f, 5.53125000000000000000f, - 5.59375000000000000000f, 5.65625000000000000000f, - 5.65625000000000000000f, 5.65625000000000000000f, - 5.71875000000000000000f, 5.71875000000000000000f, - 5.71875000000000000000f, 5.75000000000000000000f, - 5.78125000000000000000f, 5.78125000000000000000f, - 5.78125000000000000000f, 5.78125000000000000000f, - 5.81250000000000000000f, 5.90625000000000000000f, - 5.90625000000000000000f, 5.90625000000000000000f, - 5.96875000000000000000f, 5.96875000000000000000f, - 5.96875000000000000000f, 6.06250000000000000000f, + 5.56250000000000000000f, 5.56250000000000000000f, + 5.62500000000000000000f, 5.62500000000000000000f, + 5.62500000000000000000f, 5.68750000000000000000f, + 5.75000000000000000000f, 5.75000000000000000000f, + 5.75000000000000000000f, 5.87500000000000000000f, + 5.87500000000000000000f, 5.87500000000000000000f, + 5.93750000000000000000f, 5.93750000000000000000f, + 6.00000000000000000000f, 6.00000000000000000000f, + 6.00000000000000000000f, 6.06250000000000000000f, 6.06250000000000000000f, 6.06250000000000000000f, - 6.09375000000000000000f, 6.09375000000000000000f, + 6.12500000000000000000f, 6.12500000000000000000f, + 6.12500000000000000000f, 6.12500000000000000000f, 6.12500000000000000000f, 6.18750000000000000000f, - 6.21875000000000000000f, 6.25000000000000000000f, - 6.28125000000000000000f, 6.28125000000000000000f, - 6.31250000000000000000f, 6.34375000000000000000f, + 6.18750000000000000000f, 6.25000000000000000000f, + 6.25000000000000000000f, 6.25000000000000000000f, + 6.31250000000000000000f, 6.31250000000000000000f, + 6.31250000000000000000f, 6.37500000000000000000f, 6.37500000000000000000f, 6.37500000000000000000f, - 6.40625000000000000000f, 6.40625000000000000000f, - 6.43750000000000000000f, 6.53125000000000000000f, - 6.56250000000000000000f, 6.56250000000000000000f, - 6.65625000000000000000f, 6.68750000000000000000f, - 6.81250000000000000000f, 6.87500000000000000000f, - 6.90625000000000000000f, 7.06250000000000000000f, - 7.21875000000000000000f, 7.31250000000000000000f, - 7.46875000000000000000f, 8.00000000000000000000f, + 6.43750000000000000000f, 6.43750000000000000000f, + 6.43750000000000000000f, 6.50000000000000000000f, + 6.75000000000000000000f, 6.75000000000000000000f, + 6.75000000000000000000f, 7.12500000000000000000f, + 7.56250000000000000000f, 7.68750000000000000000f, 8.00000000000000000000f, 8.00000000000000000000f, - 3.71875000000000000000f, 3.84375000000000000000f, - 3.84375000000000000000f, 3.84375000000000000000f, - 3.90625000000000000000f, 3.93750000000000000000f, + 8.00000000000000000000f, 8.00000000000000000000f, + 8.00000000000000000000f, 8.00000000000000000000f, + 3.68750000000000000000f, 3.68750000000000000000f, + 3.75000000000000000000f, 3.81250000000000000000f, + 3.93750000000000000000f, 3.93750000000000000000f, 3.93750000000000000000f, 3.93750000000000000000f, - 4.00000000000000000000f, 4.06250000000000000000f, - 4.06250000000000000000f, 4.09375000000000000000f, - 4.09375000000000000000f, 4.21875000000000000000f, - 4.31250000000000000000f, 4.34375000000000000000f, + 3.93750000000000000000f, 4.06250000000000000000f, + 4.12500000000000000000f, 4.18750000000000000000f, + 4.18750000000000000000f, 4.18750000000000000000f, + 4.50000000000000000000f, 4.56250000000000000000f, + 2.87500000000000000000f, 2.87500000000000000000f, + 3.00000000000000000000f, 3.00000000000000000000f, + 3.00000000000000000000f, 3.06250000000000000000f, + 3.12500000000000000000f, 3.12500000000000000000f, + 2.68750000000000000000f, 2.87500000000000000000f, 2.93750000000000000000f, 2.93750000000000000000f, - 2.96875000000000000000f, 2.96875000000000000000f, 3.00000000000000000000f, 3.06250000000000000000f, - 3.06250000000000000000f, 3.09375000000000000000f, - 2.90625000000000000000f, 2.90625000000000000000f, - 2.96875000000000000000f, 3.00000000000000000000f, - 3.00000000000000000000f, 3.03125000000000000000f, - 3.06250000000000000000f, 3.12500000000000000000f, - 2.87500000000000000000f, 2.90625000000000000000f, - 3.03125000000000000000f, 3.03125000000000000000f, - 3.03125000000000000000f, 3.03125000000000000000f, + 3.25000000000000000000f, 3.31250000000000000000f, + 2.87500000000000000000f, 2.93750000000000000000f, + 2.93750000000000000000f, 2.93750000000000000000f, 3.06250000000000000000f, 3.06250000000000000000f, - 3.90625000000000000000f, 3.93750000000000000000f, - 3.93750000000000000000f, 3.96875000000000000000f, - 3.96875000000000000000f, 4.00000000000000000000f, - 4.00000000000000000000f, 4.00000000000000000000f, + 3.06250000000000000000f, 3.06250000000000000000f, + 2.87500000000000000000f, 2.93750000000000000000f, + 3.00000000000000000000f, 3.00000000000000000000f, + 3.00000000000000000000f, 3.06250000000000000000f, + 3.06250000000000000000f, 3.12500000000000000000f, + 3.75000000000000000000f, 3.75000000000000000000f, + 3.81250000000000000000f, 3.81250000000000000000f, + 3.81250000000000000000f, 3.81250000000000000000f, + 3.87500000000000000000f, 3.93750000000000000000f, 4.00000000000000000000f, 4.00000000000000000000f, - 4.03125000000000000000f, 4.03125000000000000000f, - 4.03125000000000000000f, 4.06250000000000000000f, - 4.06250000000000000000f, 4.09375000000000000000f + 4.06250000000000000000f, 4.18750000000000000000f, + 4.18750000000000000000f, 4.31250000000000000000f, + 4.31250000000000000000f, 4.75000000000000000000f }; const SKP_float SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min[ 10 + 1 ] = { - 0.01718139648437500000f, - 0.00009155273437500000f, + 0.01687622070312500000f, + 0.00015258789062500000f, 0.00067138671874999989f, - 0.00061035156250000000f, + 0.00057983398437500000f, 0.00009155273437500000f, 0.00009155273437500000f, - 0.00402832031250000000f, - 0.00363159179687500000f, - 0.01092529296875000000f, - 0.00262451171875000000f, - 0.02941894531250000300f + 0.00549316406250000000f, + 0.00494384765625000000f, + 0.00933837890625000000f, + 0.00521850585937500000f, + 0.03024291992187500000f }; const SKP_float SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * NLSF_MSVQ_CB0_10_VECTORS ] = { - 0.06744384765625000000f, 0.12277221679687500000f, - 0.21304321289062497000f, 0.28259277343750000000f, - 0.38369750976562500000f, 0.47872924804687500000f, - 0.58615112304687500000f, 0.68307495117187489000f, - 0.79287719726562500000f, 0.88934326171875011000f, - 0.10025024414062500000f, 0.12731933593750000000f, - 0.18664550781250003000f, 0.33129882812500000000f, - 0.46658325195312494000f, 0.51348876953125000000f, - 0.60122680664062500000f, 0.67169189453125000000f, - 0.75442504882812500000f, 0.89456176757812500000f, - 0.04742431640624999300f, 0.07662963867187500000f, - 0.20071411132812500000f, 0.31546020507812500000f, - 0.42227172851562494000f, 0.50387573242187500000f, - 0.61297607421875000000f, 0.70843505859375000000f, - 0.80810546875000000000f, 0.89916992187500000000f, - 0.09344482421875000000f, 0.12258911132812500000f, - 0.17611694335937500000f, 0.30630493164062500000f, - 0.40786743164062500000f, 0.45629882812500000000f, - 0.61462402343750000000f, 0.69857788085937500000f, - 0.76992797851562500000f, 0.90341186523437500000f, - 0.06362915039062500000f, 0.10549926757812500000f, - 0.18109130859375000000f, 0.26605224609375000000f, - 0.35098266601562494000f, 0.41717529296875000000f, - 0.54922485351562500000f, 0.66580200195312500000f, - 0.76095581054687489000f, 0.87722778320312500000f, - 0.08471679687500000000f, 0.12490844726562501000f, - 0.19595336914062500000f, 0.31777954101562500000f, - 0.46115112304687500000f, 0.51287841796875000000f, - 0.63552856445312500000f, 0.72711181640625000000f, - 0.80285644531250000000f, 0.89755249023437500000f, - 0.08291625976562498600f, 0.12310791015625000000f, - 0.17385864257812500000f, 0.25827026367187500000f, - 0.43643188476562500000f, 0.49908447265625000000f, - 0.58004760742187500000f, 0.71450805664062500000f, - 0.78771972656249989000f, 0.86993408203125011000f, - 0.08764648437500000000f, 0.11297607421875001000f, - 0.17947387695312500000f, 0.33673095703124994000f, - 0.52310180664062500000f, 0.57614135742187500000f, - 0.64532470703125000000f, 0.71566772460937500000f, - 0.78787231445312500000f, 0.90332031250000000000f, - 0.09152221679687500000f, 0.12252807617187500000f, - 0.22451782226562500000f, 0.34237670898437500000f, - 0.39263916015625000000f, 0.52816772460937500000f, - 0.61282348632812500000f, 0.69104003906250000000f, - 0.81707763671875000000f, 0.88827514648437500000f, - 0.08978271484375000000f, 0.11798095703125000000f, - 0.18060302734375003000f, 0.36361694335937500000f, - 0.42446899414062500000f, 0.49047851562500000000f, - 0.62417602539062500000f, 0.67990112304687500000f, - 0.83343505859375000000f, 0.91021728515625011000f, - 0.06930541992187500000f, 0.10763549804687500000f, - 0.20159912109375000000f, 0.29690551757812500000f, - 0.39498901367187506000f, 0.53045654296875000000f, - 0.61718750000000000000f, 0.68191528320312500000f, - 0.75079345703125000000f, 0.86334228515624989000f, - 0.06735229492187500000f, 0.10101318359375000000f, - 0.17834472656250000000f, 0.28500366210937500000f, - 0.33999633789062500000f, 0.47763061523437506000f, - 0.56689453125000000000f, 0.64627075195312511000f, - 0.77975463867187489000f, 0.86145019531250011000f, - 0.12094116210937500000f, 0.15182495117187500000f, - 0.21060180664062500000f, 0.35363769531250000000f, - 0.41094970703125000000f, 0.47537231445312494000f, - 0.58688354492187500000f, 0.65209960937500000000f, - 0.77850341796875000000f, 0.84713745117187500000f, - 0.08389282226562500000f, 0.10830688476562500000f, - 0.21258544921875000000f, 0.42138671875000000000f, - 0.47769165039062500000f, 0.53848266601562500000f, - 0.61309814453125000000f, 0.68966674804687511000f, - 0.80770874023437500000f, 0.87088012695312489000f, - 0.06488037109375000000f, 0.10693359375000001000f, - 0.15591430664062500000f, 0.30377197265625000000f, - 0.38299560546875006000f, 0.44616699218750000000f, - 0.60128784179687500000f, 0.66183471679687500000f, - 0.80740356445312500000f, 0.88824462890625000000f, - 0.12103271484375000000f, 0.17532348632812500000f, - 0.22711181640625000000f, 0.29776000976562500000f, - 0.44152832031250000000f, 0.50061035156250000000f, - 0.58395385742187500000f, 0.70336914062500000000f, - 0.77438354492187489000f, 0.86642456054687500000f, - 0.09756469726562500000f, 0.14498901367187500000f, - 0.19686889648437500000f, 0.28375244140625000000f, - 0.39788818359374994000f, 0.45391845703125000000f, - 0.54815673828125000000f, 0.62948608398437500000f, - 0.72738647460937500000f, 0.86865234375000000000f, - 0.09750366210937500000f, 0.12454223632812500000f, - 0.19833374023437500000f, 0.37390136718750000000f, - 0.43606567382812500000f, 0.48950195312500000000f, - 0.56021118164062500000f, 0.63262939453125000000f, - 0.82336425781250000000f, 0.89443969726562489000f, - 0.04678344726562500000f, 0.07540893554687500000f, - 0.13690185546875000000f, 0.23791503906250000000f, - 0.37634277343750000000f, 0.48089599609375000000f, - 0.59713745117187500000f, 0.68048095703124989000f, - 0.78347778320312489000f, 0.88656616210937511000f, - 0.06109619140625000000f, 0.09066772460937500000f, - 0.15213012695312500000f, 0.24667358398437497000f, - 0.40225219726562500000f, 0.47103881835937500000f, - 0.55654907226562500000f, 0.65664672851562500000f, - 0.75057983398437500000f, 0.86520385742187500000f, - 0.11621093750000000000f, 0.15029907226562500000f, - 0.20477294921875003000f, 0.31130981445312500000f, - 0.36654663085937500000f, 0.43640136718750000000f, - 0.56326293945312500000f, 0.62228393554687500000f, - 0.80947875976562500000f, 0.88366699218750000000f, - 0.06961059570312500000f, 0.10430908203125000000f, - 0.15194702148437500000f, 0.26629638671875000000f, - 0.48718261718750000000f, 0.55249023437500000000f, - 0.61798095703125000000f, 0.69491577148437500000f, - 0.77166748046875000000f, 0.88360595703125000000f, - 0.09310913085937500000f, 0.16720581054687500000f, - 0.22247314453125000000f, 0.30053710937500000000f, - 0.38891601562500000000f, 0.44259643554687500000f, - 0.56961059570312500000f, 0.72277832031250000000f, - 0.79544067382812511000f, 0.88339233398437500000f, - 0.07214355468750000000f, 0.10879516601562499000f, - 0.16790771484375000000f, 0.29360961914062500000f, - 0.45538330078125000000f, 0.50723266601562500000f, - 0.57998657226562500000f, 0.64074707031250000000f, - 0.80291748046875000000f, 0.89422607421875000000f, - 0.12490844726562501000f, 0.15905761718750000000f, - 0.20852661132812500000f, 0.30151367187500000000f, - 0.49752807617187500000f, 0.55804443359375000000f, - 0.62777709960937500000f, 0.72064208984375000000f, - 0.79550170898437500000f, 0.88891601562500000000f, - 0.08975219726562500000f, 0.12194824218750000000f, - 0.18426513671875000000f, 0.32464599609374994000f, - 0.38659667968750000000f, 0.44100952148437500000f, - 0.51263427734375000000f, 0.59179687500000000000f, - 0.79501342773437500000f, 0.87026977539062489000f, - 0.11788940429687500000f, 0.15905761718750000000f, - 0.21420288085937500000f, 0.28894042968750000000f, - 0.33688354492187500000f, 0.40325927734374994000f, - 0.60858154296875000000f, 0.68188476562500000000f, - 0.76678466796875000000f, 0.90145874023437489000f, - 0.14083862304687500000f, 0.18835449218749997000f, - 0.23965454101562500000f, 0.31286621093750000000f, - 0.38485717773437506000f, 0.44082641601562500000f, - 0.60177612304687500000f, 0.68484497070312500000f, - 0.76055908203125000000f, 0.89541625976562500000f, - 0.10882568359375000000f, 0.13769531250000000000f, - 0.21316528320312500000f, 0.26501464843750000000f, - 0.32177734375000000000f, 0.49124145507812500000f, - 0.55108642578125000000f, 0.68588256835937500000f, - 0.79547119140625000000f, 0.85958862304687500000f, - 0.13674926757812500000f, 0.16751098632812500000f, - 0.22680664062500000000f, 0.34832763671875000000f, - 0.40255737304687500000f, 0.46463012695312500000f, - 0.61526489257812500000f, 0.67926025390625000000f, - 0.80822753906250000000f, 0.90686035156250000000f, - 0.10131835937500000000f, 0.13183593750000000000f, - 0.20205688476562500000f, 0.30111694335937500000f, - 0.35342407226562500000f, 0.42828369140625000000f, - 0.64599609375000000000f, 0.70831298828125000000f, - 0.81140136718750000000f, 0.91256713867187500000f, - 0.11578369140625000000f, 0.14309692382812500000f, - 0.21105957031250000000f, 0.26412963867187500000f, - 0.30953979492187500000f, 0.49267578125000000000f, - 0.59716796875000000000f, 0.65881347656250000000f, - 0.84097290039062500000f, 0.90310668945312489000f, - 0.07464599609375000000f, 0.09997558593750000000f, - 0.18060302734375003000f, 0.38583374023437500000f, - 0.50662231445312500000f, 0.54971313476562500000f, - 0.64471435546875011000f, 0.70724487304687489000f, - 0.83312988281250000000f, 0.90435791015625000000f, - 0.07476806640625000000f, 0.10748291015625000000f, - 0.16592407226562500000f, 0.26123046875000000000f, - 0.46646118164062500000f, 0.60763549804687500000f, - 0.66607666015625000000f, 0.73538208007812500000f, - 0.81076049804687489000f, 0.88739013671875000000f, - 0.07873535156250000000f, 0.11584472656249999000f, - 0.17028808593750000000f, 0.25445556640625000000f, - 0.30422973632812500000f, 0.38681030273437500000f, - 0.57699584960937500000f, 0.69436645507812500000f, - 0.77667236328125000000f, 0.89392089843749989000f, - 0.10147094726562500000f, 0.13159179687500000000f, - 0.19046020507812500000f, 0.23526000976562500000f, - 0.27966308593750000000f, 0.44104003906250000000f, - 0.66116333007812489000f, 0.72622680664062511000f, - 0.82690429687500000000f, 0.91116333007812489000f, - 0.10186767578125000000f, 0.12704467773437500000f, - 0.23614501953125000000f, 0.33917236328125000000f, - 0.38659667968750000000f, 0.45022583007812500000f, - 0.51669311523437500000f, 0.69384765625000000000f, - 0.78341674804687500000f, 0.85733032226562500000f, - 0.11718749999999999000f, 0.14511108398437500000f, - 0.23666381835937500000f, 0.41110229492187506000f, - 0.46807861328125000000f, 0.52429199218750000000f, - 0.61270141601562500000f, 0.68215942382812500000f, - 0.82949829101562500000f, 0.90768432617187500000f, - 0.07641601562500000000f, 0.12448120117187500000f, - 0.25485229492187500000f, 0.36981201171875000000f, - 0.45916748046875000000f, 0.56747436523437500000f, - 0.66174316406250000000f, 0.75390625000000000000f, - 0.83981323242187500000f, 0.91360473632812500000f, - 0.15972900390625000000f, 0.19354248046875000000f, - 0.25228881835937500000f, 0.36074829101562500000f, - 0.46249389648437500000f, 0.51147460937500000000f, - 0.63070678710937500000f, 0.71679687500000000000f, - 0.79190063476562500000f, 0.89437866210937500000f, - 0.08181762695312500000f, 0.10870361328125000000f, - 0.18395996093750003000f, 0.33041381835937506000f, - 0.56329345703125000000f, 0.62432861328125000000f, - 0.68063354492187500000f, 0.75381469726562500000f, - 0.82128906250000000000f, 0.91418457031250000000f, - 0.10296630859375000000f, 0.13818359375000000000f, - 0.19012451171875000000f, 0.25195312500000000000f, - 0.29031372070312500000f, 0.38848876953124994000f, - 0.56964111328125000000f, 0.63232421875000000000f, - 0.79367065429687500000f, 0.86746215820312500000f, - 0.08334350585937500000f, 0.11074829101562500000f, - 0.25390625000000000000f, 0.37994384765625000000f, - 0.43066406250000000000f, 0.50143432617187500000f, - 0.56604003906250000000f, 0.67437744140625000000f, - 0.77297973632812500000f, 0.84588623046875000000f, - 0.10623168945312500000f, 0.13430786132812500000f, - 0.22341918945312503000f, 0.28439331054687500000f, - 0.33758544921875000000f, 0.39956665039062500000f, - 0.46145629882812500000f, 0.68099975585937489000f, - 0.80355834960937500000f, 0.87707519531250000000f, - 0.10916137695312500000f, 0.15090942382812500000f, - 0.20352172851562500000f, 0.26831054687500000000f, - 0.31430053710937500000f, 0.38589477539062506000f, - 0.59524536132812500000f, 0.75579833984375000000f, - 0.82385253906250011000f, 0.90435791015625000000f, - 0.12384033203125000000f, 0.15441894531250000000f, - 0.22241210937500000000f, 0.31097412109375000000f, - 0.35778808593750000000f, 0.42529296875000000000f, - 0.48367309570312500000f, 0.56576538085937500000f, - 0.81484985351562500000f, 0.91079711914062500000f, - 0.13006591796875000000f, 0.16448974609374997000f, - 0.21536254882812503000f, 0.27410888671875000000f, - 0.31088256835937500000f, 0.46582031250000000000f, - 0.62500000000000000000f, 0.68176269531250000000f, - 0.79217529296875000000f, 0.85668945312500000000f, - 0.10388183593750000000f, 0.13211059570312500000f, - 0.20230102539062497000f, 0.24249267578125000000f, - 0.30886840820312500000f, 0.52383422851562500000f, - 0.59936523437500000000f, 0.67883300781249989000f, - 0.76483154296875000000f, 0.83837890625000000000f, - 0.09634399414062501400f, 0.12719726562500000000f, - 0.18905639648437500000f, 0.28439331054687500000f, - 0.32870483398437500000f, 0.40664672851562500000f, - 0.47045898437500000000f, 0.60473632812500000000f, - 0.75292968750000000000f, 0.84332275390625000000f, - 0.07638549804687500000f, 0.10598754882812500000f, - 0.15655517578125000000f, 0.20651245117187500000f, - 0.26156616210937500000f, 0.45477294921875000000f, - 0.58084106445312500000f, 0.66912841796874989000f, - 0.79544067382812511000f, 0.87670898437500000000f, - 0.12612915039062500000f, 0.15570068359375000000f, - 0.23049926757812503000f, 0.30682373046875000000f, - 0.35879516601562500000f, 0.45544433593750000000f, - 0.53207397460937500000f, 0.61602783203125000000f, - 0.73202514648437489000f, 0.80175781249999989000f, - 0.15173339843750000000f, 0.18734741210937500000f, - 0.24090576171875000000f, 0.29397583007812500000f, - 0.34545898437500000000f, 0.43624877929687500000f, - 0.66336059570312500000f, 0.74176025390625000000f, - 0.82150268554687489000f, 0.91268920898437500000f, - 0.09027099609375000000f, 0.11645507812500000000f, - 0.20907592773437500000f, 0.28088378906250000000f, - 0.33248901367187506000f, 0.55090332031250000000f, - 0.63449096679687500000f, 0.71221923828125000000f, - 0.84094238281250000000f, 0.90359497070312500000f, - 0.15972900390625000000f, 0.18395996093750003000f, - 0.24517822265625000000f, 0.30987548828125000000f, - 0.34307861328125000000f, 0.45132446289062500000f, - 0.57824707031250000000f, 0.63983154296875000000f, - 0.81130981445312500000f, 0.88888549804687500000f, - 0.15994262695312503000f, 0.20867919921875000000f, - 0.32122802734375006000f, 0.39120483398437500000f, - 0.44802856445312500000f, 0.52880859375000000000f, - 0.60815429687500000000f, 0.68164062500000000000f, - 0.79934692382812500000f, 0.87576293945312500000f, - 0.10412597656250000000f, 0.12973022460937500000f, - 0.18273925781250000000f, 0.21649169921875000000f, - 0.30233764648437500000f, 0.55673217773437500000f, - 0.66128540039062500000f, 0.72561645507812511000f, - 0.82302856445312500000f, 0.88766479492187500000f, - 0.07537841796875000000f, 0.09817504882812500000f, - 0.23794555664062500000f, 0.46679687499999994000f, - 0.52993774414062500000f, 0.58395385742187500000f, - 0.67074584960937500000f, 0.74023437500000000000f, - 0.83380126953124989000f, 0.89849853515625000000f, - 0.15072631835937500000f, 0.17712402343750000000f, - 0.24856567382812500000f, 0.36038208007812506000f, - 0.42337036132812500000f, 0.47601318359375000000f, - 0.52593994140625000000f, 0.59274291992187500000f, - 0.80798339843750000000f, 0.90469360351562500000f, - 0.15414428710937500000f, 0.18820190429687497000f, - 0.25094604492187500000f, 0.29464721679687500000f, - 0.37106323242187500000f, 0.54916381835937500000f, - 0.62451171875000000000f, 0.69677734375000011000f, - 0.81225585937500000000f, 0.86859130859375000000f, - 0.15219116210937500000f, 0.18026733398437500000f, - 0.28439331054687500000f, 0.34317016601562500000f, - 0.40075683593750000000f, 0.45849609375000000000f, - 0.53359985351562500000f, 0.69235229492187511000f, - 0.79379272460937511000f, 0.86282348632812489000f, - 0.15676879882812500000f, 0.21008300781250000000f, - 0.33645629882812500000f, 0.45623779296875000000f, - 0.52462768554687500000f, 0.59280395507812500000f, - 0.66549682617187489000f, 0.74441528320312511000f, - 0.82208251953125000000f, 0.89379882812500000000f, - 0.21536254882812503000f, 0.24060058593750000000f, - 0.29077148437500000000f, 0.31991577148437500000f, - 0.33447265625000000000f, 0.45199584960937500000f, - 0.58197021484375000000f, 0.66146850585937500000f, - 0.78262329101562511000f, 0.85507202148437500000f, - 0.20626831054687500000f, 0.21850585937500000000f, - 0.26080322265625000000f, 0.35946655273437500000f, - 0.37521362304687500000f, 0.39743041992187500000f, - 0.50741577148437500000f, 0.64389038085937500000f, - 0.75369262695312500000f, 0.86325073242187500000f, - 0.11788940429687500000f, 0.29791259765625000000f, - 0.33776855468749994000f, 0.34927368164062500000f, - 0.36770629882812506000f, 0.42602539062500000000f, - 0.55191040039062500000f, 0.65634155273437500000f, - 0.76977539062500000000f, 0.88491821289062489000f, - 0.01211547851562500000f, 0.01022338867187500000f, - 0.01986694335937500000f, 0.03564453125000000000f, - 0.01953125000000000000f, 0.02334594726562500000f, - 0.01419067382812500000f, 0.01010131835937500000f, - 0.00653076171875000000f, -0.00592041015625000000f, - -0.01763916015625000000f, -0.01974487304687500000f, - -0.02005004882812500000f, 0.02288818359375000000f, - 0.01721191406250000000f, 0.01870727539062500000f, - 0.01675415039062500000f, 0.01922607421875000000f, - 0.00927734375000000000f, -0.00158691406250000020f, - 0.02526855468749999700f, 0.02813720703125000000f, - 0.01351928710937500000f, 0.00338745117187500000f, - 0.00421142578125000000f, 0.00378417968750000000f, - 0.00515747070312500000f, 0.00042724609375000000f, - 0.00439453125000000000f, 0.00253295898437500040f, - 0.00402832031250000000f, 0.00177001953125000000f, - -0.01260375976562500000f, -0.02294921875000000000f, - 0.02651977539062500000f, 0.01025390625000000000f, - 0.01174926757812500200f, 0.00210571289062500000f, - 0.00170898437500000000f, 0.02532958984375000000f, - -0.00692749023437500000f, -0.00811767578125000000f, - -0.01123046875000000000f, -0.01342773437500000000f, - -0.03646850585937500000f, 0.00497436523437500000f, - 0.00384521484375000000f, -0.00695800781250000000f, - 0.02447509765625000000f, 0.00476074218750000000f, - 0.00573730468750000000f, 0.00366210937499999960f, - 0.01147460937500000000f, 0.00180053710937500000f, - -0.01092529296875000000f, -0.01702880859375000000f, - -0.04046630859375000000f, -0.00775146484375000000f, - -0.00616455078125000000f, -0.02407836914062500000f, - 0.00903320312500000000f, 0.00280761718750000000f, - -0.00213623046875000000f, -0.00393676757812500000f, - -0.02191162109375000000f, -0.03463745117187500000f, - 0.00891113281250000000f, -0.00088500976562500000f, - -0.01925659179687500000f, 0.01486206054687500000f, - -0.00479125976562500000f, -0.00466918945312500000f, - -0.00851440429687500000f, 0.00006103515625000000f, - -0.01278686523437500000f, -0.01043701171875000000f, - -0.00103759765625000000f, -0.01568603515625000000f, - -0.02438354492187499700f, -0.04794311523437500000f, - -0.02096557617187500000f, -0.01858520507812500000f, - -0.01666259765625000000f, -0.00396728515625000000f, - -0.00656127929687500000f, -0.00769042968750000000f, - -0.01361083984375000000f, -0.01751708984375000000f, - -0.04080200195312500000f, 0.00631713867187499910f, - -0.00219726562500000000f, 0.00097656250000000000f, - 0.00314331054687500000f, -0.01959228515625000000f, - 0.02874755859375000300f, 0.02236938476562499700f, - 0.00570678710937500090f, 0.00088500976562500000f, - -0.00643920898437500000f, -0.02484130859375000300f, - 0.00436401367187500000f, 0.00686645507812500000f, - 0.00061035156250000000f, 0.00073242187500000000f, - -0.00817871093750000000f, -0.01150512695312500000f, - 0.04953002929687499300f, 0.03457641601562500000f, - 0.02035522460937500000f, 0.00500488281250000000f, - 0.00936889648437500000f, 0.01116943359375000000f, - 0.00570678710937500090f, 0.00103759765625000000f, - 0.00189208984375000000f, -0.00955200195312500000f, - -0.02539062500000000300f, -0.04522705078125000000f, - -0.03604125976562500000f, 0.01473999023437500000f, - -0.00128173828125000000f, -0.00119018554687500000f, - -0.01373291015625000000f, -0.04290771484375000000f, - -0.01791381835937500000f, -0.00158691406250000020f, - -0.02319335937500000000f, 0.01019287109375000000f, - 0.00299072265625000000f, -0.00183105468749999980f, - -0.01525878906249999800f, -0.01489257812500000000f, - -0.03228759765625000000f, 0.00912475585937500000f, - 0.00399780273437500000f, -0.00762939453124999910f, - -0.00765991210937500090f, -0.02145385742187500000f, - 0.03164672851562500000f, 0.01733398437500000000f, - -0.01260375976562500000f, -0.00808715820312500000f, - 0.05148315429687500000f, 0.01748657226562500000f, - 0.01052856445312500000f, 0.00985717773437500000f, - 0.00299072265625000000f, 0.00186157226562500000f, - -0.00311279296875000000f, 0.00094604492187500000f, - 0.00411987304687500000f, 0.00454711914062500000f, - 0.01882934570312500000f, 0.01113891601562500000f, - -0.00119018554687500000f, 0.00103759765625000000f, - -0.01864624023437500000f, 0.03665161132812500000f, - 0.04336547851562500000f, 0.02246093750000000000f, - -0.01263427734374999800f, -0.01199340820312500000f, - -0.01501464843750000000f, -0.01046752929687500200f, - -0.00964355468750000000f, -0.01623535156250000000f, - 0.01611328125000000000f, 0.00524902343750000000f, - 0.00274658203125000000f, 0.00982666015625000000f, - -0.00897216796875000000f, -0.00973510742187500000f, - -0.01651000976562500000f, 0.01535034179687500000f, - 0.01950073242187500000f, 0.01223754882812500000f, - 0.00003051757812500000f, -0.00454711914062500000f, - -0.00222778320312500000f, -0.00509643554687500000f, - 0.00457763671875000000f, 0.00360107421875000000f, - 0.00939941406250000000f, 0.00665283203124999910f, - 0.00369262695312500000f, 0.00595092773437500000f, - -0.00436401367187500000f, -0.00796508789062500000f, - -0.03091430664062500000f, -0.02447509765625000000f, - 0.01181030273437500000f, 0.01330566406249999800f, - 0.00396728515625000000f, -0.01303100585937500200f, - -0.01367187500000000000f, -0.02078247070312500000f, - 0.00375366210937500000f, -0.00265502929687500000f, - -0.00765991210937500090f, -0.00344848632812500000f, - 0.00836181640625000000f, 0.00946044921875000000f, - 0.01358032226562500000f, 0.01528930664062500000f, - 0.01080322265625000200f, 0.00830078125000000000f, - 0.00430297851562500000f, -0.00869750976562500000f, - 0.01736450195312500000f, 0.02001953125000000000f, - 0.00112915039062500000f, -0.00149536132812500000f, - 0.00765991210937500090f, -0.01177978515625000000f, - -0.00802612304687500000f, 0.03424072265625000000f, - 0.01843261718750000000f, 0.01849365234375000000f, - 0.01025390625000000000f, 0.00289916992187500000f, - 0.00103759765625000000f, 0.00000000000000000000f, - 0.00259399414062500000f, 0.00549316406250000000f, - 0.00631713867187499910f, -0.01119995117187500000f, - -0.01898193359375000000f, 0.03265380859375000000f, - -0.00018310546875000000f, -0.00241088867187500000f, - -0.00488281250000000000f, -0.00280761718750000000f, - -0.00418090820312500000f, -0.00842285156250000000f, - -0.00985717773437500000f, -0.01132202148437500000f, - -0.02124023437500000000f, -0.03161621093750000000f, - 0.01242065429687500200f, 0.00311279296875000000f, - -0.00262451171875000000f, -0.00653076171875000000f, - -0.01470947265625000200f, -0.01974487304687500000f, - -0.00085449218750000000f, -0.00888061523437500000f, - -0.00296020507812500000f, -0.00549316406250000000f, - -0.00762939453124999910f, -0.01327514648437500000f, - -0.00054931640625000000f, -0.00231933593750000000f, - -0.01013183593750000200f, 0.01251220703125000000f, - 0.01242065429687500200f, 0.00512695312500000000f, - 0.01644897460937500000f, 0.01254272460937500000f, - 0.00775146484375000000f, 0.00338745117187500000f, - 0.00177001953125000000f, -0.00442504882812500000f, - 0.00610351562500000000f, 0.00091552734374999989f, - 0.00570678710937500090f, 0.00354003906250000000f, - 0.00399780273437500000f, -0.01119995117187500000f, - -0.01449584960937500000f, 0.02383422851562500300f, - -0.01705932617187500000f, 0.01712036132812500000f, - 0.00595092773437500000f, -0.00350952148437500040f, - 0.00024414062500000000f, -0.00512695312500000000f, - 0.00091552734374999989f, 0.00167846679687500000f, - -0.00372314453125000000f, 0.00399780273437500000f, - 0.00250244140625000000f, -0.00015258789062500000f, - -0.00833129882812500000f, -0.00152587890625000000f, - -0.01928710937500000000f, 0.02038574218750000000f, - 0.00012207031250000000f, 0.00097656250000000000f, - -0.00079345703125000011f, -0.00851440429687500000f, - 0.00961303710937500000f, 0.00503540039062499910f, - 0.00601196289062499910f, 0.01150512695312500000f, - 0.00473022460937500000f, -0.00125122070312500000f, - -0.00421142578125000000f, -0.00988769531250000000f, - -0.00332641601562499960f, -0.01882934570312500000f, - 0.01098632812500000000f, 0.00299072265625000000f, - -0.00161743164062500000f, -0.00973510742187500000f, - -0.00347900390625000000f, -0.00747680664062500000f, - -0.00250244140625000000f, 0.01547241210937500000f, - 0.01428222656250000000f, 0.00802612304687500000f, - -0.00418090820312500000f, -0.01187133789062500000f, - 0.01989746093750000000f, 0.01080322265625000200f, - -0.00054931640625000000f, -0.00692749023437500000f, - -0.01409912109375000000f, -0.00411987304687500000f, - 0.00967407226562500000f, 0.00161743164062500000f, - -0.00048828125000000000f, 0.00201416015625000000f, - -0.00219726562500000000f, -0.00384521484375000000f, - -0.01086425781250000000f, -0.01058959960937500000f, - -0.01000976562500000000f, -0.00219726562500000000f, - -0.01028442382812500000f, 0.00988769531250000000f, - 0.00463867187500000000f, 0.01065063476562500000f, - 0.00515747070312500000f, -0.00598144531250000000f, - 0.00546264648437500000f, 0.00775146484375000000f, - 0.00793457031250000000f, 0.00991821289062500000f, - -0.00225830078125000000f, -0.00244140625000000000f, - 0.00228881835937500000f, -0.00094604492187500000f, - 0.00823974609375000000f, 0.00839233398437500000f, - 0.00265502929687500000f, 0.00848388671875000000f, - -0.01361083984375000000f, -0.00918579101562500000f, - 0.00942993164062500000f, 0.00216674804687500000f, - -0.00076293945312500000f, -0.00738525390625000000f, - 0.01574707031250000000f, 0.00491333007812500000f, - -0.00494384765625000000f, -0.00253295898437500040f, - 0.01004028320312500000f, 0.00701904296875000090f, - -0.00949096679687500000f, -0.00790405273437500000f, - 0.00540161132812500090f, -0.00079345703125000011f, - -0.01409912109375000000f, 0.00271606445312500000f, - 0.00784301757812500000f, 0.00018310546875000000f, - -0.00396728515625000000f, -0.00283813476562499960f, - -0.01391601562500000000f, -0.00967407226562500000f, - -0.00674438476562500000f, -0.00628662109375000000f, - -0.01272583007812500000f, -0.00555419921875000000f, - -0.00225830078125000000f, 0.00714111328125000000f, - 0.00146484375000000000f, 0.00796508789062500000f, - 0.01095581054687500000f, 0.00704956054687500000f, - 0.00787353515625000000f, 0.00259399414062500000f, - -0.00860595703125000000f, 0.00769042968750000000f, - -0.00448608398437500000f, -0.00677490234375000000f, - 0.00765991210937500090f, -0.00631713867187499910f, - 0.01351928710937500000f, 0.00375366210937500000f, - -0.01272583007812500000f, -0.00109863281250000000f, - 0.00833129882812500000f, -0.00735473632812500090f, - 0.00732421874999999910f, -0.00341796875000000000f, - 0.00134277343749999980f, -0.00509643554687500000f, - 0.00384521484375000000f, -0.00378417968750000000f, - -0.00234985351562500000f, 0.00177001953125000000f, - -0.01223754882812500000f, 0.01016235351562500000f, - -0.00360107421875000000f, 0.00250244140625000000f, - 0.00384521484375000000f, 0.00460815429687500000f, - -0.01321411132812500000f, 0.01095581054687500000f, - -0.00396728515625000000f, -0.00311279296875000000f, - 0.00399780273437500000f, -0.00744628906250000000f, - 0.00262451171875000000f, 0.00259399414062500000f, - -0.01409912109375000000f, 0.01263427734374999800f, - -0.00732421874999999910f, 0.00048828125000000000f, - 0.00442504882812500000f, 0.00085449218750000000f, - -0.00625610351562500000f, -0.01467895507812500000f, - 0.01138305664062500000f, 0.00894165039062500000f, - -0.00219726562500000000f, -0.00531005859375000000f, - 0.00189208984375000000f, 0.00790405273437500000f, - -0.00024414062500000000f, -0.00054931640625000000f, - 0.01104736328125000000f, 0.00711059570312500000f, - 0.00564575195312500000f, 0.00131225585937500000f, - 0.00848388671875000000f, 0.00082397460937500000f, - 0.00588989257812500000f, 0.01739501953125000000f, - -0.00756835937500000000f, 0.00576782226562500000f, - 0.00280761718750000000f, 0.00094604492187500000f, - -0.00839233398437500000f, -0.00009155273437500000f, - 0.00741577148437500000f, 0.00537109374999999910f, - 0.01336669921875000200f, 0.00637817382812500090f, - 0.00628662109375000000f, -0.00155639648437500000f, - 0.00241088867187500000f, 0.00332641601562499960f, - 0.00512695312500000000f, -0.00564575195312500000f, - -0.00939941406250000000f, -0.00207519531250000000f, - -0.01885986328125000000f, 0.01174926757812500200f, - -0.00946044921875000000f, -0.00329589843750000000f, - -0.00500488281250000000f, 0.00503540039062499910f, - 0.00186157226562500000f, -0.00463867187500000000f, - -0.00308227539062500000f, -0.01257324218750000000f, - -0.00817871093750000000f, -0.00784301757812500000f, - -0.00122070312500000000f, -0.00061035156250000000f, - -0.00085449218750000000f, -0.00482177734375000000f, - -0.00918579101562500000f, 0.00827026367187500000f, - 0.01159667968750000000f, -0.01031494140625000000f, - -0.01119995117187500000f, -0.00402832031250000000f, - 0.00195312500000000000f, 0.00347900390625000000f, - -0.00399780273437500000f, -0.00686645507812500000f, - -0.00476074218750000000f, -0.00793457031250000000f, - -0.00192260742187500000f, -0.00354003906250000000f, - 0.00473022460937500000f, -0.01788330078125000000f, - -0.00616455078125000000f, 0.00775146484375000000f, - -0.00875854492187500000f, 0.00543212890625000000f, - 0.00692749023437500000f, -0.00323486328125000000f, - -0.00897216796875000000f, 0.00500488281250000000f, - 0.00909423828125000000f, -0.00305175781250000000f, - 0.00564575195312500000f, 0.00967407226562500000f, - 0.00588989257812500000f, -0.00137329101562500000f, - 0.00085449218750000000f, 0.00244140625000000000f, - -0.00265502929687500000f, -0.01321411132812500000f, - 0.00067138671874999989f, -0.00146484375000000000f, - 0.00146484375000000000f, -0.00723266601562500000f, - -0.00698852539062499910f, -0.00424194335937500000f, - 0.00366210937499999960f, -0.01110839843750000000f, - 0.00817871093750000000f, -0.00415039062500000000f, - 0.01208496093750000200f, 0.00381469726562499960f, - 0.00396728515625000000f, -0.00271606445312500000f, - -0.00830078125000000000f, 0.00360107421875000000f, - -0.00781250000000000000f, -0.00207519531250000000f, - -0.01376342773437500000f, 0.01489257812500000000f, - 0.00436401367187500000f, -0.00503540039062499910f, - -0.00146484375000000000f, -0.00579833984375000000f, - 0.00323486328125000000f, 0.00668334960937500090f, - 0.00143432617187500000f, 0.01327514648437500000f, - 0.00747680664062500000f, 0.00296020507812500000f, - 0.00228881835937500000f, -0.01275634765625000200f, - 0.00369262695312500000f, -0.00570678710937500090f, - 0.01739501953125000000f, -0.00610351562500000000f, - -0.01071166992187500000f, 0.00686645507812500000f, - -0.00064086914062500000f, -0.00662231445312500000f, - 0.00714111328125000000f, -0.00338745117187500000f, - 0.00592041015625000000f, 0.00042724609375000000f, - 0.00738525390625000000f, 0.00360107421875000000f, - 0.00427246093750000000f, -0.01211547851562500000f, - 0.01083374023437500000f, 0.01101684570312499800f, - -0.00137329101562500000f, -0.00595092773437500000f + -0.42187500000000000000f, -0.35156250000000000000f, + -0.27734375000000000000f, -0.19140625000000000000f, + -0.09375000000000000000f, -0.01953125000000000000f, + 0.08203125000000000000f, 0.18750000000000000000f, + 0.29296875000000000000f, 0.38671875000000006000f, + -0.42187500000000000000f, -0.38671875000000006000f, + -0.29687500000000000000f, -0.22265625000000000000f, + -0.15234375000000000000f, -0.02734375000000000000f, + 0.07812500000000000000f, 0.19531250000000000000f, + 0.29687500000000000000f, 0.38281250000000000000f, + -0.41015625000000000000f, -0.37890625000000000000f, + -0.32421875000000006000f, -0.19140625000000000000f, + -0.07421875000000000000f, -0.02734375000000000000f, + 0.10546875000000000000f, 0.18359375000000000000f, + 0.26171875000000000000f, 0.39843750000000000000f, + -0.37890625000000000000f, -0.35156250000000000000f, + -0.29296875000000000000f, -0.19140625000000000000f, + -0.02343750000000000000f, 0.02343750000000000000f, + 0.10546875000000000000f, 0.21484375000000000000f, + 0.28515625000000000000f, 0.37109375000000000000f, + -0.37109375000000000000f, -0.34765625000000000000f, + -0.28125000000000000000f, -0.15625000000000000000f, + -0.10937500000000000000f, -0.04296874999999999300f, + 0.08203125000000000000f, 0.14453125000000000000f, + 0.27343750000000000000f, 0.33593750000000000000f, + -0.40234375000000000000f, -0.37890625000000000000f, + -0.32031250000000000000f, -0.18750000000000000000f, + 0.03125000000000000000f, 0.08203125000000000000f, + 0.14062500000000000000f, 0.21875000000000000000f, + 0.28906250000000000000f, 0.39453125000000000000f, + -0.40234375000000000000f, -0.37500000000000000000f, + -0.31640625000000000000f, -0.12890625000000000000f, + -0.07421875000000000000f, -0.01171875000000000000f, + 0.10937500000000000000f, 0.16015625000000000000f, + 0.33593750000000000000f, 0.39843750000000000000f, + -0.43359375000000000000f, -0.39843750000000000000f, + -0.33203125000000000000f, -0.24218750000000000000f, + -0.14843750000000000000f, -0.08203125000000000000f, + 0.04296874999999999300f, 0.16015625000000000000f, + 0.25781250000000000000f, 0.37109375000000000000f, + -0.34374999999999994000f, -0.32031250000000000000f, + -0.24609375000000000000f, -0.10937500000000000000f, + -0.03906250000000000000f, 0.00390625000000000000f, + 0.13671875000000000000f, 0.20703125000000000000f, + 0.28515625000000000000f, 0.40234375000000000000f, + -0.39453125000000000000f, -0.37500000000000000000f, + -0.26171875000000000000f, -0.06640625000000000000f, + -0.01562500000000000000f, 0.03906250000000000000f, + 0.11718749999999999000f, 0.17578125000000000000f, + 0.33593750000000000000f, 0.40234375000000000000f, + -0.36718750000000000000f, -0.33984375000000000000f, + -0.27343750000000000000f, -0.21484375000000000000f, + -0.17187499999999997000f, -0.09765625000000000000f, + 0.14453125000000000000f, 0.21484375000000000000f, + 0.28515625000000000000f, 0.40625000000000006000f, + -0.38281250000000000000f, -0.35937500000000000000f, + -0.27734375000000000000f, -0.14453125000000000000f, + -0.08984375000000000000f, -0.03906250000000000000f, + 0.14453125000000000000f, 0.21093750000000000000f, + 0.28515625000000000000f, 0.40625000000000006000f, + -0.44531250000000000000f, -0.42187500000000000000f, + -0.30859375000000000000f, -0.19140625000000000000f, + -0.07812500000000000000f, 0.00781250000000000000f, + 0.11328125000000000000f, 0.21093750000000000000f, + 0.31250000000000000000f, 0.40234375000000000000f, + -0.41796875000000000000f, -0.38671875000000006000f, + -0.33593750000000000000f, -0.23437499999999997000f, + -0.02734375000000000000f, 0.04296874999999999300f, + 0.10546875000000000000f, 0.19140625000000000000f, + 0.26171875000000000000f, 0.37109375000000000000f, + -0.39062500000000000000f, -0.36718750000000000000f, + -0.29687500000000000000f, -0.15625000000000000000f, + -0.01953125000000000000f, 0.02343750000000000000f, + 0.10156250000000001000f, 0.16796875000000000000f, + 0.24218750000000000000f, 0.39843750000000000000f, + -0.34374999999999994000f, -0.30859375000000000000f, + -0.25000000000000000000f, -0.17187499999999997000f, + -0.10937500000000000000f, -0.05859374999999999300f, + 0.10156250000000001000f, 0.16796875000000000000f, + 0.25000000000000000000f, 0.40625000000000006000f, + -0.40234375000000000000f, -0.38281250000000000000f, + -0.27734375000000000000f, -0.10156250000000001000f, + -0.05468750000000000000f, 0.01562500000000000000f, + 0.08984375000000000000f, 0.16796875000000000000f, + 0.28125000000000000000f, 0.33984375000000000000f, + -0.42968750000000000000f, -0.40234375000000000000f, + -0.32421875000000006000f, -0.22656250000000000000f, + -0.10546875000000000000f, -0.01953125000000000000f, + 0.06250000000000000000f, 0.13671875000000000000f, + 0.22656250000000000000f, 0.35937500000000000000f, + -0.40234375000000000000f, -0.36718750000000000000f, + -0.30859375000000000000f, -0.24218750000000000000f, + -0.08203125000000000000f, -0.02734375000000000000f, + 0.04687500000000000000f, 0.20312500000000003000f, + 0.26953125000000000000f, 0.34374999999999994000f, + -0.41796875000000000000f, -0.38281250000000000000f, + -0.32812500000000000000f, -0.17187499999999997000f, + -0.11328125000000000000f, -0.04687500000000000000f, + 0.03515625000000000000f, 0.10937500000000000000f, + 0.28515625000000000000f, 0.35156250000000000000f, + -0.38671875000000006000f, -0.36328124999999994000f, + -0.26562500000000000000f, -0.12500000000000000000f, + -0.07421875000000000000f, -0.01953125000000000000f, + 0.04687500000000000000f, 0.10937500000000000000f, + 0.33593750000000000000f, 0.40625000000000006000f, + -0.39062500000000000000f, -0.35546875000000000000f, + -0.29296875000000000000f, -0.21484375000000000000f, + -0.15625000000000000000f, -0.10156250000000001000f, + 0.07812500000000000000f, 0.15625000000000000000f, + 0.22656250000000000000f, 0.39453125000000000000f, + -0.39062500000000000000f, -0.36718750000000000000f, + -0.28515625000000000000f, -0.23437499999999997000f, + -0.19140625000000000000f, -0.00390625000000000000f, + 0.07031250000000000000f, 0.14062500000000000000f, + 0.32421875000000006000f, 0.37500000000000000000f, + -0.41406250000000000000f, -0.37890625000000000000f, + -0.26953125000000000000f, -0.18359375000000000000f, + -0.09765625000000000000f, 0.04296874999999999300f, + 0.12109375000000000000f, 0.17968750000000000000f, + 0.25390625000000000000f, 0.34765625000000000000f, + -0.36328124999999994000f, -0.33984375000000000000f, + -0.26953125000000000000f, -0.17968750000000000000f, + -0.12500000000000000000f, -0.07031250000000000000f, + -0.00781250000000000000f, 0.05468750000000000000f, + 0.28906250000000000000f, 0.40234375000000000000f, + -0.36328124999999994000f, -0.33984375000000000000f, + -0.25390625000000000000f, -0.11328125000000000000f, + 0.02343750000000000000f, 0.07031250000000000000f, + 0.14843750000000000000f, 0.22265625000000000000f, + 0.28906250000000000000f, 0.39843750000000000000f, + -0.35937500000000000000f, -0.33203125000000000000f, + -0.25781250000000000000f, -0.21093750000000000000f, + -0.16796875000000000000f, -0.01562500000000000000f, + 0.12500000000000000000f, 0.17578125000000000000f, + 0.34374999999999994000f, 0.40625000000000006000f, + -0.42187500000000000000f, -0.38671875000000006000f, + -0.33203125000000000000f, -0.19531250000000000000f, + -0.13671875000000000000f, -0.07421875000000000000f, + 0.11328125000000000000f, 0.16015625000000000000f, + 0.32812500000000000000f, 0.39843750000000000000f, + -0.37890625000000000000f, -0.35156250000000000000f, + -0.28515625000000000000f, -0.22265625000000000000f, + -0.18750000000000000000f, -0.09375000000000000000f, + 0.08203125000000000000f, 0.13671875000000000000f, + 0.30859375000000000000f, 0.36718750000000000000f, + -0.32812500000000000000f, -0.29687500000000000000f, + -0.22265625000000000000f, -0.15625000000000000000f, + -0.11328125000000000000f, -0.04296874999999999300f, + 0.16015625000000000000f, 0.23437499999999997000f, + 0.31250000000000000000f, 0.40625000000000006000f, + -0.39062500000000000000f, -0.36718750000000000000f, + -0.29296875000000000000f, -0.25000000000000000000f, + -0.19921875000000000000f, 0.00781250000000000000f, + 0.07812500000000000000f, 0.17578125000000000000f, + 0.26562500000000000000f, 0.33203125000000000000f, + -0.39062500000000000000f, -0.36718750000000000000f, + -0.24218750000000000000f, -0.16015625000000000000f, + -0.11718749999999999000f, 0.05078125000000000700f, + 0.12109375000000000000f, 0.20312500000000003000f, + 0.33203125000000000000f, 0.39453125000000000000f, + -0.37109375000000000000f, -0.33593750000000000000f, + -0.27343750000000000000f, -0.20312500000000003000f, + -0.14843750000000000000f, -0.08984375000000000000f, + 0.07031250000000000000f, 0.25000000000000000000f, + 0.32421875000000006000f, 0.39453125000000000000f, + -0.44531250000000000000f, -0.42187500000000000000f, + -0.36718750000000000000f, -0.26953125000000000000f, + -0.12109375000000000000f, -0.01953125000000000000f, + 0.09375000000000000000f, 0.17968750000000000000f, + 0.28125000000000000000f, 0.38671875000000006000f, + -0.39062500000000000000f, -0.37109375000000000000f, + -0.21093750000000000000f, -0.14843750000000000000f, + -0.10156250000000001000f, -0.03906250000000000000f, + 0.01171875000000000000f, 0.19921875000000000000f, + 0.29296875000000000000f, 0.34765625000000000000f, + -0.40625000000000006000f, -0.38281250000000000000f, + -0.28515625000000000000f, -0.12109375000000000000f, + 0.07031250000000000000f, 0.12109375000000000000f, + 0.17968750000000000000f, 0.25390625000000000000f, + 0.32031250000000000000f, 0.41015625000000000000f, + -0.35156250000000000000f, -0.32812500000000000000f, + -0.24218750000000000000f, -0.19921875000000000000f, + -0.14843750000000000000f, 0.01171875000000000000f, + 0.09765625000000000000f, 0.17187499999999997000f, + 0.28125000000000000000f, 0.33593750000000000000f, + -0.42578124999999994000f, -0.40234375000000000000f, + -0.32421875000000006000f, -0.11328125000000000000f, + 0.00781250000000000000f, 0.04296874999999999300f, + 0.14843750000000000000f, 0.20703125000000000000f, + 0.32812500000000000000f, 0.39453125000000000000f, + -0.33593750000000000000f, -0.29296875000000000000f, + -0.23828125000000000000f, -0.17968750000000000000f, + -0.06640625000000000000f, -0.01562500000000000000f, + 0.07031250000000000000f, 0.20312500000000003000f, + 0.26953125000000000000f, 0.35546875000000000000f, + -0.42578124999999994000f, -0.39062500000000000000f, + -0.32421875000000006000f, -0.21093750000000000000f, + -0.03906250000000000000f, 0.00390625000000000000f, + 0.07421875000000000000f, 0.13671875000000000000f, + 0.31640625000000000000f, 0.39062500000000000000f, + -0.39453125000000000000f, -0.37109375000000000000f, + -0.30468750000000000000f, -0.26562500000000000000f, + -0.22656250000000000000f, -0.06250000000000000000f, + 0.15234375000000000000f, 0.21875000000000000000f, + 0.33203125000000000000f, 0.40234375000000000000f, + -0.33984375000000000000f, -0.31250000000000000000f, + -0.22656250000000000000f, -0.16015625000000000000f, + -0.11328125000000000000f, -0.02734375000000000000f, + 0.05468750000000000000f, 0.11718749999999999000f, + 0.33593750000000000000f, 0.40625000000000006000f, + -0.41015625000000000000f, -0.38671875000000006000f, + -0.23828125000000000000f, -0.02734375000000000000f, + 0.02343750000000000000f, 0.08203125000000000000f, + 0.17187499999999997000f, 0.23828125000000000000f, + 0.33984375000000000000f, 0.39843750000000000000f, + -0.33593750000000000000f, -0.31250000000000000000f, + -0.18750000000000000000f, -0.11718749999999999000f, + -0.07031250000000000000f, 0.01953125000000000000f, + 0.09765625000000000000f, 0.16796875000000000000f, + 0.32031250000000000000f, 0.37890625000000000000f, + -0.38281250000000000000f, -0.35937500000000000000f, + -0.25781250000000000000f, -0.19140625000000000000f, + -0.14062500000000000000f, -0.05078125000000000700f, + 0.00000000000000000000f, 0.13671875000000000000f, + 0.23046875000000000000f, 0.30859375000000000000f, + -0.38281250000000000000f, -0.36328124999999994000f, + -0.25781250000000000000f, -0.20312500000000003000f, + -0.15625000000000000000f, -0.09375000000000000000f, + -0.04687500000000000000f, 0.17968750000000000000f, + 0.31640625000000000000f, 0.38281250000000000000f, + -0.41796875000000000000f, -0.37109375000000000000f, + -0.25000000000000000000f, -0.15234375000000000000f, + -0.05468750000000000000f, 0.05468750000000000000f, + 0.16406250000000000000f, 0.25390625000000000000f, + 0.34374999999999994000f, 0.41406250000000000000f, + -0.40625000000000006000f, -0.37500000000000000000f, + -0.32031250000000000000f, -0.25390625000000000000f, + -0.21093750000000000000f, -0.13671875000000000000f, + 0.08203125000000000000f, 0.19921875000000000000f, + 0.28125000000000000000f, 0.38671875000000006000f, + -0.36718750000000000000f, -0.33984375000000000000f, + -0.28906250000000000000f, -0.23046875000000000000f, + -0.08203125000000000000f, -0.03906250000000000000f, + 0.05468750000000000000f, 0.13671875000000000000f, + 0.22656250000000000000f, 0.37500000000000000000f, + -0.42187500000000000000f, -0.39062500000000000000f, + -0.33593750000000000000f, -0.27734375000000000000f, + -0.23046875000000000000f, -0.06250000000000000000f, + 0.07812500000000000000f, 0.16015625000000000000f, + 0.28906250000000000000f, 0.37890625000000000000f, + -0.40234375000000000000f, -0.37109375000000000000f, + -0.31250000000000000000f, -0.22265625000000000000f, + -0.17578125000000000000f, -0.09375000000000000000f, + -0.02343750000000000000f, 0.07421875000000000000f, + 0.25781250000000000000f, 0.34765625000000000000f, + -0.38671875000000006000f, -0.36328124999999994000f, + -0.28906250000000000000f, -0.25390625000000000000f, + -0.19531250000000000000f, 0.07812500000000000000f, + 0.15625000000000000000f, 0.22265625000000000000f, + 0.33203125000000000000f, 0.38281250000000000000f, + -0.39843750000000000000f, -0.37500000000000000000f, + -0.16015625000000000000f, -0.08203125000000000000f, + -0.04296874999999999300f, 0.03515625000000000000f, + 0.09765625000000000000f, 0.23046875000000000000f, + 0.32421875000000006000f, 0.38281250000000000000f, + -0.36718750000000000000f, -0.33984375000000000000f, + -0.27734375000000000000f, -0.23046875000000000000f, + -0.18359375000000000000f, -0.03125000000000000000f, + 0.19531250000000000000f, 0.26562500000000000000f, + 0.33593750000000000000f, 0.41015625000000000000f, + -0.42187500000000000000f, -0.39453125000000000000f, + -0.32812500000000000000f, -0.23046875000000000000f, + -0.04296874999999999300f, 0.11328125000000000000f, + 0.17187499999999997000f, 0.23828125000000000000f, + 0.32031250000000000000f, 0.38671875000000006000f, + -0.38281250000000000000f, -0.36718750000000000000f, + -0.32031250000000000000f, -0.28515625000000000000f, + -0.10156250000000001000f, 0.02343750000000000000f, + 0.11718749999999999000f, 0.20703125000000000000f, + 0.30859375000000000000f, 0.38281250000000000000f, + -0.33203125000000000000f, -0.27734375000000000000f, + -0.14453125000000000000f, -0.04687500000000000000f, + 0.01171875000000000000f, 0.08593749999999998600f, + 0.16015625000000000000f, 0.23828125000000000000f, + 0.33203125000000000000f, 0.39062500000000000000f, + -0.33203125000000000000f, -0.30859375000000000000f, + -0.25781250000000000000f, -0.21484375000000000000f, + -0.07421875000000000000f, 0.06640625000000000000f, + 0.12890625000000000000f, 0.21875000000000000000f, + 0.32421875000000006000f, 0.37890625000000000000f, + -0.28125000000000000000f, -0.25781250000000000000f, + -0.23437499999999997000f, -0.22265625000000000000f, + -0.19531250000000000000f, 0.01562500000000000000f, + 0.10156250000000001000f, 0.20312500000000003000f, + 0.30859375000000000000f, 0.40234375000000000000f, + -0.37109375000000000000f, -0.28906250000000000000f, + -0.12109375000000000000f, -0.07031250000000000000f, + -0.04296874999999999300f, -0.02343750000000000000f, + 0.03515625000000000000f, 0.20312500000000003000f, + 0.30078125000000000000f, 0.39062500000000000000f, + -0.30468750000000000000f, -0.29296875000000000000f, + -0.26562500000000000000f, -0.19921875000000000000f, + -0.16796875000000000000f, -0.14843750000000000000f, + 0.04687500000000000000f, 0.17578125000000000000f, + 0.28906250000000000000f, 0.39062500000000000000f, + -0.38671875000000006000f, -0.26562500000000000000f, + -0.15625000000000000000f, -0.12890625000000000000f, + -0.09375000000000000000f, -0.06250000000000000000f, + 0.08984375000000000000f, 0.22656250000000000000f, + 0.30859375000000000000f, 0.37890625000000000000f, + -0.38671875000000006000f, -0.18750000000000000000f, + -0.16406250000000000000f, -0.15625000000000000000f, + -0.14062500000000000000f, -0.07421875000000000000f, + 0.10156250000000001000f, 0.20312500000000003000f, + 0.31250000000000000000f, 0.41015625000000000000f, + -0.28515625000000000000f, -0.26953125000000000000f, + -0.24218750000000000000f, -0.16796875000000000000f, + -0.12109375000000000000f, -0.09765625000000000000f, + 0.08203125000000000000f, 0.18750000000000000000f, + 0.29687500000000000000f, 0.39453125000000000000f, + 0.03125000000000000000f, 0.02734375000000000000f, + 0.01953125000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + -0.03125000000000000000f, -0.04296874999999999300f, + -0.00781250000000000000f, -0.01562500000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, -0.02343750000000000000f, + -0.01562500000000000000f, -0.02734375000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.02343750000000000000f, 0.01953125000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.03125000000000000000f, + 0.01953125000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, -0.00781250000000000000f, + 0.03125000000000000000f, 0.01953125000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.03515625000000000000f, -0.05078125000000000700f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.01562500000000000000f, -0.00390625000000000000f, + 0.03515625000000000000f, 0.01562500000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + -0.03515625000000000000f, 0.01562500000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + 0.04296874999999999300f, 0.02734375000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.04296874999999999300f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.01953125000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.04687500000000000000f, 0.03125000000000000000f, + 0.01953125000000000000f, 0.01171875000000000000f, + -0.00390625000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.01562500000000000000f, + -0.01953125000000000000f, -0.02343750000000000000f, + -0.05078125000000000700f, 0.01953125000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01953125000000000000f, -0.01953125000000000000f, + -0.03906250000000000000f, 0.03125000000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + -0.01953125000000000000f, -0.00781250000000000000f, + -0.01953125000000000000f, -0.03125000000000000000f, + 0.03906250000000000000f, 0.01953125000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01953125000000000000f, + -0.03515625000000000000f, 0.04687500000000000000f, + 0.02343750000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.01953125000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.04687500000000000000f, + 0.03125000000000000000f, 0.01562500000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01953125000000000000f, -0.02734375000000000000f, + 0.02343750000000000000f, 0.01171875000000000000f, + -0.00781250000000000000f, -0.01171875000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.01562500000000000000f, + -0.03125000000000000000f, 0.02734375000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, 0.01953125000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, -0.02734375000000000000f, + 0.02343750000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.02343750000000000000f, + 0.01171875000000000000f, 0.02343750000000000000f, + 0.02343750000000000000f, 0.01171875000000000000f, + 0.01562500000000000000f, 0.01953125000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.01953125000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.01562500000000000000f, + -0.01562500000000000000f, -0.02734375000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.02734375000000000000f, + -0.00390625000000000000f, 0.02343750000000000000f, + -0.01562500000000000000f, -0.01562500000000000000f, + -0.01953125000000000000f, -0.01953125000000000000f, + -0.01562500000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + -0.03906250000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.02734375000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, -0.02343750000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.01562500000000000000f, -0.01562500000000000000f, + -0.00390625000000000000f, -0.01562500000000000000f, + 0.01171875000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.01953125000000000000f, + 0.01953125000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.01953125000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + 0.01562500000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.01953125000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.02734375000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.01953125000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01171875000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + -0.00781250000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.01953125000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.01953125000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.01171875000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.01171875000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, -0.01171875000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.01171875000000000000f, + -0.01171875000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.01171875000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.01953125000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.01562500000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.01953125000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.01171875000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f }; const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB0_10_Stage_info_FLP[ NLSF_MSVQ_CB0_10_STAGES ] = @@ -724,7 +768,8 @@ const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB0_10_Stage_info_FLP[ NLSF_MSVQ_CB0_1 { 8, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * 80 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[ 80 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * 88 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[ 88 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * 96 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[ 96 ] }, - { 16, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[ 104 ] } + { 8, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[ 104 ] }, + { 16, &SKP_Silk_NLSF_MSVQ_CB0_10[ 10 * 112 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates[ 112 ] } }; const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB0_10_FLP = diff --git a/src_FLP/SKP_Silk_tables_NLSF_CB0_16_FLP.c b/src_FLP/SKP_Silk_tables_NLSF_CB0_16_FLP.c index b6a1b8be42e902e0c3ff87e8d80dfdc66a9ac324..f7a7c27f0dcda311f78c0d98a363fc135c49c381 100644 --- a/src_FLP/SKP_Silk_tables_NLSF_CB0_16_FLP.c +++ b/src_FLP/SKP_Silk_tables_NLSF_CB0_16_FLP.c @@ -28,7 +28,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /**********************************************/ /* This file has been automatically generated */ /* */ -/* ROM usage: 14.76 kB */ +/* ROM usage: 10.40 kB */ /**********************************************/ #include "SKP_Silk_tables_FLP.h" @@ -36,1881 +36,1337 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. const SKP_float SKP_Silk_NLSF_MSVQ_CB0_16_rates[ NLSF_MSVQ_CB0_16_VECTORS ] = { - 5.50000000000000000000f, 5.65625000000000000000f, - 5.68750000000000000000f, 5.71875000000000000000f, + 4.62500000000000000000f, 4.75000000000000000000f, + 4.81250000000000000000f, 5.06250000000000000000f, + 5.25000000000000000000f, 5.25000000000000000000f, + 5.31250000000000000000f, 5.50000000000000000000f, + 5.56250000000000000000f, 5.56250000000000000000f, + 5.56250000000000000000f, 5.62500000000000000000f, + 5.75000000000000000000f, 5.81250000000000000000f, 5.81250000000000000000f, 5.81250000000000000000f, - 5.96875000000000000000f, 5.96875000000000000000f, - 5.96875000000000000000f, 6.12500000000000000000f, - 6.15625000000000000000f, 6.28125000000000000000f, - 6.34375000000000000000f, 6.43750000000000000000f, - 6.43750000000000000000f, 6.43750000000000000000f, - 6.46875000000000000000f, 6.46875000000000000000f, - 6.53125000000000000000f, 6.53125000000000000000f, - 6.53125000000000000000f, 6.53125000000000000000f, - 6.56250000000000000000f, 6.56250000000000000000f, - 6.56250000000000000000f, 6.59375000000000000000f, - 6.59375000000000000000f, 6.59375000000000000000f, + 5.87500000000000000000f, 5.87500000000000000000f, + 5.87500000000000000000f, 5.87500000000000000000f, + 5.93750000000000000000f, 5.93750000000000000000f, + 5.93750000000000000000f, 6.00000000000000000000f, + 6.00000000000000000000f, 6.00000000000000000000f, + 6.00000000000000000000f, 6.06250000000000000000f, + 6.06250000000000000000f, 6.12500000000000000000f, + 6.12500000000000000000f, 6.12500000000000000000f, + 6.12500000000000000000f, 6.18750000000000000000f, + 6.18750000000000000000f, 6.18750000000000000000f, + 6.25000000000000000000f, 6.25000000000000000000f, + 6.25000000000000000000f, 6.25000000000000000000f, + 6.25000000000000000000f, 6.31250000000000000000f, + 6.31250000000000000000f, 6.31250000000000000000f, + 6.37500000000000000000f, 6.37500000000000000000f, + 6.43750000000000000000f, 6.50000000000000000000f, + 6.50000000000000000000f, 6.56250000000000000000f, 6.62500000000000000000f, 6.68750000000000000000f, - 6.75000000000000000000f, 6.75000000000000000000f, - 6.78125000000000000000f, 6.78125000000000000000f, - 6.78125000000000000000f, 6.78125000000000000000f, - 6.81250000000000000000f, 6.81250000000000000000f, - 6.84375000000000000000f, 6.84375000000000000000f, - 6.87500000000000000000f, 6.90625000000000000000f, - 6.93750000000000000000f, 6.96875000000000000000f, - 6.96875000000000000000f, 6.96875000000000000000f, - 6.96875000000000000000f, 7.00000000000000000000f, - 7.00000000000000000000f, 7.00000000000000000000f, - 7.03125000000000000000f, 7.03125000000000000000f, - 7.06250000000000000000f, 7.06250000000000000000f, - 7.06250000000000000000f, 7.06250000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.12500000000000000000f, 7.12500000000000000000f, - 7.12500000000000000000f, 7.12500000000000000000f, - 7.15625000000000000000f, 7.15625000000000000000f, - 7.15625000000000000000f, 7.18750000000000000000f, - 7.18750000000000000000f, 7.18750000000000000000f, - 7.21875000000000000000f, 7.21875000000000000000f, - 7.21875000000000000000f, 7.21875000000000000000f, - 7.25000000000000000000f, 7.25000000000000000000f, - 7.25000000000000000000f, 7.25000000000000000000f, - 7.28125000000000000000f, 7.31250000000000000000f, - 7.34375000000000000000f, 7.34375000000000000000f, - 7.34375000000000000000f, 7.37500000000000000000f, - 7.37500000000000000000f, 7.37500000000000000000f, - 7.37500000000000000000f, 7.40625000000000000000f, - 7.40625000000000000000f, 7.40625000000000000000f, - 7.40625000000000000000f, 7.50000000000000000000f, - 7.50000000000000000000f, 7.50000000000000000000f, - 7.50000000000000000000f, 7.53125000000000000000f, - 7.56250000000000000000f, 7.59375000000000000000f, - 7.62500000000000000000f, 7.62500000000000000000f, - 7.71875000000000000000f, 7.71875000000000000000f, - 7.75000000000000000000f, 7.75000000000000000000f, - 7.75000000000000000000f, 7.78125000000000000000f, - 7.84375000000000000000f, 7.96875000000000000000f, - 7.96875000000000000000f, 8.00000000000000000000f, - 8.12500000000000000000f, 8.12500000000000000000f, - 8.15625000000000000000f, 8.25000000000000000000f, - 8.25000000000000000000f, 8.31250000000000000000f, - 8.31250000000000000000f, 8.37500000000000000000f, - 8.46875000000000000000f, 8.56250000000000000000f, - 8.62500000000000000000f, 8.71875000000000000000f, - 9.00000000000000000000f, 9.00000000000000000000f, - 9.00000000000000000000f, 9.00000000000000000000f, - 3.68750000000000000000f, 3.75000000000000000000f, - 3.78125000000000000000f, 3.78125000000000000000f, - 3.81250000000000000000f, 3.90625000000000000000f, - 3.90625000000000000000f, 4.03125000000000000000f, - 4.03125000000000000000f, 4.06250000000000000000f, - 4.09375000000000000000f, 4.12500000000000000000f, - 4.25000000000000000000f, 4.28125000000000000000f, - 4.31250000000000000000f, 4.53125000000000000000f, - 2.71875000000000000000f, 2.75000000000000000000f, - 2.84375000000000000000f, 3.03125000000000000000f, - 3.06250000000000000000f, 3.12500000000000000000f, - 3.28125000000000000000f, 3.31250000000000000000f, - 2.87500000000000000000f, 2.96875000000000000000f, - 2.96875000000000000000f, 3.00000000000000000000f, - 3.03125000000000000000f, 3.03125000000000000000f, - 3.06250000000000000000f, 3.09375000000000000000f, - 2.75000000000000000000f, 2.87500000000000000000f, - 2.96875000000000000000f, 2.96875000000000000000f, - 3.00000000000000000000f, 3.03125000000000000000f, - 3.06250000000000000000f, 3.40625000000000000000f, - 2.90625000000000000000f, 2.90625000000000000000f, - 2.90625000000000000000f, 3.00000000000000000000f, - 3.03125000000000000000f, 3.03125000000000000000f, - 3.09375000000000000000f, 3.15625000000000000000f, - 2.90625000000000000000f, 2.93750000000000000000f, - 2.93750000000000000000f, 2.96875000000000000000f, - 2.96875000000000000000f, 3.09375000000000000000f, - 3.09375000000000000000f, 3.09375000000000000000f, - 2.90625000000000000000f, 2.90625000000000000000f, - 2.90625000000000000000f, 3.00000000000000000000f, - 3.00000000000000000000f, 3.03125000000000000000f, - 3.12500000000000000000f, 3.18750000000000000000f, - 2.90625000000000000000f, 2.96875000000000000000f, - 2.96875000000000000000f, 3.00000000000000000000f, + 6.68750000000000000000f, 6.68750000000000000000f, + 6.68750000000000000000f, 6.75000000000000000000f, + 6.75000000000000000000f, 6.81250000000000000000f, + 6.81250000000000000000f, 6.93750000000000000000f, + 6.93750000000000000000f, 7.12500000000000000000f, + 7.37500000000000000000f, 7.75000000000000000000f, + 3.56250000000000000000f, 3.62500000000000000000f, + 3.62500000000000000000f, 3.75000000000000000000f, + 3.81250000000000000000f, 3.93750000000000000000f, + 4.06250000000000000000f, 4.06250000000000000000f, + 4.12500000000000000000f, 4.12500000000000000000f, + 4.18750000000000000000f, 4.18750000000000000000f, + 4.25000000000000000000f, 4.31250000000000000000f, + 4.37500000000000000000f, 4.37500000000000000000f, + 2.62500000000000000000f, 2.93750000000000000000f, + 2.93750000000000000000f, 3.00000000000000000000f, + 3.00000000000000000000f, 3.18750000000000000000f, + 3.18750000000000000000f, 3.25000000000000000000f, + 2.87500000000000000000f, 2.87500000000000000000f, + 2.93750000000000000000f, 2.93750000000000000000f, 3.00000000000000000000f, 3.00000000000000000000f, - 3.06250000000000000000f, 3.09375000000000000000f, - 3.90625000000000000000f, 3.90625000000000000000f, - 3.96875000000000000000f, 3.96875000000000000000f, - 3.96875000000000000000f, 3.96875000000000000000f, - 4.00000000000000000000f, 4.00000000000000000000f, - 4.00000000000000000000f, 4.00000000000000000000f, - 4.00000000000000000000f, 4.00000000000000000000f, - 4.03125000000000000000f, 4.06250000000000000000f, - 4.09375000000000000000f, 4.12500000000000000000f + 3.06250000000000000000f, 3.31250000000000000000f, + 2.75000000000000000000f, 2.75000000000000000000f, + 3.00000000000000000000f, 3.00000000000000000000f, + 3.06250000000000000000f, 3.06250000000000000000f, + 3.18750000000000000000f, 3.25000000000000000000f, + 2.81250000000000000000f, 2.81250000000000000000f, + 2.87500000000000000000f, 2.87500000000000000000f, + 3.06250000000000000000f, 3.06250000000000000000f, + 3.25000000000000000000f, 3.31250000000000000000f, + 2.81250000000000000000f, 2.93750000000000000000f, + 2.93750000000000000000f, 2.93750000000000000000f, + 3.00000000000000000000f, 3.06250000000000000000f, + 3.12500000000000000000f, 3.25000000000000000000f, + 2.87500000000000000000f, 2.87500000000000000000f, + 2.87500000000000000000f, 2.93750000000000000000f, + 3.00000000000000000000f, 3.12500000000000000000f, + 3.18750000000000000000f, 3.18750000000000000000f, + 2.87500000000000000000f, 2.93750000000000000000f, + 3.00000000000000000000f, 3.00000000000000000000f, + 3.00000000000000000000f, 3.00000000000000000000f, + 3.00000000000000000000f, 3.18750000000000000000f, + 3.75000000000000000000f, 3.75000000000000000000f, + 3.81250000000000000000f, 3.87500000000000000000f, + 3.93750000000000000000f, 3.93750000000000000000f, + 3.93750000000000000000f, 4.00000000000000000000f, + 4.00000000000000000000f, 4.06250000000000000000f, + 4.06250000000000000000f, 4.12500000000000000000f, + 4.12500000000000000000f, 4.12500000000000000000f, + 4.31250000000000000000f, 4.37500000000000000000f }; const SKP_float SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min[ 16 + 1 ] = { - 0.00811767578125000000f, - 0.00009155273437500000f, - 0.00122070312500000000f, + 0.00720214843750000000f, + 0.00012207031250000000f, + 0.00228881835937500000f, 0.00009155273437500000f, 0.00009155273437500000f, - 0.00048828125000000000f, - 0.00238037109375000000f, - 0.00271606445312500000f, - 0.00326538085937500000f, - 0.00430297851562500000f, - 0.00573730468750000000f, - 0.00445556640625000000f, - 0.00830078125000000000f, - 0.00732421874999999910f, - 0.00717163085937500000f, - 0.00656127929687500000f, - 0.01928710937500000000f + 0.00015258789062500000f, + 0.00350952148437500040f, + 0.00289916992187500000f, + 0.00344848632812500000f, + 0.00421142578125000000f, + 0.00537109374999999910f, + 0.00515747070312500000f, + 0.00759887695312500000f, + 0.00781250000000000000f, + 0.00827026367187500000f, + 0.00802612304687500000f, + 0.01922607421875000000f }; const SKP_float SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * NLSF_MSVQ_CB0_16_VECTORS ] = { - 0.03570556640625000000f, 0.06951904296875000000f, - 0.11163330078125001000f, 0.16400146484375000000f, - 0.23394775390625000000f, 0.27810668945312500000f, - 0.34478759765624994000f, 0.40600585937500000000f, - 0.46908569335937500000f, 0.53555297851562500000f, - 0.59774780273437500000f, 0.65573120117187500000f, - 0.72625732421875000000f, 0.79461669921875000000f, - 0.86419677734375000000f, 0.92166137695312500000f, - 0.04968261718750000700f, 0.07122802734375000000f, - 0.12557983398437500000f, 0.18420410156250000000f, - 0.23858642578125000000f, 0.29125976562500000000f, - 0.35940551757812500000f, 0.42788696289062500000f, - 0.48178100585937500000f, 0.53125000000000000000f, - 0.59405517578125000000f, 0.64883422851562500000f, - 0.69842529296875000000f, 0.74966430664062500000f, - 0.81524658203125000000f, 0.85629272460937500000f, - 0.05261230468750000000f, 0.08148193359375000000f, - 0.12377929687500000000f, 0.19934082031250000000f, - 0.25503540039062500000f, 0.30880737304687500000f, - 0.36904907226562506000f, 0.42910766601562500000f, - 0.50326538085937500000f, 0.57357788085937500000f, - 0.62307739257812500000f, 0.68365478515625000000f, - 0.74008178710937511000f, 0.80029296875000011000f, - 0.86700439453125000000f, 0.91418457031250000000f, - 0.04556274414062500000f, 0.10458374023437501000f, - 0.14614868164062500000f, 0.19528198242187500000f, - 0.25741577148437500000f, 0.31030273437500000000f, - 0.36621093750000000000f, 0.42926025390625000000f, - 0.49526977539062500000f, 0.55572509765625000000f, - 0.61157226562500000000f, 0.67437744140625000000f, - 0.73709106445312500000f, 0.79635620117187500000f, - 0.86007690429687500000f, 0.91921997070312489000f, - 0.03414916992187500000f, 0.06375122070312500000f, - 0.13107299804687500000f, 0.19058227539062500000f, - 0.26522827148437500000f, 0.32778930664062500000f, - 0.38720703125000000000f, 0.45950317382812500000f, - 0.51965332031250000000f, 0.57348632812500000000f, - 0.63223266601562500000f, 0.68707275390625011000f, - 0.74758911132812500000f, 0.81018066406250000000f, - 0.87338256835937500000f, 0.93475341796875000000f, - 0.04159545898437500000f, 0.07376098632812500000f, - 0.11984252929687500000f, 0.16955566406249997000f, - 0.22650146484375000000f, 0.28427124023437500000f, - 0.36251831054687500000f, 0.42013549804687500000f, - 0.49264526367187500000f, 0.56518554687500000000f, - 0.62432861328125000000f, 0.68902587890625000000f, - 0.74887084960937500000f, 0.80676269531250000000f, - 0.86419677734375000000f, 0.92523193359375000000f, - 0.03424072265625000000f, 0.07638549804687500000f, - 0.15917968750000000000f, 0.21813964843750000000f, - 0.28411865234375000000f, 0.33807373046874994000f, - 0.40206909179687500000f, 0.45166015625000000000f, - 0.51464843750000000000f, 0.57067871093750000000f, - 0.62365722656250000000f, 0.68627929687499989000f, - 0.74987792968750011000f, 0.81182861328125000000f, - 0.87142944335937500000f, 0.92852783203125000000f, - 0.01831054687500000000f, 0.04019165039062500700f, - 0.09063720703125001400f, 0.17117309570312500000f, - 0.23480224609375000000f, 0.29858398437500000000f, - 0.37136840820312500000f, 0.42990112304687506000f, - 0.49984741210937494000f, 0.56085205078125000000f, - 0.62716674804687500000f, 0.69232177734375000000f, - 0.75497436523437489000f, 0.81472778320312500000f, - 0.87420654296875000000f, 0.92636108398437500000f, - 0.02871704101562500000f, 0.05743408203125000000f, - 0.13043212890625000000f, 0.16906738281250000000f, - 0.25885009765625000000f, 0.30084228515625000000f, - 0.36437988281250000000f, 0.43600463867187494000f, - 0.49105834960937506000f, 0.56460571289062500000f, - 0.62030029296875000000f, 0.69006347656250000000f, - 0.75411987304687511000f, 0.81292724609374989000f, - 0.87933349609375000000f, 0.92864990234375000000f, - 0.01937866210937500000f, 0.05184936523437500000f, - 0.13354492187500000000f, 0.18151855468750000000f, - 0.24710083007812500000f, 0.30868530273437500000f, - 0.37457275390625000000f, 0.43267822265625000000f, - 0.49166870117187500000f, 0.54360961914062500000f, - 0.60104370117187500000f, 0.66445922851562511000f, - 0.73019409179687500000f, 0.78936767578124989000f, - 0.85516357421875000000f, 0.91961669921875000000f, - 0.04296874999999999300f, 0.06781005859375000000f, - 0.10754394531250000000f, 0.17135620117187503000f, - 0.22415161132812497000f, 0.27005004882812500000f, - 0.33535766601562500000f, 0.38977050781250000000f, - 0.46850585937500000000f, 0.51959228515625000000f, - 0.57736206054687500000f, 0.64276123046875000000f, - 0.71194458007812500000f, 0.76950073242187500000f, - 0.83035278320312511000f, 0.88571166992187500000f, - 0.02139282226562500000f, 0.03988647460937500000f, - 0.10827636718750001000f, 0.19229125976562500000f, - 0.23632812500000000000f, 0.29217529296875000000f, - 0.34262084960937494000f, 0.39605712890625000000f, - 0.46295166015625000000f, 0.53604125976562500000f, - 0.60348510742187500000f, 0.67434692382812500000f, - 0.73944091796875000000f, 0.80368041992187500000f, - 0.86599731445312500000f, 0.92257690429687500000f, - 0.05346679687500000700f, 0.07214355468750000000f, - 0.14889526367187500000f, 0.20046997070312500000f, - 0.23843383789062500000f, 0.29895019531250000000f, - 0.34176635742187500000f, 0.43609619140625006000f, - 0.48202514648437500000f, 0.54931640625000000000f, - 0.62243652343750000000f, 0.68411254882812489000f, - 0.74182128906250011000f, 0.79724121093750000000f, - 0.86547851562500000000f, 0.93484497070312500000f, - 0.02749633789062500000f, 0.04971313476562500000f, - 0.10241699218749999000f, 0.14144897460937500000f, - 0.22143554687500000000f, 0.26754760742187500000f, - 0.30429077148437500000f, 0.35272216796875000000f, - 0.46432495117187500000f, 0.53540039062500000000f, - 0.59579467773437500000f, 0.66687011718750000000f, - 0.72937011718750000000f, 0.79278564453125000000f, - 0.85855102539062500000f, 0.92114257812500000000f, - 0.02993774414062500000f, 0.05093383789062500000f, - 0.10140991210937499000f, 0.14321899414062500000f, - 0.18960571289062500000f, 0.26525878906250000000f, - 0.32391357421875006000f, 0.39538574218750000000f, - 0.46420288085937506000f, 0.54049682617187500000f, - 0.60595703125000000000f, 0.67510986328124989000f, - 0.74291992187500000000f, 0.81152343750000000000f, - 0.87655639648437500000f, 0.93020629882812500000f, - 0.04904174804687500000f, 0.07864379882812500000f, - 0.12878417968750000000f, 0.16821289062499997000f, - 0.26037597656250000000f, 0.31701660156250000000f, - 0.35482788085937500000f, 0.41720581054687494000f, - 0.48071289062500000000f, 0.52487182617187500000f, - 0.60546875000000000000f, 0.66708374023437500000f, - 0.71697998046875000000f, 0.78692626953125000000f, - 0.85726928710937500000f, 0.91952514648437500000f, - 0.02474975585937500000f, 0.04489135742187500000f, - 0.09594726562500000000f, 0.15383911132812500000f, - 0.22674560546875000000f, 0.28652954101562500000f, - 0.34100341796875000000f, 0.40451049804687500000f, - 0.46255493164062494000f, 0.51089477539062500000f, - 0.59762573242187500000f, 0.67648315429687500000f, - 0.73593139648437511000f, 0.79779052734375000000f, - 0.86618041992187500000f, 0.92758178710937500000f, - 0.04708862304687499300f, 0.06542968750000000000f, - 0.11074829101562500000f, 0.19369506835937500000f, - 0.22378540039062503000f, 0.28500366210937500000f, - 0.32684326171875000000f, 0.41491699218750006000f, - 0.46078491210937506000f, 0.52917480468750000000f, - 0.61346435546875000000f, 0.66790771484375000000f, - 0.72424316406250000000f, 0.78237915039062500000f, - 0.84893798828125000000f, 0.91299438476562511000f, - 0.01501464843750000000f, 0.03616333007812500000f, - 0.08972167968750000000f, 0.16748046875000003000f, - 0.21652221679687500000f, 0.26705932617187500000f, - 0.35388183593749994000f, 0.41439819335937500000f, - 0.48965454101562500000f, 0.54977416992187500000f, - 0.61578369140625000000f, 0.67526245117187500000f, - 0.74050903320312489000f, 0.80584716796875000000f, - 0.86926269531250000000f, 0.92642211914062500000f, - 0.04721069335937500000f, 0.06964111328125000000f, - 0.11270141601562500000f, 0.19351196289062500000f, - 0.23675537109374997000f, 0.29318237304687500000f, - 0.36157226562500000000f, 0.40393066406250000000f, - 0.50549316406250000000f, 0.55142211914062500000f, - 0.60299682617187500000f, 0.65319824218750011000f, - 0.73577880859375000000f, 0.81195068359375000000f, - 0.87847900390625000000f, 0.93551635742187511000f, - 0.02090454101562500000f, 0.04083251953125000000f, - 0.10403442382812500000f, 0.16058349609375000000f, - 0.21209716796875000000f, 0.28143310546875000000f, - 0.34832763671875000000f, 0.44320678710937500000f, - 0.49856567382812500000f, 0.54605102539062500000f, - 0.59313964843750000000f, 0.64996337890625000000f, - 0.71084594726562500000f, 0.76846313476562500000f, - 0.85366821289062500000f, 0.93139648437500000000f, - 0.02706909179687500300f, 0.04824829101562500000f, - 0.09329223632812500000f, 0.13177490234375000000f, - 0.21948242187500000000f, 0.26296997070312500000f, - 0.30661010742187500000f, 0.39996337890625000000f, - 0.49636840820312500000f, 0.54605102539062500000f, - 0.61746215820312500000f, 0.68206787109375000000f, - 0.74398803710937511000f, 0.80517578125000000000f, - 0.86407470703125000000f, 0.92129516601562489000f, - 0.06973266601562500000f, 0.11428833007812500000f, - 0.17279052734375000000f, 0.23120117187500000000f, - 0.28451538085937500000f, 0.34545898437500000000f, - 0.40402221679687500000f, 0.46359252929687494000f, - 0.52413940429687500000f, 0.58670043945312500000f, - 0.64416503906250000000f, 0.70104980468750000000f, - 0.75747680664062500000f, 0.81344604492187489000f, - 0.87161254882812500000f, 0.92956542968750000000f, - 0.04565429687500000700f, 0.06433105468750000000f, - 0.10522460937500000000f, 0.21051025390625003000f, - 0.25415039062500000000f, 0.29467773437500000000f, - 0.34338378906250000000f, 0.39132690429687500000f, - 0.45712280273437500000f, 0.50299072265625000000f, - 0.55480957031250000000f, 0.61294555664062500000f, - 0.70074462890624989000f, 0.76782226562500000000f, - 0.84548950195312500000f, 0.90420532226562500000f, - 0.01754760742187500000f, 0.03848266601562500000f, - 0.11782836914062500000f, 0.20223999023437500000f, - 0.25311279296875000000f, 0.32986450195312500000f, - 0.38772583007812500000f, 0.45068359375000000000f, - 0.52111816406250000000f, 0.58126831054687500000f, - 0.64019775390624989000f, 0.70358276367187500000f, - 0.76208496093750011000f, 0.81491088867187500000f, - 0.87646484375000000000f, 0.92605590820312500000f, - 0.05133056640625000000f, 0.06753540039062500000f, - 0.11846923828125000000f, 0.19036865234374997000f, - 0.21997070312500000000f, 0.29437255859375000000f, - 0.33193969726562500000f, 0.40988159179687500000f, - 0.45181274414062494000f, 0.49478149414062506000f, - 0.54751586914062500000f, 0.63699340820312489000f, - 0.71868896484375011000f, 0.78628540039062500000f, - 0.84704589843750000000f, 0.89907836914062500000f, - 0.02709960937500000000f, 0.04931640625000000000f, - 0.11975097656250000000f, 0.15853881835937500000f, - 0.21990966796875003000f, 0.26388549804687500000f, - 0.30035400390625000000f, 0.35012817382812500000f, - 0.49032592773437500000f, 0.55606079101562500000f, - 0.62081909179687500000f, 0.69500732421875000000f, - 0.74777221679687500000f, 0.80603027343750000000f, - 0.85614013671875000000f, 0.90731811523437500000f, - 0.02456665039062500000f, 0.04437255859375000000f, - 0.08187866210937500000f, 0.13647460937500000000f, - 0.24218750000000000000f, 0.28564453125000000000f, - 0.34783935546875000000f, 0.43777465820312500000f, - 0.49453735351562500000f, 0.54418945312500000000f, - 0.59365844726562500000f, 0.66058349609375000000f, - 0.72933959960937489000f, 0.79125976562500000000f, - 0.86630249023437511000f, 0.92965698242187500000f, - 0.05004882812500000000f, 0.07272338867187500000f, - 0.10632324218750000000f, 0.15509033203125000000f, - 0.18408203125000000000f, 0.26263427734375000000f, - 0.35522460937499994000f, 0.39569091796875000000f, - 0.48345947265625000000f, 0.53002929687500000000f, - 0.59039306640625000000f, 0.64642333984375000000f, - 0.72137451171875011000f, 0.79006958007812511000f, - 0.86572265625000000000f, 0.92465209960937500000f, - 0.04980468750000000000f, 0.06726074218750000000f, - 0.13763427734375000000f, 0.23132324218750003000f, - 0.26605224609375000000f, 0.32080078125000000000f, - 0.36505126953125000000f, 0.43017578125000000000f, - 0.47729492187500000000f, 0.52471923828125000000f, - 0.58419799804687500000f, 0.67892456054687511000f, - 0.74960327148437489000f, 0.81057739257812500000f, - 0.87292480468750000000f, 0.93106079101562500000f, - 0.06234741210937500000f, 0.07971191406250001400f, - 0.12161254882812500000f, 0.20907592773437500000f, - 0.24530029296875000000f, 0.29034423828125000000f, - 0.33505249023437500000f, 0.39028930664062500000f, - 0.47076416015625000000f, 0.51049804687500000000f, - 0.57675170898437500000f, 0.61880493164062500000f, - 0.69891357421875000000f, 0.79983520507812500000f, - 0.87619018554687500000f, 0.93438720703125011000f, - 0.06787109375000000000f, 0.08538818359375000000f, - 0.13626098632812500000f, 0.16235351562500000000f, - 0.21691894531249997000f, 0.28796386718750000000f, - 0.33526611328125000000f, 0.40350341796875000000f, - 0.44552612304687500000f, 0.55899047851562500000f, - 0.61465454101562500000f, 0.66659545898437500000f, - 0.72024536132812511000f, 0.78430175781250000000f, - 0.86010742187500000000f, 0.93328857421875000000f, - 0.02548217773437500000f, 0.04702758789062500000f, - 0.12460327148437500000f, 0.17605590820312503000f, - 0.22540283203125000000f, 0.28683471679687500000f, - 0.33480834960937500000f, 0.38012695312500000000f, - 0.45840454101562500000f, 0.56890869140625000000f, - 0.63607788085937500000f, 0.70495605468750000000f, - 0.77185058593750000000f, 0.82293701171875000000f, - 0.88354492187500000000f, 0.92840576171875011000f, - 0.05477905273437500000f, 0.07150268554687500000f, - 0.14675903320312500000f, 0.17993164062500003000f, - 0.21905517578125000000f, 0.26077270507812500000f, - 0.31198120117187500000f, 0.40802001953125000000f, - 0.44573974609375000000f, 0.50259399414062500000f, - 0.55764770507812500000f, 0.63281250000000000000f, - 0.72158813476562500000f, 0.80130004882812500000f, - 0.86132812500000000000f, 0.92742919921875000000f, - 0.05291748046875000000f, 0.06878662109375000000f, - 0.12301635742187500000f, 0.15832519531250000000f, - 0.19854736328125000000f, 0.24023437500000000000f, - 0.29452514648437500000f, 0.39749145507812500000f, - 0.44003295898437494000f, 0.52810668945312500000f, - 0.59494018554687500000f, 0.67718505859374989000f, - 0.74472045898437500000f, 0.80267333984375000000f, - 0.86044311523437500000f, 0.92092895507812500000f, - 0.05618286132812500000f, 0.07168579101562500000f, - 0.12109375000000000000f, 0.14538574218750000000f, - 0.19458007812500000000f, 0.29983520507812500000f, - 0.33715820312500000000f, 0.40725708007812500000f, - 0.44805908203125000000f, 0.49597167968750000000f, - 0.55490112304687500000f, 0.65194702148437500000f, - 0.72991943359375000000f, 0.79821777343750000000f, - 0.85543823242187500000f, 0.91354370117187500000f, - 0.04370117187500000000f, 0.06246948242187500000f, - 0.17184448242187500000f, 0.21139526367187500000f, - 0.25018310546875000000f, 0.29525756835937500000f, - 0.34661865234375000000f, 0.41217041015625000000f, - 0.45172119140625000000f, 0.50106811523437500000f, - 0.55966186523437500000f, 0.67196655273437500000f, - 0.73620605468750000000f, 0.79885864257812500000f, - 0.85845947265625000000f, 0.93341064453125000000f, - 0.05279541015625000700f, 0.07080078125000000000f, - 0.11425781250000000000f, 0.14672851562500000000f, - 0.18331909179687500000f, 0.29498291015625000000f, - 0.33560180664062500000f, 0.41571044921875000000f, - 0.46490478515625000000f, 0.53390502929687500000f, - 0.61303710937500000000f, 0.67144775390625000000f, - 0.72030639648437500000f, 0.77514648437500000000f, - 0.83554077148437489000f, 0.89276123046875000000f, - 0.03866577148437500000f, 0.05844116210937500000f, - 0.16732788085937503000f, 0.20788574218750000000f, - 0.25112915039062500000f, 0.30270385742187500000f, - 0.35366821289062494000f, 0.40701293945312500000f, - 0.45004272460937506000f, 0.54824829101562500000f, - 0.62719726562500000000f, 0.67648315429687500000f, - 0.74826049804687500000f, 0.81845092773437500000f, - 0.88143920898437500000f, 0.93511962890625000000f, - 0.04656982421875000000f, 0.06802368164062500000f, - 0.12939453125000000000f, 0.22546386718750000000f, - 0.27322387695312500000f, 0.31890869140625000000f, - 0.36312866210937500000f, 0.41864013671875006000f, - 0.51455688476562500000f, 0.55917358398437500000f, - 0.62191772460937500000f, 0.69189453125000000000f, - 0.75674438476562500000f, 0.82110595703125000000f, - 0.88214111328124989000f, 0.93450927734375000000f, - 0.06637573242187500000f, 0.08517456054687500000f, - 0.12524414062500000000f, 0.20980834960937500000f, - 0.26281738281250000000f, 0.29901123046875000000f, - 0.37084960937500000000f, 0.41308593750000000000f, - 0.47677612304687500000f, 0.53961181640625000000f, - 0.58633422851562500000f, 0.64270019531250000000f, - 0.74407958984375000000f, 0.81665039062499989000f, - 0.87380981445312500000f, 0.92309570312500000000f, - 0.01385498046875000000f, 0.03756713867187500000f, - 0.13241577148437500000f, 0.17510986328125000000f, - 0.23040771484375000000f, 0.27484130859375000000f, - 0.31494140625000000000f, 0.41275024414062506000f, - 0.48843383789062500000f, 0.54470825195312500000f, - 0.61251831054687500000f, 0.67114257812500000000f, - 0.73086547851562500000f, 0.79476928710937500000f, - 0.86196899414062511000f, 0.92086791992187489000f, - 0.06866455078125000000f, 0.08517456054687500000f, - 0.12908935546875000000f, 0.16122436523437500000f, - 0.20635986328125000000f, 0.32369995117187506000f, - 0.36251831054687500000f, 0.42178344726562500000f, - 0.48208618164062494000f, 0.52685546875000000000f, - 0.61123657226562500000f, 0.67950439453125000000f, - 0.75036621093750000000f, 0.80679321289062500000f, - 0.86193847656250000000f, 0.92831420898437489000f, - 0.05175781250000000000f, 0.06762695312500000000f, - 0.13146972656250000000f, 0.25588989257812500000f, - 0.29803466796875000000f, 0.33660888671875000000f, - 0.38317871093750000000f, 0.43026733398437500000f, - 0.49810791015625000000f, 0.53833007812500000000f, - 0.58489990234375000000f, 0.62835693359375000000f, - 0.73141479492187489000f, 0.81964111328125000000f, - 0.87884521484375000000f, 0.93267822265625000000f, - 0.07482910156250000000f, 0.09875488281250000000f, - 0.13333129882812500000f, 0.18670654296875000000f, - 0.21838378906250000000f, 0.27474975585937500000f, - 0.35122680664062500000f, 0.39050292968750000000f, - 0.48062133789062506000f, 0.52767944335937500000f, - 0.59481811523437500000f, 0.67874145507812500000f, - 0.74859619140625000000f, 0.80792236328125000000f, - 0.86282348632812489000f, 0.91775512695312511000f, - 0.05526733398437500000f, 0.07754516601562500000f, - 0.10848999023437500000f, 0.16723632812500000000f, - 0.27841186523437500000f, 0.32125854492187500000f, - 0.36297607421875000000f, 0.41683959960937500000f, - 0.46575927734374994000f, 0.51571655273437500000f, - 0.59100341796875000000f, 0.64297485351562511000f, - 0.69256591796875000000f, 0.74200439453125000000f, - 0.83178710937500000000f, 0.91500854492187500000f, - 0.04739379882812500000f, 0.06854248046875000000f, - 0.13912963867187500000f, 0.16784667968749997000f, - 0.20611572265625003000f, 0.24029541015625000000f, - 0.35824584960937500000f, 0.41415405273437500000f, - 0.46350097656250000000f, 0.54562377929687500000f, - 0.61892700195312500000f, 0.68695068359375000000f, - 0.75115966796875000000f, 0.81326293945312500000f, - 0.87847900390625000000f, 0.93856811523437500000f, - 0.06048583984375000000f, 0.08447265625000000000f, - 0.11700439453125001000f, 0.18200683593750000000f, - 0.26647949218750000000f, 0.30236816406250000000f, - 0.36001586914062500000f, 0.45205688476562500000f, - 0.49777221679687506000f, 0.54766845703125000000f, - 0.64382934570312500000f, 0.69735717773437500000f, - 0.74633789062500000000f, 0.80273437500000000000f, - 0.85955810546875000000f, 0.90805053710937511000f, - 0.05566406250000000000f, 0.07717895507812500000f, - 0.11648559570312500000f, 0.16629028320312500000f, - 0.20916748046875003000f, 0.26593017578125000000f, - 0.31680297851562500000f, 0.37493896484375006000f, - 0.43316650390625000000f, 0.48138427734375000000f, - 0.59582519531250000000f, 0.65228271484375000000f, - 0.72311401367187500000f, 0.79556274414062500000f, - 0.85742187500000000000f, 0.92199707031250011000f, - 0.06750488281250000000f, 0.08709716796875001400f, - 0.12045288085937500000f, 0.17999267578125000000f, - 0.30303955078125000000f, 0.35266113281250000000f, - 0.39227294921875000000f, 0.45129394531249994000f, - 0.49829101562500006000f, 0.54016113281250000000f, - 0.62014770507812500000f, 0.67437744140625000000f, - 0.72241210937500011000f, 0.77182006835937500000f, - 0.82324218750000011000f, 0.87237548828125000000f, - 0.06173706054687500000f, 0.07931518554687500000f, - 0.12280273437500000000f, 0.15002441406250000000f, - 0.20181274414062500000f, 0.34024047851562494000f, - 0.38015747070312500000f, 0.44635009765625000000f, - 0.49804687500000000000f, 0.54388427734375000000f, - 0.60037231445312500000f, 0.64611816406250000000f, - 0.70541381835937500000f, 0.79501342773437500000f, - 0.87966918945312500000f, 0.93865966796875000000f, - 0.04968261718750000700f, 0.06732177734375000000f, - 0.10580444335937500000f, 0.13317871093750000000f, - 0.26486206054687500000f, 0.31045532226562500000f, - 0.36206054687500000000f, 0.41744995117187500000f, - 0.45770263671874994000f, 0.51690673828125000000f, - 0.58615112304687500000f, 0.65197753906249989000f, - 0.72784423828125000000f, 0.79696655273437500000f, - 0.85827636718750000000f, 0.92385864257812500000f, - 0.06146240234375000000f, 0.07943725585937500000f, - 0.12554931640625000000f, 0.22137451171875000000f, - 0.25988769531250000000f, 0.30648803710937500000f, - 0.36077880859375000000f, 0.41207885742187500000f, - 0.49832153320312500000f, 0.54400634765625000000f, - 0.60110473632812500000f, 0.64941406250000000000f, - 0.70651245117187500000f, 0.75259399414062500000f, - 0.81808471679687500000f, 0.92044067382812511000f, - 0.07250976562500000000f, 0.09094238281250000000f, - 0.13494873046875000000f, 0.17608642578125000000f, - 0.21411132812500000000f, 0.29672241210937500000f, - 0.33950805664062506000f, 0.41247558593750000000f, - 0.47256469726562506000f, 0.51834106445312500000f, - 0.58471679687500000000f, 0.62826538085937500000f, - 0.74465942382812500000f, 0.82946777343750000000f, - 0.88641357421875000000f, 0.93527221679687500000f, - 0.07489013671875000000f, 0.10687255859375000000f, - 0.14111328125000000000f, 0.18368530273437500000f, - 0.23291015625000000000f, 0.27005004882812500000f, - 0.32934570312500000000f, 0.42614746093750000000f, - 0.47372436523437500000f, 0.52139282226562500000f, - 0.59848022460937500000f, 0.64813232421875000000f, - 0.69750976562500000000f, 0.76623535156249989000f, - 0.85772705078125011000f, 0.91217041015625000000f, - 0.04800415039062500700f, 0.06939697265625000000f, - 0.10095214843750000000f, 0.18307495117187500000f, - 0.27395629882812500000f, 0.30834960937500000000f, - 0.38015747070312500000f, 0.43511962890625000000f, - 0.48062133789062506000f, 0.55480957031250000000f, - 0.60955810546875000000f, 0.64859008789062500000f, - 0.70327758789062500000f, 0.76470947265625000000f, - 0.84658813476562500000f, 0.92514038085937500000f, - 0.05929565429687500000f, 0.08331298828125000000f, - 0.12634277343750000000f, 0.18798828125000003000f, - 0.22860717773437500000f, 0.27423095703125000000f, - 0.34512329101562500000f, 0.38986206054687500000f, - 0.45227050781250000000f, 0.50531005859375000000f, - 0.54653930664062500000f, 0.60293579101562500000f, - 0.65649414062500011000f, 0.72036743164062500000f, - 0.83233642578124989000f, 0.90109252929687500000f, - 0.06167602539062500000f, 0.07879638671875000000f, - 0.13714599609375000000f, 0.17807006835937503000f, - 0.21340942382812497000f, 0.25161743164062500000f, - 0.29989624023437500000f, 0.44961547851562500000f, - 0.50238037109375000000f, 0.54608154296875000000f, - 0.59957885742187500000f, 0.64340209960937489000f, - 0.72521972656250000000f, 0.81381225585937500000f, - 0.88720703125000000000f, 0.94573974609375000000f, - 0.03210449218750000000f, 0.05416870117187500000f, - 0.09820556640624998600f, 0.13360595703125000000f, - 0.23394775390625000000f, 0.28695678710937500000f, - 0.34326171875000000000f, 0.40670776367187500000f, - 0.45690917968750000000f, 0.54815673828125000000f, - 0.63348388671875000000f, 0.68218994140625000000f, - 0.76510620117187500000f, 0.83035278320312511000f, - 0.88504028320312500000f, 0.93411254882812489000f, - 0.06768798828125000000f, 0.08746337890624998600f, - 0.12887573242187500000f, 0.16333007812500000000f, - 0.20083618164062500000f, 0.30456542968750000000f, - 0.35360717773437500000f, 0.40042114257812500000f, - 0.46365356445312500000f, 0.50607299804687500000f, - 0.56109619140625000000f, 0.61279296875000000000f, - 0.67178344726562500000f, 0.77261352539062500000f, - 0.85836791992187500000f, 0.91186523437500011000f, - 0.06549072265625000000f, 0.08666992187500000000f, - 0.13418579101562500000f, 0.17822265625000000000f, - 0.22732543945312500000f, 0.26614379882812500000f, - 0.32080078125000000000f, 0.36425781250000000000f, - 0.41488647460937500000f, 0.52651977539062500000f, - 0.58929443359375000000f, 0.63754272460937500000f, - 0.71463012695312500000f, 0.78207397460937500000f, - 0.84683227539062500000f, 0.92257690429687500000f, - 0.06018066406250000000f, 0.07992553710937500000f, - 0.11462402343750000000f, 0.19430541992187500000f, - 0.23318481445312503000f, 0.26898193359375000000f, - 0.37493896484375006000f, 0.42016601562500000000f, - 0.46719360351562506000f, 0.55041503906250000000f, - 0.59683227539062500000f, 0.63793945312500000000f, - 0.68914794921875011000f, 0.75915527343750000000f, - 0.84838867187500000000f, 0.92895507812500000000f, - 0.06118774414062500000f, 0.07864379882812500000f, - 0.13037109375000000000f, 0.22500610351562500000f, - 0.26116943359375000000f, 0.31198120117187500000f, - 0.35919189453125000000f, 0.40899658203125000000f, - 0.50360107421875000000f, 0.54931640625000000000f, - 0.59951782226562500000f, 0.64404296875000000000f, - 0.70159912109375000000f, 0.81805419921875000000f, - 0.90042114257812489000f, 0.94427490234375000000f, - 0.03518676757812500000f, 0.05560302734375000000f, - 0.11364746093750001000f, 0.16610717773437500000f, - 0.21331787109375000000f, 0.26556396484375000000f, - 0.31399536132812500000f, 0.36312866210937500000f, - 0.42285156250000000000f, 0.46737670898437500000f, - 0.53713989257812500000f, 0.64282226562500000000f, - 0.72302246093750011000f, 0.79598999023437500000f, - 0.87237548828125000000f, 0.93502807617187500000f, - 0.03979492187500000000f, 0.05703735351562500000f, - 0.10125732421875000000f, 0.21957397460937500000f, - 0.29336547851562500000f, 0.32754516601562500000f, - 0.37820434570312500000f, 0.41894531250000000000f, - 0.48284912109375000000f, 0.53326416015625000000f, - 0.57623291015625000000f, 0.63146972656250000000f, - 0.70538330078125000000f, 0.77941894531250000000f, - 0.84484863281250000000f, 0.89245605468750011000f, - 0.06387329101562500000f, 0.08212280273437500000f, - 0.12261962890625000000f, 0.20318603515625000000f, - 0.24252319335937500000f, 0.27914428710937500000f, - 0.32034301757812500000f, 0.36257934570312500000f, - 0.48486328125000006000f, 0.54385375976562500000f, - 0.58999633789062500000f, 0.64797973632812500000f, - 0.71322631835937489000f, 0.77008056640625000000f, - 0.84085083007812500000f, 0.91546630859375000000f, - 0.01754760742187500000f, 0.04061889648437499300f, - 0.16186523437500000000f, 0.21087646484374997000f, - 0.25711059570312500000f, 0.30780029296875000000f, - 0.35330200195312500000f, 0.41192626953125006000f, - 0.50183105468750000000f, 0.56539916992187500000f, - 0.62759399414062500000f, 0.69723510742187500000f, - 0.76031494140625000000f, 0.81457519531249989000f, - 0.87765502929687500000f, 0.92031860351562500000f, - 0.04379272460937500000f, 0.06176757812500000000f, - 0.10018920898437500000f, 0.12683105468750000000f, - 0.23226928710937500000f, 0.32324218750000000000f, - 0.36770629882812506000f, 0.42501831054687500000f, - 0.47177124023437500000f, 0.56192016601562500000f, - 0.62545776367187500000f, 0.67962646484375000000f, - 0.73919677734375000000f, 0.79629516601562489000f, - 0.85647583007812500000f, 0.91854858398437500000f, - 0.04980468750000000000f, 0.06616210937500000000f, - 0.16906738281250000000f, 0.22821044921875000000f, - 0.26336669921875000000f, 0.31710815429687500000f, - 0.35534667968750000000f, 0.43704223632812494000f, - 0.48037719726562500000f, 0.52969360351562500000f, - 0.57238769531250000000f, 0.62359619140625000000f, - 0.69577026367187500000f, 0.79528808593750000000f, - 0.87103271484375000000f, 0.93676757812500000000f, - 0.04293823242187500000f, 0.06851196289062500000f, - 0.10391235351562501000f, 0.17208862304687500000f, - 0.28744506835937500000f, 0.32608032226562506000f, - 0.36938476562500000000f, 0.41183471679687494000f, - 0.47409057617187500000f, 0.56021118164062500000f, - 0.61022949218750000000f, 0.66189575195312500000f, - 0.74313354492187500000f, 0.81024169921874989000f, - 0.88052368164062500000f, 0.93273925781250011000f, - 0.05111694335937500700f, 0.06793212890625000000f, - 0.12222290039062501000f, 0.25094604492187500000f, - 0.30441284179687500000f, 0.34042358398437500000f, - 0.39129638671875000000f, 0.43688964843750000000f, - 0.50366210937500000000f, 0.55349731445312500000f, - 0.59735107421875000000f, 0.64239501953125000000f, - 0.69454956054687500000f, 0.76025390625000000000f, - 0.86352539062500011000f, 0.93487548828125000000f, - 0.03295898437500000000f, 0.04925537109375000000f, - 0.11053466796875000000f, 0.23086547851562497000f, - 0.26696777343750000000f, 0.31442260742187500000f, - 0.35745239257812500000f, 0.42260742187500000000f, - 0.47708129882812500000f, 0.53204345703125000000f, - 0.60305786132812500000f, 0.66604614257812500000f, - 0.71932983398437500000f, 0.77493286132812500000f, - 0.83636474609375000000f, 0.88693237304687500000f, - 0.05166625976562500000f, 0.06802368164062500000f, - 0.10546875000000000000f, 0.13287353515625000000f, - 0.17303466796875000000f, 0.33233642578125000000f, - 0.38339233398437500000f, 0.43234252929687500000f, - 0.48458862304687500000f, 0.53030395507812500000f, - 0.60476684570312500000f, 0.67050170898437500000f, - 0.73529052734375000000f, 0.79745483398437500000f, - 0.86358642578125000000f, 0.91854858398437500000f, - 0.06231689453125000000f, 0.09030151367187501400f, - 0.12802124023437500000f, 0.17517089843750000000f, - 0.21685791015625000000f, 0.25228881835937500000f, - 0.33953857421875000000f, 0.45693969726562500000f, - 0.51617431640625000000f, 0.55831909179687500000f, - 0.62658691406250000000f, 0.67083740234375000000f, - 0.72360229492187500000f, 0.78640747070312500000f, - 0.84255981445312511000f, 0.89572143554687500000f, - 0.03002929687500000000f, 0.04919433593750000000f, - 0.11621093750000000000f, 0.16067504882812500000f, - 0.21011352539062500000f, 0.25668334960937500000f, - 0.29135131835937500000f, 0.33230590820312500000f, - 0.38214111328125000000f, 0.50415039062500000000f, - 0.59658813476562500000f, 0.66036987304687500000f, - 0.72467041015625011000f, 0.79522705078125000000f, - 0.86395263671874989000f, 0.92694091796875011000f, - 0.06213378906250000000f, 0.07745361328125000000f, - 0.12713623046875000000f, 0.23684692382812500000f, - 0.27911376953125000000f, 0.31774902343750000000f, - 0.37060546875000006000f, 0.41531372070312500000f, - 0.47570800781250000000f, 0.52395629882812500000f, - 0.56637573242187500000f, 0.61380004882812500000f, - 0.66589355468750000000f, 0.74197387695312500000f, - 0.85537719726562489000f, 0.93420410156249989000f, - 0.05709838867187500000f, 0.07186889648437500000f, - 0.12393188476562500000f, 0.15695190429687500000f, - 0.22778320312500000000f, 0.30911254882812500000f, - 0.36441040039062506000f, 0.45779418945312506000f, - 0.50903320312500000000f, 0.56011962890625000000f, - 0.60903930664062500000f, 0.67990112304687500000f, - 0.75869750976562489000f, 0.82006835937500000000f, - 0.88464355468750000000f, 0.93429565429687511000f, - 0.07830810546875000000f, 0.09646606445312500000f, - 0.14169311523437500000f, 0.19003295898437500000f, - 0.22601318359375000000f, 0.30426025390625000000f, - 0.35455322265625000000f, 0.40942382812500000000f, - 0.48489379882812500000f, 0.52990722656250000000f, - 0.58352661132812500000f, 0.63528442382812500000f, - 0.68945312500000000000f, 0.75439453125000000000f, - 0.87686157226562489000f, 0.94854736328125000000f, - 0.05187988281249999300f, 0.07101440429687500000f, - 0.14733886718750000000f, 0.18124389648437500000f, - 0.23092651367187500000f, 0.27935791015625000000f, - 0.33834838867187500000f, 0.38973999023437500000f, - 0.43362426757812506000f, 0.49197387695312500000f, - 0.61712646484375000000f, 0.69186401367187500000f, - 0.75219726562500000000f, 0.81347656250000000000f, - 0.87573242187499989000f, 0.93826293945312500000f, - 0.09671020507812500000f, 0.11819458007812501000f, - 0.15399169921875000000f, 0.20959472656250000000f, - 0.24975585937500000000f, 0.28930664062500000000f, - 0.37643432617187500000f, 0.42932128906250000000f, - 0.48138427734375000000f, 0.54843139648437500000f, - 0.61740112304687500000f, 0.66256713867187500000f, - 0.71777343750000000000f, 0.77041625976562500000f, - 0.82476806640625000000f, 0.87677001953124989000f, - 0.04772949218750000000f, 0.07296752929687500000f, - 0.12905883789062500000f, 0.20538330078125000000f, - 0.27175903320312500000f, 0.31918334960937500000f, - 0.39752197265625000000f, 0.45877075195312500000f, - 0.52688598632812500000f, 0.60452270507812500000f, - 0.66677856445312500000f, 0.72451782226562500000f, - 0.77789306640625000000f, 0.83349609375000000000f, - 0.88687133789062500000f, 0.93161010742187511000f, - 0.08740234375000000000f, 0.10861206054687501000f, - 0.14401245117187500000f, 0.19656372070312503000f, - 0.29272460937500000000f, 0.33737182617187500000f, - 0.38949584960937500000f, 0.45117187500000000000f, - 0.50134277343750000000f, 0.55432128906250000000f, - 0.62518310546875000000f, 0.67938232421875000000f, - 0.73800659179687511000f, 0.80148315429687500000f, - 0.86618041992187500000f, 0.92236328125000000000f, - 0.08157348632812498600f, 0.10525512695312501000f, - 0.13980102539062500000f, 0.18258666992187500000f, - 0.20944213867187500000f, 0.25363159179687500000f, - 0.38037109375000000000f, 0.42453002929687506000f, - 0.48028564453125000000f, 0.54293823242187500000f, - 0.59252929687500000000f, 0.64642333984375000000f, - 0.73318481445312500000f, 0.81057739257812500000f, - 0.87655639648437500000f, 0.92895507812500000000f, - 0.07382202148437500000f, 0.09304809570312500000f, - 0.13043212890625000000f, 0.19482421875000000000f, - 0.26135253906250000000f, 0.29483032226562500000f, - 0.34448242187499994000f, 0.38684082031250000000f, - 0.44088745117187500000f, 0.53643798828125000000f, - 0.60473632812500000000f, 0.64791870117187511000f, - 0.70492553710937500000f, 0.77117919921874989000f, - 0.82089233398437500000f, 0.88275146484374989000f, - 0.03900146484375000000f, 0.06106567382812500000f, - 0.09155273437500000000f, 0.16336059570312500000f, - 0.30502319335937500000f, 0.35940551757812500000f, - 0.39727783203125000000f, 0.44464111328125000000f, - 0.48980712890625000000f, 0.54205322265625000000f, - 0.60980224609375000000f, 0.65969848632812511000f, - 0.71322631835937489000f, 0.76547241210937500000f, - 0.84399414062500000000f, 0.92077636718749989000f, - 0.02844238281250000000f, 0.04956054687500000000f, - 0.08538818359375000000f, 0.13946533203125000000f, - 0.26220703125000000000f, 0.30480957031250000000f, - 0.35253906249999994000f, 0.39825439453125000000f, - 0.51638793945312500000f, 0.56997680664062500000f, - 0.62301635742187500000f, 0.69610595703125000000f, - 0.75735473632812500000f, 0.81845092773437500000f, - 0.87902832031250011000f, 0.92727661132812489000f, - 0.07092285156250000000f, 0.09072875976562500000f, - 0.12683105468750000000f, 0.17401123046875000000f, - 0.21115112304687500000f, 0.26873779296875000000f, - 0.31307983398437500000f, 0.38156127929687494000f, - 0.45822143554687494000f, 0.50558471679687500000f, - 0.59259033203125000000f, 0.65231323242187500000f, - 0.70016479492187500000f, 0.74920654296875000000f, - 0.82470703124999989000f, 0.91091918945312500000f, - 0.04772949218750000000f, 0.07241821289062500000f, - 0.10543823242187499000f, 0.14974975585937500000f, - 0.18234252929687500000f, 0.22692871093750000000f, - 0.35968017578125000000f, 0.44265747070312500000f, - 0.49154663085937500000f, 0.55383300781250000000f, - 0.61093139648437500000f, 0.66079711914062500000f, - 0.72448730468749989000f, 0.78778076171875000000f, - 0.87213134765625000000f, 0.92687988281250000000f, - 0.09231567382812501400f, 0.11380004882812500000f, - 0.14849853515625000000f, 0.19897460937500000000f, - 0.28952026367187500000f, 0.33395385742187500000f, - 0.37713623046875000000f, 0.43511962890625000000f, - 0.49359130859375000000f, 0.53408813476562500000f, - 0.59436035156250000000f, 0.65332031250000000000f, - 0.70883178710937500000f, 0.76007080078125000000f, - 0.83456420898437500000f, 0.89743041992187500000f, - 0.03875732421875000000f, 0.05996704101562500000f, - 0.20758056640625000000f, 0.24398803710937500000f, - 0.28088378906250000000f, 0.33044433593750000000f, - 0.38168334960937500000f, 0.43426513671875000000f, - 0.48092651367187500000f, 0.54504394531250000000f, - 0.62161254882812500000f, 0.68670654296875000000f, - 0.75173950195312500000f, 0.80914306640625000000f, - 0.87081909179687500000f, 0.93154907226562500000f, - 0.06744384765625000000f, 0.08389282226562500000f, - 0.13018798828125000000f, 0.22848510742187503000f, - 0.30145263671875000000f, 0.33624267578125000000f, - 0.39132690429687500000f, 0.44039916992187500000f, - 0.49581909179687494000f, 0.56842041015625000000f, - 0.62408447265625000000f, 0.67303466796875011000f, - 0.72445678710937500000f, 0.77182006835937500000f, - 0.82623291015625000000f, 0.89016723632812500000f, - 0.03890991210937500000f, 0.05877685546875000000f, - 0.13214111328125000000f, 0.20059204101562503000f, - 0.25759887695312500000f, 0.33325195312500000000f, - 0.40466308593750000000f, 0.45800781249999994000f, - 0.51657104492187500000f, 0.56680297851562500000f, - 0.63000488281250000000f, 0.67800903320312500000f, - 0.73190307617187500000f, 0.77740478515625000000f, - 0.83532714843750000000f, 0.87417602539062489000f, - 0.09201049804687500000f, 0.11199951171875000000f, - 0.15521240234375000000f, 0.19445800781250000000f, - 0.24072265625000000000f, 0.28408813476562500000f, - 0.33465576171875006000f, 0.38580322265624994000f, - 0.44235229492187500000f, 0.49353027343750000000f, - 0.55175781250000000000f, 0.60949707031250000000f, - 0.68524169921874989000f, 0.75985717773437500000f, - 0.83502197265624989000f, 0.91476440429687500000f, - 0.08795166015625001400f, 0.11392211914062500000f, - 0.15603637695312500000f, 0.19781494140625000000f, - 0.24795532226562503000f, 0.29556274414062500000f, - 0.35394287109375000000f, 0.40551757812500006000f, - 0.47012329101562500000f, 0.52465820312500000000f, - 0.61578369140625000000f, 0.68438720703125011000f, - 0.75686645507812500000f, 0.82440185546875000000f, - 0.89147949218750000000f, 0.94027709960937511000f, - 0.07019042968750000000f, 0.09057617187500000000f, - 0.12515258789062500000f, 0.16607666015625000000f, - 0.19308471679687500000f, 0.24139404296875000000f, - 0.38009643554687500000f, 0.42303466796875000000f, - 0.48056030273437500000f, 0.53421020507812500000f, - 0.58145141601562500000f, 0.63107299804687500000f, - 0.69015502929687500000f, 0.75250244140625000000f, - 0.83920288085937500000f, 0.91751098632812500000f, - 0.06887817382812500000f, 0.08972167968750000000f, - 0.13519287109375000000f, 0.18283081054687497000f, - 0.21490478515624997000f, 0.25524902343750000000f, - 0.28729248046875000000f, 0.34252929687500000000f, - 0.47982788085937500000f, 0.53161621093750000000f, - 0.58755493164062500000f, 0.65518188476562489000f, - 0.72982788085937500000f, 0.79507446289062500000f, - 0.86761474609375000000f, 0.92724609375000000000f, - 0.03744506835937500000f, 0.06240844726562500000f, - 0.11651611328124999000f, 0.15292358398437500000f, - 0.21331787109375000000f, 0.28170776367187500000f, - 0.33642578124999994000f, 0.39706420898437494000f, - 0.52920532226562500000f, 0.58035278320312500000f, - 0.62814331054687500000f, 0.69577026367187500000f, - 0.76889038085937500000f, 0.82019042968750000000f, - 0.89572143554687500000f, 0.94009399414062489000f, - 0.04132080078125000000f, 0.05871582031250000000f, - 0.11563110351562500000f, 0.24649047851562500000f, - 0.31900024414062500000f, 0.35519409179687500000f, - 0.40747070312500000000f, 0.45217895507812500000f, - 0.51095581054687500000f, 0.55508422851562500000f, - 0.61325073242187500000f, 0.67181396484374989000f, - 0.75051879882812500000f, 0.81411743164062500000f, - 0.87423706054687500000f, 0.92333984375000000000f, - 0.09588623046875000000f, 0.12356567382812501000f, - 0.18911743164062500000f, 0.22634887695312500000f, - 0.26712036132812500000f, 0.30993652343750000000f, - 0.35195922851562500000f, 0.40225219726562500000f, - 0.48666381835937500000f, 0.53878784179687500000f, - 0.59832763671875000000f, 0.65313720703125000000f, - 0.71676635742187500000f, 0.78305053710937511000f, - 0.85824584960937511000f, 0.92480468750000000000f, - 0.04019165039062500700f, 0.06906127929687500000f, - 0.14419555664062500000f, 0.23226928710937500000f, - 0.29501342773437500000f, 0.35504150390625000000f, - 0.43161010742187500000f, 0.49615478515625000000f, - 0.57141113281250000000f, 0.63165283203125000000f, - 0.68295288085937500000f, 0.73263549804687511000f, - 0.78659057617187489000f, 0.83163452148437500000f, - 0.88287353515625000000f, 0.93362426757812500000f, - 0.04791259765625000000f, 0.07089233398437500000f, - 0.11651611328124999000f, 0.18966674804687500000f, - 0.30191040039062500000f, 0.35266113281250000000f, - 0.39886474609375000000f, 0.44650268554687500000f, - 0.49291992187500006000f, 0.55816650390625000000f, - 0.65264892578125000000f, 0.71246337890625000000f, - 0.76641845703125011000f, 0.82162475585937500000f, - 0.87622070312500000000f, 0.92065429687500000000f, - 0.07009887695312500000f, 0.11917114257812500000f, - 0.19186401367187503000f, 0.26116943359375000000f, - 0.32556152343750006000f, 0.38958740234375000000f, - 0.45834350585937500000f, 0.52191162109375000000f, - 0.58093261718750000000f, 0.63101196289062500000f, - 0.68179321289062500000f, 0.72848510742187500000f, - 0.77752685546875000000f, 0.82656860351562500000f, - 0.88046264648437500000f, 0.93139648437500000000f, - 0.05844116210937500000f, 0.07650756835937500000f, - 0.12307739257812499000f, 0.17544555664062500000f, - 0.21542358398437497000f, 0.27072143554687500000f, - 0.32528686523437500000f, 0.37225341796875006000f, - 0.42532348632812500000f, 0.46945190429687500000f, - 0.51480102539062500000f, 0.57089233398437500000f, - 0.70724487304687489000f, 0.78790283203125011000f, - 0.87017822265625000000f, 0.93081665039062500000f, - 0.07336425781250000000f, 0.08905029296875000000f, - 0.15838623046875000000f, 0.19079589843750000000f, - 0.22662353515625003000f, 0.30172729492187500000f, - 0.37802124023437500000f, 0.45150756835937494000f, - 0.51129150390625000000f, 0.56054687500000000000f, - 0.62066650390625000000f, 0.67147827148437511000f, - 0.73962402343750000000f, 0.80737304687500000000f, - 0.86944580078125000000f, 0.92764282226562500000f, - 0.04946899414062500000f, 0.06796264648437500000f, - 0.10617065429687500000f, 0.15518188476562500000f, - 0.28762817382812500000f, 0.39343261718750006000f, - 0.43475341796875006000f, 0.47766113281250000000f, - 0.52505493164062500000f, 0.56988525390625000000f, - 0.62396240234375000000f, 0.67776489257812500000f, - 0.72564697265625000000f, 0.78939819335937500000f, - 0.85238647460937500000f, 0.91836547851562500000f, - 0.05703735351562500000f, 0.07293701171875000000f, - 0.12527465820312500000f, 0.21426391601562500000f, - 0.34243774414062500000f, 0.38986206054687500000f, - 0.42904663085937500000f, 0.47576904296875006000f, - 0.51953125000000000000f, 0.56787109375000000000f, - 0.62850952148437500000f, 0.67367553710937500000f, - 0.72171020507812489000f, 0.76763916015625000000f, - 0.82135009765625000000f, 0.87496948242187500000f, - 0.07785034179687500000f, 0.09924316406250000000f, - 0.14306640625000000000f, 0.20025634765625000000f, - 0.24014282226562500000f, 0.27847290039062500000f, - 0.31967163085937506000f, 0.36010742187500000000f, - 0.47003173828125000000f, 0.57312011718750000000f, - 0.64062500000000000000f, 0.68832397460937500000f, - 0.74124145507812500000f, 0.79248046874999989000f, - 0.83816528320312500000f, 0.89208984375000000000f, - 0.08255004882812500000f, 0.10659790039062501000f, - 0.14450073242187500000f, 0.19409179687500000000f, - 0.24124145507812503000f, 0.28540039062500000000f, - 0.35211181640625006000f, 0.40985107421875000000f, - 0.46505737304687500000f, 0.51632690429687500000f, - 0.56820678710937500000f, 0.61322021484375000000f, - 0.66528320312500000000f, 0.71234130859375000000f, - 0.76904296875000000000f, 0.89285278320312500000f, - 0.06610107421875000000f, 0.08517456054687500000f, - 0.12240600585937499000f, 0.15505981445312500000f, - 0.17993164062500003000f, 0.27581787109375000000f, - 0.40914916992187494000f, 0.44869995117187506000f, - 0.50485229492187500000f, 0.55508422851562500000f, - 0.60717773437500000000f, 0.66702270507812500000f, - 0.75903320312500000000f, 0.82308959960937500000f, - 0.88363647460937500000f, 0.93121337890625000000f, - 0.05691528320312499300f, 0.09219360351562500000f, - 0.14331054687500000000f, 0.19940185546875003000f, - 0.25460815429687500000f, 0.30255126953125000000f, - 0.39028930664062500000f, 0.43038940429687500000f, - 0.50454711914062500000f, 0.54104614257812500000f, - 0.65124511718750000000f, 0.68478393554687500000f, - 0.75906372070312500000f, 0.80352783203125000000f, - 0.86755371093750000000f, 0.92022705078125000000f, - 0.10281372070312500000f, 0.13259887695312500000f, - 0.20059204101562503000f, 0.26742553710937500000f, - 0.31460571289062500000f, 0.35745239257812500000f, - 0.40792846679687500000f, 0.45117187500000000000f, - 0.50302124023437500000f, 0.55374145507812500000f, - 0.60543823242187500000f, 0.64840698242187500000f, - 0.71081542968750000000f, 0.77749633789062489000f, - 0.84091186523437489000f, 0.89865112304687500000f, - 0.03860473632812500000f, 0.06665039062500000000f, - 0.16610717773437500000f, 0.24087524414062500000f, - 0.32321166992187500000f, 0.40097045898437506000f, - 0.46096801757812500000f, 0.50778198242187500000f, - 0.56158447265625000000f, 0.60504150390625000000f, - 0.65365600585937500000f, 0.70175170898437500000f, - 0.75436401367187500000f, 0.80679321289062500000f, - 0.86557006835937500000f, 0.91934204101562500000f, - 0.04833984375000000700f, 0.06115722656250000000f, - 0.10787963867187500000f, 0.13580322265625000000f, - 0.26434326171875000000f, 0.32849121093750000000f, - 0.39160156250000000000f, 0.45709228515625000000f, - 0.51794433593750000000f, 0.57354736328125000000f, - 0.63879394531250000000f, 0.68807983398437500000f, - 0.75183105468750000000f, 0.80935668945312500000f, - 0.87588500976562500000f, 0.93283081054687511000f, - 0.10433959960937500000f, 0.13818359375000000000f, - 0.20147705078124997000f, 0.24078369140624997000f, - 0.29016113281250000000f, 0.33187866210937494000f, - 0.38973999023437500000f, 0.43814086914062500000f, - 0.48983764648437500000f, 0.55938720703125000000f, - 0.62957763671875000000f, 0.68634033203125000000f, - 0.76507568359375000000f, 0.82202148437499989000f, - 0.88336181640625011000f, 0.93206787109375000000f, - 0.05267333984375000000f, 0.06872558593750000000f, - 0.14028930664062500000f, 0.21209716796875000000f, - 0.25570678710937500000f, 0.29977416992187500000f, - 0.34677124023437500000f, 0.39044189453125006000f, - 0.43658447265625000000f, 0.47229003906250000000f, - 0.51263427734375000000f, 0.54986572265625000000f, - 0.66134643554687511000f, 0.77972412109375000000f, - 0.85900878906249989000f, 0.92672729492187500000f, - 0.10330200195312500000f, 0.11810302734375000000f, - 0.16195678710937503000f, 0.19494628906250000000f, - 0.21792602539062500000f, 0.26501464843750000000f, - 0.38742065429687500000f, 0.45590209960937500000f, - 0.50292968750000000000f, 0.55776977539062500000f, - 0.62673950195312500000f, 0.67285156249999989000f, - 0.73080444335937489000f, 0.79238891601562500000f, - 0.86102294921875000000f, 0.91418457031250000000f, - 0.08456420898437500000f, 0.10089111328124999000f, - 0.13580322265625000000f, 0.16967773437500000000f, - 0.19692993164062497000f, 0.28970336914062500000f, - 0.41345214843750000000f, 0.45025634765625006000f, - 0.51095581054687500000f, 0.56295776367187500000f, - 0.61120605468750000000f, 0.66333007812499989000f, - 0.72467041015625011000f, 0.77371215820312500000f, - 0.82827758789062500000f, 0.88702392578125000000f, - 0.09240722656250000000f, 0.11901855468750001000f, - 0.20193481445312503000f, 0.24087524414062500000f, - 0.28109741210937500000f, 0.31982421875000000000f, - 0.36764526367187500000f, 0.41452026367187494000f, - 0.46331787109375000000f, 0.50848388671875000000f, - 0.56463623046875000000f, 0.61315917968750000000f, - 0.67718505859374989000f, 0.74334716796875000000f, - 0.80267333984375000000f, 0.88369750976562489000f, - 0.06103515624999999300f, 0.07781982421875000000f, - 0.12411499023437500000f, 0.20864868164062503000f, - 0.29382324218750000000f, 0.33575439453125000000f, - 0.38433837890625006000f, 0.43023681640625000000f, - 0.47573852539062500000f, 0.52474975585937500000f, - 0.57003784179687500000f, 0.61337280273437500000f, - 0.65704345703125000000f, 0.70449829101562500000f, - 0.75198364257812500000f, 0.88568115234375000000f, - 0.08679199218749998600f, 0.10076904296875000000f, - 0.15573120117187500000f, 0.18637084960937500000f, - 0.21090698242187500000f, 0.26239013671875000000f, - 0.37890625000000000000f, 0.42889404296875000000f, - 0.48907470703125000000f, 0.56661987304687500000f, - 0.63085937500000000000f, 0.67962646484375000000f, - 0.73095703125000000000f, 0.78646850585937500000f, - 0.84405517578125000000f, 0.91632080078125000000f, - 0.12338256835937500000f, 0.15716552734375000000f, - 0.22180175781250000000f, 0.27636718750000000000f, - 0.33312988281250000000f, 0.38568115234375006000f, - 0.44381713867187500000f, 0.49389648437500000000f, - 0.54772949218750000000f, 0.60092163085937500000f, - 0.65176391601562500000f, 0.70132446289062500000f, - 0.75759887695312500000f, 0.81149291992187500000f, - 0.86911010742187500000f, 0.92263793945312500000f, - 0.06436157226562500000f, 0.08010864257812500000f, - 0.13183593750000000000f, 0.16860961914062500000f, - 0.22747802734375000000f, 0.31188964843750000000f, - 0.39611816406250006000f, 0.44854736328125000000f, - 0.53793334960937500000f, 0.58786010742187500000f, - 0.62515258789062500000f, 0.68301391601562500000f, - 0.74093627929687500000f, 0.78665161132812500000f, - 0.84982299804687500000f, 0.92950439453125000000f, - 0.04730224609375000000f, 0.08139038085937501400f, - 0.19754028320312500000f, 0.28979492187500000000f, - 0.33523559570312500000f, 0.37695312500000000000f, - 0.42098999023437500000f, 0.46487426757812500000f, - 0.52182006835937500000f, 0.56890869140625000000f, - 0.62442016601562500000f, 0.67492675781250000000f, - 0.73843383789062489000f, 0.80233764648437500000f, - 0.86679077148437500000f, 0.91955566406250000000f, - 0.07357788085937500000f, 0.09411621093750000000f, - 0.12649536132812500000f, 0.16461181640625000000f, - 0.19430541992187500000f, 0.24884033203124997000f, - 0.40054321289062500000f, 0.48977661132812500000f, - 0.53591918945312500000f, 0.58364868164062500000f, - 0.64874267578125000000f, 0.69464111328125000000f, - 0.74642944335937500000f, 0.80313110351562500000f, - 0.86227416992187500000f, 0.90643310546875000000f, - 0.12692260742187500000f, 0.13781738281250000000f, - 0.18176269531250000000f, 0.23300170898437500000f, - 0.25189208984375000000f, 0.27404785156250000000f, - 0.34204101562500000000f, 0.43130493164062500000f, - 0.49468994140624994000f, 0.54550170898437500000f, - 0.61633300781250000000f, 0.66723632812500011000f, - 0.72753906250000000000f, 0.78573608398437511000f, - 0.85626220703125000000f, 0.91589355468750000000f, - 0.06182861328125000000f, 0.07418823242187500000f, - 0.08682250976562500000f, 0.11041259765625000000f, - 0.24261474609375000000f, 0.29913330078125000000f, - 0.38821411132812500000f, 0.44128417968750000000f, - 0.50585937500000000000f, 0.57934570312500000000f, - 0.65234375000000000000f, 0.71163940429687500000f, - 0.76174926757812500000f, 0.81536865234375000000f, - 0.88412475585937500000f, 0.93505859375000000000f, - 0.10464477539062500000f, 0.11697387695312500000f, - 0.13647460937500000000f, 0.14990234375000000000f, - 0.23568725585937500000f, 0.31695556640625000000f, - 0.39614868164062500000f, 0.46759033203125000000f, - 0.50961303710937500000f, 0.57394409179687500000f, - 0.63409423828125000000f, 0.68820190429687511000f, - 0.75155639648437500000f, 0.80853271484375000000f, - 0.86468505859375000000f, 0.93023681640625000000f, - 0.14465332031250000000f, 0.15774536132812500000f, - 0.17687988281250003000f, 0.19790649414062503000f, - 0.21356201171874997000f, 0.26947021484375000000f, - 0.35940551757812500000f, 0.43988037109375000000f, - 0.51364135742187500000f, 0.56192016601562500000f, - 0.63442993164062500000f, 0.68264770507812489000f, - 0.73962402343750000000f, 0.78842163085937511000f, - 0.84860229492187500000f, 0.91616821289062500000f, - 0.00457763671875000000f, 0.00512695312500000000f, - -0.00051879882812500000f, -0.00326538085937500000f, - -0.00433349609375000000f, -0.00698852539062499910f, - -0.00976562500000000000f, -0.01239013671875000000f, - -0.01535034179687500000f, -0.01892089843750000000f, - -0.02645874023437500000f, -0.02853393554687500000f, - -0.02752685546875000000f, -0.02075195312500000000f, - -0.01214599609375000000f, -0.00347900390625000000f, - -0.01214599609375000000f, -0.01083374023437500000f, - 0.00149536132812500000f, 0.00778198242187500000f, - 0.00347900390625000000f, 0.00793457031250000000f, - 0.01217651367187500000f, 0.00805664062500000000f, - 0.00967407226562500000f, 0.01315307617187500000f, - 0.01568603515625000000f, 0.01620483398437500000f, - 0.01327514648437500000f, 0.01086425781250000000f, - 0.00726318359375000000f, 0.00323486328125000000f, - -0.00131225585937500000f, -0.00109863281250000000f, - -0.00515747070312500000f, -0.00683593750000000000f, - -0.01193237304687500000f, -0.01931762695312500000f, - -0.02368164062500000000f, -0.02960205078125000000f, - -0.02575683593750000000f, -0.01388549804687500000f, - -0.00552368164062500000f, -0.00036621093750000000f, - 0.00259399414062500000f, 0.00259399414062500000f, - 0.00500488281250000000f, 0.00595092773437500000f, - 0.00372314453125000000f, 0.00259399414062500000f, - -0.00482177734375000000f, -0.01953125000000000000f, - -0.02755737304687500000f, 0.00027465820312500000f, - 0.00021362304687500000f, -0.00378417968750000000f, - 0.00454711914062500000f, 0.00097656250000000000f, - 0.00671386718750000000f, 0.01126098632812500000f, - 0.00738525390625000000f, 0.00350952148437500040f, - 0.00241088867187500000f, 0.00256347656250000000f, - -0.00445556640625000000f, -0.00659179687500000000f, - -0.00213623046875000000f, 0.03125000000000000000f, - 0.02291870117187500000f, 0.01751708984375000000f, - 0.01342773437500000000f, 0.01150512695312500000f, - 0.01074218749999999800f, 0.00619506835937500000f, - 0.00091552734374999989f, 0.00048828125000000000f, - -0.00009155273437500000f, 0.00247192382812500000f, - 0.00491333007812500000f, 0.00305175781250000000f, - -0.00451660156250000000f, -0.00537109374999999910f, - 0.02847290039062500000f, 0.02288818359375000000f, - 0.01232910156250000000f, 0.00521850585937500000f, - -0.00006103515625000000f, -0.00445556640625000000f, - -0.01254272460937500000f, -0.01348876953125000000f, - -0.01651000976562500000f, -0.01684570312500000000f, - -0.01348876953125000000f, -0.00820922851562500000f, - -0.00732421874999999910f, -0.00158691406250000020f, - 0.01840209960937500000f, 0.01937866210937500000f, - 0.01235961914062499800f, 0.00543212890625000000f, - 0.00656127929687500000f, 0.00057983398437500000f, - -0.00466918945312500000f, -0.00509643554687500000f, - -0.00885009765625000000f, -0.00668334960937500090f, - 0.00460815429687500000f, 0.00827026367187500000f, - 0.00460815429687500000f, 0.00363159179687500000f, - 0.00924682617187500000f, 0.00811767578125000000f, - 0.00305175781250000000f, 0.00210571289062500000f, - -0.00894165039062500000f, -0.02005004882812500000f, - 0.02865600585937500000f, 0.02011108398437500000f, - 0.01348876953125000000f, 0.01071166992187500000f, - 0.00402832031250000000f, 0.00299072265625000000f, - -0.00048828125000000000f, -0.00003051757812500000f, - -0.00411987304687500000f, -0.00610351562500000000f, - -0.00680541992187500000f, -0.00271606445312500000f, - 0.00509643554687500000f, 0.00469970703125000000f, - 0.00524902343750000000f, 0.00723266601562500000f, - -0.00137329101562500000f, -0.00558471679687500000f, - -0.00695800781250000000f, -0.01483154296875000000f, - 0.00802612304687500000f, 0.01855468750000000000f, - 0.00482177734375000000f, -0.00381469726562499960f, - -0.01190185546875000000f, -0.00692749023437500000f, - -0.00360107421875000000f, 0.00131225585937500000f, - -0.01394653320312500000f, -0.01196289062500000000f, - -0.02346801757812500000f, -0.02563476562500000000f, - 0.00061035156250000000f, -0.00357055664062500000f, - -0.00592041015625000000f, -0.00576782226562500000f, - -0.00527954101562500000f, -0.00527954101562500000f, - -0.00100708007812500000f, 0.00097656250000000000f, - 0.00531005859375000000f, 0.00439453125000000000f, - 0.00350952148437500040f, 0.00509643554687500000f, - 0.00173950195312500000f, 0.00134277343749999980f, - 0.00042724609375000000f, 0.00448608398437500000f, - 0.00292968750000000000f, -0.00164794921875000000f, - -0.00433349609375000000f, -0.00393676757812500000f, - -0.00775146484375000000f, -0.01010131835937500000f, - 0.00927734375000000000f, 0.00946044921875000000f, - -0.00158691406250000020f, -0.01278686523437500000f, - -0.02581787109375000000f, -0.03234863281250000000f, - -0.00268554687499999960f, -0.00375366210937500000f, - -0.00616455078125000000f, -0.01046752929687500200f, - -0.01690673828125000000f, -0.02932739257812500000f, - -0.02902221679687500000f, 0.00997924804687500000f, - 0.00485229492187500000f, 0.00247192382812500000f, - 0.00778198242187500000f, 0.00692749023437500000f, - 0.00366210937499999960f, 0.00619506835937500000f, - 0.00781250000000000000f, 0.00585937500000000000f, - 0.00500488281250000000f, 0.00683593750000000000f, - 0.00885009765625000000f, 0.00595092773437500000f, - 0.00659179687500000000f, 0.00637817382812500090f, - 0.00390625000000000000f, 0.02539062500000000300f, - 0.03137207031250000000f, 0.02713012695312500000f, - 0.02130126953125000000f, 0.01538085937500000000f, - 0.01245117187500000000f, 0.01083374023437500000f, - 0.00665283203124999910f, 0.00097656250000000000f, - -0.00350952148437500040f, -0.00256347656250000000f, - -0.00842285156250000000f, -0.00305175781250000000f, - -0.00952148437500000000f, -0.01477050781250000000f, - 0.02743530273437500000f, 0.02081298828124999700f, - 0.01419067382812500000f, 0.01391601562500000000f, - 0.00735473632812500090f, -0.00036621093750000000f, - -0.00839233398437500000f, -0.01296997070312499800f, - -0.01406860351562500000f, -0.01119995117187500000f, - -0.00100708007812500000f, -0.00085449218750000000f, - -0.00311279296875000000f, -0.00592041015625000000f, - -0.01608276367187500000f, 0.02633666992187500000f, - 0.02764892578125000000f, 0.01412963867187500000f, - 0.00747680664062500000f, 0.00039672851562500005f, - -0.00646972656250000000f, -0.00930786132812500000f, - -0.00320434570312500000f, 0.00497436523437500000f, - 0.00851440429687500000f, 0.00537109374999999910f, - 0.00283813476562499960f, 0.00204467773437500000f, - 0.00350952148437500040f, 0.00585937500000000000f, - 0.00186157226562500000f, -0.00152587890625000000f, - -0.00402832031250000000f, -0.00534057617187499910f, - -0.00683593750000000000f, -0.00827026367187500000f, - -0.01919555664062500000f, -0.00769042968750000000f, - 0.03533935546875000000f, 0.02966308593750000000f, - 0.01947021484375000000f, 0.00854492187500000000f, - 0.00915527343750000000f, 0.00994873046875000000f, - 0.00436401367187500000f, -0.00463867187500000000f, - -0.00653076171875000000f, -0.00875854492187500000f, - 0.00161743164062500000f, -0.00128173828125000000f, - -0.00720214843750000000f, -0.01074218749999999800f, - -0.01290893554687500000f, -0.00756835937500000000f, - -0.00393676757812500000f, -0.00497436523437500000f, - -0.00543212890625000000f, -0.00363159179687500000f, - 0.00259399414062500000f, 0.00173950195312500000f, - 0.01568603515625000000f, 0.01165771484375000000f, - 0.01141357421875000200f, 0.01226806640625000000f, - 0.01293945312500000000f, 0.01290893554687500000f, - 0.00827026367187500000f, 0.00601196289062499910f, - 0.00296020507812500000f, 0.00122070312500000000f, - 0.00119018554687500000f, -0.00296020507812500000f, - -0.00582885742187500000f, -0.00500488281250000000f, - -0.00701904296875000090f, -0.00781250000000000000f, - -0.01251220703125000000f, 0.01208496093750000200f, - 0.00997924804687500000f, 0.00387573242187500000f, - 0.00030517578125000000f, -0.00363159179687500000f, - -0.00509643554687500000f, -0.00888061523437500000f, - -0.00836181640625000000f, -0.00430297851562500000f, - -0.00302124023437500040f, -0.00689697265625000000f, - -0.00665283203124999910f, -0.00424194335937500000f, - -0.00683593750000000000f, -0.00637817382812500090f, - -0.00817871093750000000f, -0.01348876953125000000f, - -0.01260375976562500000f, 0.00677490234375000000f, - 0.00177001953125000000f, 0.01589965820312500000f, - 0.01049804687500000000f, 0.00787353515625000000f, - 0.00231933593750000000f, -0.00128173828125000000f, - -0.00433349609375000000f, -0.00503540039062499910f, - -0.00375366210937500000f, -0.00280761718750000000f, - 0.00143432617187500000f, 0.00024414062500000000f, - -0.00009155273437500000f, -0.00582885742187500000f, - -0.00033569335937499995f, -0.00500488281250000000f, - -0.00509643554687500000f, -0.01071166992187500000f, - -0.02258300781250000000f, 0.00949096679687500000f, - 0.01641845703125000000f, 0.00888061523437500000f, - 0.00561523437500000000f, 0.00088500976562500000f, - -0.00320434570312500000f, 0.00027465820312500000f, - -0.00091552734374999989f, -0.00164794921875000000f, - -0.00051879882812500000f, -0.00234985351562500000f, - -0.00827026367187500000f, -0.01257324218750000000f, - -0.01898193359375000000f, -0.01977539062500000000f, - 0.01452636718750000000f, 0.00567626953124999910f, - -0.00201416015625000000f, -0.00601196289062499910f, - -0.00222778320312500000f, -0.00286865234375000000f, - -0.00045776367187499995f, 0.00143432617187500000f, - 0.00085449218750000000f, 0.00341796875000000000f, - -0.00177001953125000000f, -0.00100708007812500000f, - 0.00198364257812500000f, 0.00057983398437500000f, - 0.00256347656250000000f, 0.00262451171875000000f, - 0.00842285156250000000f, 0.00347900390625000000f, - 0.01440429687500000000f, 0.02398681640625000000f, - 0.02438354492187499700f, 0.01907348632812500000f, - 0.01266479492187500000f, 0.00543212890625000000f, - -0.00106811523437500000f, -0.00079345703125000011f, - 0.00015258789062500000f, 0.00027465820312500000f, - 0.00253295898437500040f, 0.00119018554687500000f, - 0.00112915039062500000f, 0.00119018554687500000f, - -0.00561523437500000000f, -0.01141357421875000200f, - -0.00808715820312500000f, -0.01104736328125000000f, - -0.01528930664062500000f, 0.01028442382812500000f, - 0.02185058593750000000f, 0.01458740234374999800f, - -0.00183105468749999980f, -0.00381469726562499960f, - -0.00497436523437500000f, 0.01104736328125000000f, - 0.00051879882812500000f, -0.00372314453125000000f, - -0.00711059570312500000f, 0.00851440429687500000f, - 0.00421142578125000000f, 0.00479125976562500000f, - 0.00970458984375000000f, 0.00588989257812500000f, - 0.00576782226562500000f, 0.00637817382812500090f, - 0.00811767578125000000f, 0.00769042968750000000f, - -0.00140380859375000000f, -0.00170898437500000000f, - -0.00845336914062500000f, -0.01309204101562500000f, - 0.01416015625000000000f, 0.01177978515625000000f, - 0.00433349609375000000f, 0.00134277343749999980f, - -0.00131225585937500000f, 0.00201416015625000000f, - 0.00805664062500000000f, 0.00555419921875000000f, - 0.00143432617187500000f, 0.00042724609375000000f, - -0.00079345703125000011f, -0.00241088867187500000f, - 0.00149536132812500000f, 0.00045776367187499995f, - -0.00390625000000000000f, -0.00619506835937500000f, - -0.01220703125000000000f, -0.01458740234374999800f, - 0.00991821289062500000f, 0.00082397460937500000f, - 0.00714111328125000000f, 0.01254272460937500000f, - 0.00625610351562500000f, 0.00393676757812500000f, - 0.00036621093750000000f, 0.00177001953125000000f, - 0.00375366210937500000f, 0.00173950195312500000f, - 0.00521850585937500000f, 0.00418090820312500000f, - 0.00292968750000000000f, 0.00390625000000000000f, - -0.00097656250000000000f, 0.00408935546875000000f, - -0.00036621093750000000f, 0.00173950195312500000f, - 0.00363159179687500000f, 0.00079345703125000011f, - -0.00067138671874999989f, -0.00503540039062499910f, - -0.01525878906249999800f, -0.02139282226562500000f, - -0.01611328125000000000f, -0.00354003906250000000f, - 0.00195312500000000000f, -0.00024414062500000000f, - 0.00296020507812500000f, -0.00027465820312500000f, - -0.00494384765625000000f, -0.00201416015625000000f, - -0.00476074218750000000f, -0.00592041015625000000f, - -0.00924682617187500000f, -0.01666259765625000000f, - -0.01040649414062499800f, 0.01666259765625000000f, - 0.01092529296875000000f, 0.00289916992187500000f, - 0.00137329101562500000f, 0.00231933593750000000f, - 0.00823974609375000000f, 0.01229858398437500000f, - 0.00625610351562500000f, 0.00305175781250000000f, - 0.00375366210937500000f, 0.00152587890625000000f, - -0.00161743164062500000f, -0.00439453125000000000f, - -0.00335693359375000000f, -0.00039672851562500005f, - 0.00097656250000000000f, -0.00695800781250000000f, - -0.00396728515625000000f, 0.01077270507812500000f, - 0.00903320312500000000f, 0.00170898437500000000f, - -0.01135253906249999800f, -0.00772094726562500000f, - 0.01113891601562500000f, 0.00222778320312500000f, - 0.00030517578125000000f, -0.00103759765625000000f, - -0.00424194335937500000f, -0.00582885742187500000f, - -0.00292968750000000000f, 0.00015258789062500000f, - 0.00134277343749999980f, -0.00259399414062500000f, - -0.00546264648437500000f, -0.00393676757812500000f, - -0.00585937500000000000f, -0.00750732421875000000f, - -0.00259399414062500000f, -0.00335693359375000000f, - -0.00473022460937500000f, -0.00134277343749999980f, - -0.00082397460937500000f, 0.00442504882812500000f, - 0.00421142578125000000f, 0.00241088867187500000f, - 0.00097656250000000000f, -0.00451660156250000000f, - -0.01760864257812500000f, -0.01934814453125000000f, - 0.00582885742187500000f, 0.00286865234375000000f, - -0.00027465820312500000f, -0.00106811523437500000f, - -0.00234985351562500000f, -0.00256347656250000000f, - -0.00170898437500000000f, -0.00521850585937500000f, - -0.00909423828125000000f, -0.00827026367187500000f, - -0.00741577148437500000f, -0.00476074218750000000f, - -0.01000976562500000000f, -0.00717163085937500000f, - -0.00231933593750000000f, -0.00390625000000000000f, - -0.00369262695312500000f, 0.00393676757812500000f, - 0.00039672851562500005f, -0.00067138671874999989f, - 0.00097656250000000000f, 0.00137329101562500000f, - -0.00756835937500000000f, -0.00198364257812500000f, - 0.00588989257812500000f, -0.00247192382812500000f, - 0.00912475585937500000f, 0.00173950195312500000f, - -0.00448608398437500000f, 0.00585937500000000000f, - -0.00503540039062499910f, -0.01080322265625000200f, - -0.01019287109375000000f, -0.00323486328125000000f, - -0.00476074218750000000f, -0.00122070312500000000f, - -0.00009155273437500000f, -0.00207519531250000000f, - 0.00378417968750000000f, -0.00784301757812500000f, - 0.00238037109375000000f, 0.00378417968750000000f, - 0.00518798828125000000f, 0.01257324218750000000f, - 0.00692749023437500000f, 0.00320434570312500000f, - -0.00317382812500000040f, 0.00036621093750000000f, - 0.00469970703125000000f, 0.00762939453124999910f, - 0.00836181640625000000f, 0.00787353515625000000f, - 0.00012207031250000000f, -0.00082397460937500000f, - 0.00717163085937500000f, 0.00463867187500000000f, - 0.00155639648437500000f, 0.01031494140625000000f, - 0.00915527343750000000f, 0.00021362304687500000f, - -0.00958251953125000000f, -0.01254272460937500000f, - 0.00656127929687500000f, 0.00518798828125000000f, - -0.00027465820312500000f, -0.00283813476562499960f, - -0.00234985351562500000f, 0.00231933593750000000f, - 0.00204467773437500000f, 0.00164794921875000000f, - 0.00610351562500000000f, 0.00961303710937500000f, - 0.00497436523437500000f, 0.00219726562500000000f, - -0.00277709960937500000f, -0.01226806640625000000f, - 0.00482177734375000000f, 0.00570678710937500090f, - -0.00476074218750000000f, -0.00277709960937500000f, - 0.00885009765625000000f, 0.00814819335937500000f, - 0.00509643554687500000f, 0.00277709960937500000f, - 0.00427246093750000000f, 0.00521850585937500000f, - 0.00341796875000000000f, 0.00027465820312500000f, - -0.00128173828125000000f, -0.00540161132812500090f, - -0.01342773437500000000f, 0.01174926757812500200f, - 0.00244140625000000000f, 0.00045776367187499995f, - 0.00524902343750000000f, 0.00393676757812500000f, - 0.00125122070312500000f, -0.00393676757812500000f, - -0.01135253906249999800f, -0.00073242187500000000f, - -0.00228881835937500000f, -0.00091552734374999989f, - -0.00518798828125000000f, 0.00030517578125000000f, - -0.00360107421875000000f, 0.00173950195312500000f, - 0.00238037109375000000f, -0.00308227539062500000f, - 0.00708007812500000000f, 0.00491333007812500000f, - 0.00375366210937500000f, 0.00781250000000000000f, - 0.00845336914062500000f, 0.00308227539062500000f, - -0.00585937500000000000f, -0.01919555664062500000f, - -0.00305175781250000000f, -0.00183105468749999980f, - -0.00708007812500000000f, 0.00201416015625000000f, - 0.00039672851562500005f, -0.00039672851562500005f, - -0.00244140625000000000f, -0.00729370117187499910f, - 0.00729370117187499910f, 0.00112915039062500000f, - 0.00097656250000000000f, 0.00271606445312500000f, - -0.00973510742187500000f, -0.01766967773437500000f, - 0.01373291015625000000f, 0.01098632812500000000f, - 0.00009155273437500000f, -0.00088500976562500000f, - -0.00912475585937500000f, -0.00271606445312500000f, - -0.00164794921875000000f, -0.00335693359375000000f, - -0.00750732421875000000f, -0.00500488281250000000f, - 0.00018310546875000000f, -0.00573730468750000000f, - 0.01031494140625000000f, 0.00537109374999999910f, - -0.00280761718750000000f, 0.00601196289062499910f, - 0.00418090820312500000f, 0.00408935546875000000f, - 0.00036621093750000000f, -0.00006103515625000000f, - 0.00170898437500000000f, -0.00558471679687500000f, - 0.00347900390625000000f, -0.00109863281250000000f, - -0.00399780273437500000f, -0.00622558593750000000f, - 0.00228881835937500000f, -0.00076293945312500000f, - -0.00531005859375000000f, 0.00582885742187500000f, - -0.00045776367187499995f, -0.00885009765625000000f, - -0.01309204101562500000f, -0.00814819335937500000f, - 0.00241088867187500000f, 0.00112915039062500000f, - 0.00323486328125000000f, 0.00070190429687500000f, - -0.01171875000000000000f, 0.01296997070312499800f, - 0.00213623046875000000f, -0.00042724609375000000f, - 0.00646972656250000000f, 0.00320434570312500000f, - 0.00045776367187499995f, -0.00006103515625000000f, - -0.00128173828125000000f, -0.00112915039062500000f, - -0.00375366210937500000f, 0.00329589843750000000f, - 0.00085449218750000000f, -0.00146484375000000000f, - 0.00588989257812500000f, 0.00601196289062499910f, - 0.00527954101562500000f, -0.00100708007812500000f, - 0.00112915039062500000f, 0.00222778320312500000f, - -0.00173950195312500000f, 0.00781250000000000000f, - 0.00418090820312500000f, -0.00177001953125000000f, - -0.01312255859375000000f, -0.00695800781250000000f, - 0.00662231445312500000f, -0.00155639648437500000f, - -0.00030517578125000000f, -0.00177001953125000000f, - -0.00018310546875000000f, 0.00067138671874999989f, - 0.00317382812500000040f, 0.00186157226562500000f, - -0.00363159179687500000f, 0.00515747070312500000f, - 0.00439453125000000000f, 0.00048828125000000000f, - -0.00140380859375000000f, -0.01202392578124999800f, - 0.00183105468749999980f, 0.01385498046875000000f, - -0.00244140625000000000f, -0.00909423828125000000f, - -0.00198364257812500000f, 0.00076293945312500000f, - 0.00000000000000000000f, -0.00073242187500000000f, - -0.00198364257812500000f, -0.01272583007812500000f, - 0.01419067382812500000f, 0.00842285156250000000f, - -0.00009155273437500000f, -0.00592041015625000000f, - -0.00039672851562500005f, 0.00396728515625000000f, - 0.00057983398437500000f, -0.00018310546875000000f, - -0.00064086914062500000f, -0.00073242187500000000f, - -0.00549316406250000000f, -0.00161743164062500000f, - -0.00259399414062500000f, 0.00061035156250000000f, - 0.00360107421875000000f, 0.00448608398437500000f, - 0.00344848632812500000f, -0.00228881835937500000f, - -0.00881958007812500000f, 0.00689697265625000000f, - -0.00372314453125000000f, 0.00692749023437500000f, - 0.00823974609375000000f, 0.00381469726562499960f, - 0.00332641601562499960f, 0.00601196289062499910f, - 0.00381469726562499960f, 0.00421142578125000000f, - 0.00134277343749999980f, 0.00183105468749999980f, - 0.00076293945312500000f, -0.00167846679687500000f, - -0.00509643554687500000f, -0.00097656250000000000f, - -0.00424194335937500000f, -0.00588989257812500000f, - -0.00527954101562500000f, -0.00964355468750000000f, - 0.00875854492187500000f, -0.00634765625000000090f, - 0.00772094726562500000f, 0.00729370117187499910f, - 0.00082397460937500000f, -0.00244140625000000000f, - -0.00573730468750000000f, -0.00085449218750000000f, - -0.00555419921875000000f, -0.00717163085937500000f, - 0.00476074218750000000f, -0.00357055664062500000f, - 0.00390625000000000000f, -0.00146484375000000000f, - -0.00177001953125000000f, -0.00689697265625000000f, - 0.00524902343750000000f, 0.00552368164062500000f, - 0.00509643554687500000f, 0.00057983398437500000f, - 0.00189208984375000000f, 0.00030517578125000000f, - 0.00006103515625000000f, 0.00552368164062500000f, - 0.00460815429687500000f, 0.00329589843750000000f, - -0.00048828125000000000f, -0.00033569335937499995f, - -0.00238037109375000000f, -0.01010131835937500000f, - 0.01254272460937500000f, 0.00405883789062500000f, - 0.00051879882812500000f, 0.00317382812500000040f, - 0.00195312500000000000f, -0.00561523437500000000f, - 0.00073242187500000000f, -0.00091552734374999989f, - -0.00009155273437500000f, -0.00863647460937500000f, - 0.00369262695312500000f, 0.00622558593750000000f, - -0.00024414062500000000f, -0.00607299804687500000f, - -0.00064086914062500000f, -0.00244140625000000000f, - -0.00515747070312500000f, -0.00479125976562500000f, - -0.00582885742187500000f, -0.00415039062500000000f, - 0.00247192382812500000f, 0.00473022460937500000f, - 0.00042724609375000000f, -0.00399780273437500000f, - 0.00744628906250000000f, 0.00225830078125000000f, - -0.00173950195312500000f, -0.00143432617187500000f, - -0.00854492187500000000f, 0.01058959960937500000f, - 0.00338745117187500000f, -0.00234985351562500000f, - -0.00390625000000000000f, -0.00433349609375000000f, - -0.00592041015625000000f, -0.00381469726562499960f, - -0.00018310546875000000f, -0.00207519531250000000f, - 0.00277709960937500000f, 0.00003051757812500000f, - 0.00070190429687500000f, 0.00042724609375000000f, - -0.00469970703125000000f, -0.00103759765625000000f, - 0.00070190429687500000f, -0.00115966796875000000f, - -0.01046752929687500200f, 0.01535034179687500000f, - 0.00445556640625000000f, -0.00115966796875000000f, - -0.00140380859375000000f, -0.00125122070312500000f, - 0.00177001953125000000f, 0.00094604492187500000f, - 0.00192260742187500000f, -0.00146484375000000000f, - -0.00357055664062500000f, 0.00137329101562500000f, - 0.00085449218750000000f, 0.00003051757812500000f, - -0.00271606445312500000f, -0.00015258789062500000f, - -0.00134277343749999980f, -0.00088500976562500000f, - -0.01367187500000000000f, 0.01486206054687500000f, - 0.00622558593750000000f, 0.00247192382812500000f, - 0.00140380859375000000f, -0.00323486328125000000f, - -0.00921630859375000000f, 0.01159667968750000000f, - 0.00366210937499999960f, -0.00115966796875000000f, - -0.00036621093750000000f, -0.00119018554687500000f, - 0.00213623046875000000f, -0.00009155273437500000f, - 0.00076293945312500000f, -0.00198364257812500000f, - 0.00091552734374999989f, -0.00033569335937499995f, - 0.00103759765625000000f, -0.00045776367187499995f, - 0.00067138671874999989f, -0.00350952148437500040f, - 0.00000000000000000000f, -0.00241088867187500000f, - -0.00253295898437500040f, 0.00137329101562500000f, - 0.00347900390625000000f, 0.00131225585937500000f, - 0.00457763671875000000f, 0.00109863281250000000f, - 0.00711059570312500000f, 0.00454711914062500000f, - 0.00595092773437500000f, 0.00015258789062500000f, - 0.00076293945312500000f, -0.00158691406250000020f, - -0.01449584960937500000f, 0.00836181640625000000f, - 0.00085449218750000000f, -0.00119018554687500000f, - -0.00024414062500000000f, -0.00201416015625000000f, - -0.00778198242187500000f, 0.00787353515625000000f, - 0.00170898437500000000f, 0.00436401367187500000f, - -0.00137329101562500000f, -0.00579833984375000000f, - 0.00503540039062499910f, -0.00183105468749999980f, - 0.00061035156250000000f, 0.00006103515625000000f, - 0.00381469726562499960f, -0.00393676757812500000f, - 0.00155639648437500000f, -0.00024414062500000000f, - -0.01022338867187500000f, 0.00878906250000000000f, - 0.00115966796875000000f, 0.00180053710937500000f, - 0.00076293945312500000f, -0.00128173828125000000f, - 0.00070190429687500000f, -0.00360107421875000000f, - -0.00341796875000000000f, 0.00033569335937499995f, - -0.00167846679687500000f, -0.00405883789062500000f, - -0.00332641601562499960f, 0.00073242187500000000f, - -0.00320434570312500000f, 0.00238037109375000000f, - -0.00195312500000000000f, -0.00747680664062500000f, - 0.00616455078125000000f, -0.00198364257812500000f, - -0.00387573242187500000f, 0.00494384765625000000f, - 0.00122070312500000000f, -0.00286865234375000000f, - 0.00271606445312500000f, -0.00259399414062500000f, - -0.00363159179687500000f, -0.00314331054687500000f, - 0.00296020507812500000f, 0.00027465820312500000f, - -0.00213623046875000000f, -0.00085449218750000000f, - 0.00592041015625000000f, 0.00262451171875000000f, - -0.00341796875000000000f, -0.00280761718750000000f, - -0.00347900390625000000f, 0.00225830078125000000f, - -0.00149536132812500000f, 0.00140380859375000000f, - -0.00256347656250000000f, -0.00543212890625000000f, - 0.00344848632812500000f, 0.00158691406250000020f, - -0.00625610351562500000f, 0.01016235351562500000f, - 0.00268554687499999960f, 0.00677490234375000000f, - 0.00170898437500000000f, -0.00167846679687500000f, - 0.00039672851562500005f, 0.00262451171875000000f, - 0.00012207031250000000f, -0.00234985351562500000f, - 0.00683593750000000000f, 0.00347900390625000000f, - -0.00320434570312500000f, 0.00341796875000000000f, - 0.00381469726562499960f, -0.00088500976562500000f, - -0.00054931640625000000f, -0.00439453125000000000f, - 0.00067138671874999989f, -0.00177001953125000000f, - -0.00302124023437500040f, 0.00085449218750000000f, - 0.00347900390625000000f, -0.00201416015625000000f, - -0.00097656250000000000f, -0.00515747070312500000f, - -0.00958251953125000000f, 0.00869750976562500000f, - 0.00219726562500000000f, -0.00225830078125000000f, - 0.00546264648437500000f, 0.00085449218750000000f, - -0.00241088867187500000f, -0.00555419921875000000f, - 0.00039672851562500005f, -0.00167846679687500000f, - 0.00448608398437500000f, 0.00039672851562500005f, - 0.00036621093750000000f, -0.00164794921875000000f, - 0.00094604492187500000f, -0.00256347656250000000f, - -0.00051879882812500000f, -0.00228881835937500000f, - -0.00695800781250000000f, 0.00253295898437500040f, - -0.01144409179687500000f, 0.01330566406249999800f, - 0.00335693359375000000f, -0.00192260742187500000f, - -0.00082397460937500000f, -0.00415039062500000000f, - 0.00515747070312500000f, -0.00170898437500000000f, - -0.00024414062500000000f, -0.00521850585937500000f, - 0.00561523437500000000f, -0.00128173828125000000f, - 0.00451660156250000000f, 0.00207519531250000000f, - 0.00622558593750000000f, 0.00717163085937500000f, - 0.00335693359375000000f, -0.00698852539062499910f, - 0.00277709960937500000f, 0.00521850585937500000f, - -0.00131225585937500000f, -0.00009155273437500000f, - -0.00079345703125000011f, -0.00302124023437500040f, - -0.00338745117187500000f, 0.00216674804687500000f, - -0.00518798828125000000f, 0.00616455078125000000f, - -0.00204467773437500000f, 0.00552368164062500000f, - -0.00112915039062500000f, 0.00332641601562499960f, - -0.00366210937499999960f, 0.00009155273437500000f, - -0.00167846679687500000f, -0.00793457031250000000f, - -0.00048828125000000000f, 0.00463867187500000000f, - 0.00277709960937500000f, 0.00433349609375000000f, - 0.00128173828125000000f, 0.00134277343749999980f, - 0.00408935546875000000f, 0.00143432617187500000f, - 0.00051879882812500000f, -0.00106811523437500000f, - 0.00067138671874999989f, 0.00241088867187500000f, - -0.00515747070312500000f, 0.00125122070312500000f, - 0.00140380859375000000f, 0.00845336914062500000f, - -0.00283813476562499960f, -0.00149536132812500000f, - -0.00384521484375000000f, 0.00112915039062500000f, - -0.00314331054687500000f, -0.00103759765625000000f, - -0.00067138671874999989f, -0.00274658203125000000f, - -0.00408935546875000000f, -0.00625610351562500000f, - 0.00280761718750000000f, -0.00027465820312500000f, - 0.00003051757812500000f, -0.00595092773437500000f, - -0.00729370117187499910f, 0.00137329101562500000f, - 0.00164794921875000000f, 0.00054931640625000000f, - -0.00070190429687500000f, -0.00003051757812500000f, - -0.00244140625000000000f, -0.00299072265625000000f, - -0.00061035156250000000f, -0.00796508789062500000f, - 0.00933837890625000000f, 0.00219726562500000000f, - 0.00061035156250000000f, -0.00271606445312500000f, - -0.00662231445312500000f, 0.00033569335937499995f, - 0.00018310546875000000f, -0.00250244140625000000f, - 0.00271606445312500000f, 0.00039672851562500005f, - -0.00393676757812500000f, -0.00271606445312500000f, - 0.00253295898437500040f, -0.00216674804687500000f, - -0.00167846679687500000f, 0.00396728515625000000f, - -0.00299072265625000000f, -0.00445556640625000000f, - -0.00082397460937500000f, -0.00173950195312500000f, - 0.00161743164062500000f, 0.00839233398437500000f, - 0.00051879882812500000f, 0.00518798828125000000f, - -0.00015258789062500000f, -0.00164794921875000000f, - 0.00402832031250000000f, -0.00195312500000000000f, - 0.00219726562500000000f, 0.00488281250000000000f, - -0.00381469726562499960f, -0.00512695312500000000f, - 0.00219726562500000000f, 0.00122070312500000000f, - 0.00518798828125000000f, 0.00238037109375000000f, - 0.00756835937500000000f, 0.00354003906250000000f, - 0.00061035156250000000f, 0.00256347656250000000f, - 0.00094604492187500000f, -0.00103759765625000000f, - 0.00579833984375000000f, 0.00115966796875000000f, - 0.00039672851562500005f, -0.00323486328125000000f, - 0.00686645507812500000f, 0.00082397460937500000f, - -0.00512695312500000000f, 0.00073242187500000000f, - -0.00479125976562500000f, -0.00372314453125000000f, - 0.00503540039062499910f, 0.00033569335937499995f, - -0.00491333007812500000f, -0.00650024414062500000f, - -0.00036621093750000000f, -0.00155639648437500000f, - -0.00308227539062500000f, 0.00128173828125000000f, - 0.00308227539062500000f, 0.00082397460937500000f, - 0.00167846679687500000f, 0.00338745117187500000f, - 0.00228881835937500000f, 0.00216674804687500000f, - -0.00292968750000000000f, -0.00003051757812500000f, - 0.00198364257812500000f, -0.00845336914062500000f, - 0.01199340820312500000f, -0.00079345703125000011f, - -0.00134277343749999980f, -0.00207519531250000000f, - -0.00256347656250000000f, -0.00201416015625000000f, - -0.00289916992187500000f, 0.00717163085937500000f, - 0.00546264648437500000f, -0.00076293945312500000f, - -0.00125122070312500000f, 0.00082397460937500000f, - -0.00277709960937500000f, -0.00390625000000000000f, - -0.00677490234375000000f, 0.00445556640625000000f, - -0.00219726562500000000f, -0.00091552734374999989f, - -0.00073242187500000000f, 0.00167846679687500000f, - -0.00384521484375000000f, -0.00207519531250000000f, - -0.00177001953125000000f, -0.00387573242187500000f, - 0.00039672851562500005f, -0.00296020507812500000f, - -0.00323486328125000000f, 0.00531005859375000000f, - -0.00305175781250000000f, 0.00473022460937500000f, - 0.00308227539062500000f, -0.00445556640625000000f, - -0.00064086914062500000f, 0.00796508789062500000f, - 0.00067138671874999989f, 0.00115966796875000000f, - -0.00201416015625000000f, 0.00198364257812500000f, - 0.00012207031250000000f, 0.00213623046875000000f, - 0.00195312500000000000f, 0.00439453125000000000f, - 0.00180053710937500000f, 0.00650024414062500000f, - 0.00216674804687500000f, -0.01028442382812500000f, - 0.00924682617187500000f, -0.00158691406250000020f, - 0.00155639648437500000f, -0.00170898437500000000f, - 0.00003051757812500000f, 0.00030517578125000000f, - -0.00045776367187499995f, -0.00015258789062500000f, - 0.00103759765625000000f, 0.00158691406250000020f, - 0.00695800781250000000f, 0.00399780273437500000f, - 0.00491333007812500000f, -0.00387573242187500000f, - -0.00653076171875000000f, 0.00726318359375000000f, - 0.00375366210937500000f, 0.00195312500000000000f, - -0.00448608398437500000f, -0.00152587890625000000f, - -0.00103759765625000000f, -0.00387573242187500000f, - 0.00622558593750000000f, 0.00494384765625000000f, - 0.00259399414062500000f, 0.00125122070312500000f, - 0.00015258789062500000f, -0.00427246093750000000f, - 0.00222778320312500000f, -0.00457763671875000000f, - 0.00170898437500000000f, -0.00292968750000000000f, - -0.00201416015625000000f, -0.00061035156250000000f, - 0.00006103515625000000f, -0.00717163085937500000f, - 0.00180053710937500000f, -0.00067138671874999989f, - -0.00326538085937500000f, 0.00457763671875000000f, - -0.00048828125000000000f, -0.00143432617187500000f, - -0.00012207031250000000f, 0.00247192382812500000f, - -0.00204467773437500000f, 0.00509643554687500000f, - 0.00454711914062500000f, 0.00454711914062500000f, - -0.00479125976562500000f, 0.00878906250000000000f, - -0.00476074218750000000f, -0.00082397460937500000f, - -0.00024414062500000000f, 0.00054931640625000000f, - 0.00253295898437500040f, -0.00073242187500000000f, - -0.00125122070312500000f, -0.00509643554687500000f, - 0.00482177734375000000f, -0.00305175781250000000f, - 0.00283813476562499960f, 0.00161743164062500000f, - 0.00613403320312500000f, 0.00045776367187499995f, - 0.00128173828125000000f, 0.00811767578125000000f, - 0.00848388671875000000f, -0.00036621093750000000f, - -0.00018310546875000000f, -0.00112915039062500000f, - 0.00259399414062500000f, 0.00018310546875000000f, - 0.00061035156250000000f, -0.00573730468750000000f, - -0.00827026367187500000f, 0.00326538085937500000f, - -0.00039672851562500005f, -0.00244140625000000000f, - 0.00155639648437500000f, 0.00616455078125000000f, - 0.00527954101562500000f, -0.00210571289062500000f, - 0.00238037109375000000f, -0.00573730468750000000f, - 0.00140380859375000000f, 0.00012207031250000000f, - 0.00466918945312500000f, 0.00036621093750000000f, - -0.00421142578125000000f, 0.00515747070312500000f, - 0.00015258789062500000f, -0.00177001953125000000f, - -0.00375366210937500000f, -0.00329589843750000000f, - -0.00741577148437500000f, 0.00457763671875000000f, - 0.00030517578125000000f, -0.00582885742187500000f, - 0.00750732421875000000f, -0.00045776367187499995f, - 0.00115966796875000000f, 0.00076293945312500000f, - -0.00030517578125000000f, 0.00042724609375000000f, - 0.00186157226562500000f, 0.00152587890625000000f, - -0.00628662109375000000f, -0.00656127929687500000f, - -0.00671386718750000000f, 0.00274658203125000000f, - 0.00015258789062500000f, -0.00454711914062500000f, - -0.00668334960937500090f, 0.00170898437500000000f, - 0.00433349609375000000f, 0.00073242187500000000f, - -0.01147460937500000000f, 0.00234985351562500000f, - -0.00244140625000000000f, 0.00228881835937500000f, - 0.00018310546875000000f, 0.00128173828125000000f, - -0.00308227539062500000f, 0.00048828125000000000f, - 0.00170898437500000000f, 0.00042724609375000000f, - -0.00173950195312500000f, 0.00009155273437500000f, - -0.00051879882812500000f, 0.00244140625000000000f, - 0.00173950195312500000f, -0.00109863281250000000f, - 0.00268554687499999960f, -0.00180053710937500000f, - -0.00296020507812500000f, -0.00057983398437500000f, - -0.00451660156250000000f, 0.00140380859375000000f, - -0.00668334960937500090f, 0.00689697265625000000f, - 0.00347900390625000000f, -0.00012207031250000000f, - -0.00219726562500000000f, -0.00045776367187499995f, - 0.00112915039062500000f, -0.00149536132812500000f, - -0.00085449218750000000f, 0.00753784179687500000f, - 0.00134277343749999980f, 0.00375366210937500000f, - 0.00143432617187500000f, -0.00372314453125000000f, - -0.00115966796875000000f, 0.00051879882812500000f, - 0.00012207031250000000f, -0.00344848632812500000f, - -0.00097656250000000000f, -0.00683593750000000000f, - 0.00469970703125000000f, -0.00408935546875000000f, - 0.00598144531250000000f, 0.00216674804687500000f, - -0.00814819335937500000f, -0.00259399414062500000f, - 0.00085449218750000000f, -0.00213623046875000000f, - 0.00271606445312500000f, -0.00366210937499999960f, - 0.00302124023437500040f, -0.00006103515625000000f, - 0.00195312500000000000f, 0.00231933593750000000f, - -0.00506591796875000090f, -0.00146484375000000000f, - 0.00576782226562500000f, -0.00106811523437500000f, - -0.00280761718750000000f, -0.00515747070312500000f, - -0.00375366210937500000f, 0.01034545898437500000f, - 0.00115966796875000000f, -0.00076293945312500000f, - 0.00115966796875000000f, -0.00106811523437500000f, - 0.00686645507812500000f, -0.00424194335937500000f, - -0.00152587890625000000f, -0.00192260742187500000f, - 0.00750732421875000000f, 0.00183105468749999980f, - -0.00564575195312500000f, -0.00332641601562499960f, - -0.00149536132812500000f, -0.00161743164062500000f, - -0.00509643554687500000f, 0.00155639648437500000f, - 0.00454711914062500000f, 0.00183105468749999980f, - -0.00308227539062500000f, -0.00100708007812500000f, - 0.00076293945312500000f, -0.00231933593750000000f, - 0.00366210937499999960f, 0.00097656250000000000f, - -0.00091552734374999989f, -0.00253295898437500040f, - 0.00311279296875000000f, 0.00277709960937500000f, - -0.00567626953124999910f, -0.00796508789062500000f, - 0.00399780273437500000f, -0.00601196289062499910f + -0.45703125000000000000f, -0.41406250000000000000f, + -0.36718750000000000000f, -0.31640625000000000000f, + -0.25390625000000000000f, -0.20312500000000003000f, + -0.14453125000000000000f, -0.08593749999999998600f, + -0.01953125000000000000f, 0.04296874999999999300f, + 0.10546875000000000000f, 0.16406250000000000000f, + 0.23046875000000000000f, 0.29296875000000000000f, + 0.35546875000000000000f, 0.41406250000000000000f, + -0.46874999999999994000f, -0.45312500000000000000f, + -0.39062500000000000000f, -0.32812500000000000000f, + -0.26171875000000000000f, -0.19140625000000000000f, + -0.12500000000000000000f, -0.06250000000000000000f, + 0.00000000000000000000f, 0.05859374999999999300f, + 0.11718749999999999000f, 0.17968750000000000000f, + 0.24218750000000000000f, 0.30078125000000000000f, + 0.36718750000000000000f, 0.42578124999999994000f, + -0.47265625000000000000f, -0.45312500000000000000f, + -0.39843750000000000000f, -0.33203125000000000000f, + -0.27734375000000000000f, -0.22656250000000000000f, + -0.15234375000000000000f, -0.09375000000000000000f, + -0.01953125000000000000f, 0.03906250000000000000f, + 0.11328125000000000000f, 0.17578125000000000000f, + 0.23828125000000000000f, 0.30078125000000000000f, + 0.35937500000000000000f, 0.41796875000000000000f, + -0.46874999999999994000f, -0.45312500000000000000f, + -0.36718750000000000000f, -0.32421875000000006000f, + -0.26953125000000000000f, -0.22265625000000000000f, + -0.17968750000000000000f, -0.09765625000000000000f, + -0.02734375000000000000f, 0.03906250000000000000f, + 0.10546875000000000000f, 0.16406250000000000000f, + 0.22656250000000000000f, 0.29296875000000000000f, + 0.35546875000000000000f, 0.41796875000000000000f, + -0.44531250000000000000f, -0.42578124999999994000f, + -0.36718750000000000000f, -0.30859375000000000000f, + -0.25781250000000000000f, -0.20312500000000003000f, + -0.13671875000000000000f, -0.07031250000000000000f, + -0.01562500000000000000f, 0.03515625000000000000f, + 0.10156250000000001000f, 0.15625000000000000000f, + 0.20703125000000000000f, 0.25390625000000000000f, + 0.31640625000000000000f, 0.35937500000000000000f, + -0.44531250000000000000f, -0.42187500000000000000f, + -0.37500000000000000000f, -0.28906250000000000000f, + -0.24218750000000000000f, -0.19531250000000000000f, + -0.13281250000000000000f, -0.07031250000000000000f, + 0.00000000000000000000f, 0.07031250000000000000f, + 0.12890625000000000000f, 0.18359375000000000000f, + 0.23828125000000000000f, 0.30078125000000000000f, + 0.36718750000000000000f, 0.41796875000000000000f, + -0.45312500000000000000f, -0.42578124999999994000f, + -0.38671875000000006000f, -0.32812500000000000000f, + -0.27734375000000000000f, -0.23437499999999997000f, + -0.17187499999999997000f, -0.11718749999999999000f, + -0.03515625000000000000f, 0.01953125000000000000f, + 0.07031250000000000000f, 0.12890625000000000000f, + 0.20312500000000003000f, 0.27343750000000000000f, + 0.34374999999999994000f, 0.41406250000000000000f, + -0.46484375000000000000f, -0.44531250000000000000f, + -0.38671875000000006000f, -0.34765625000000000000f, + -0.27734375000000000000f, -0.23437499999999997000f, + -0.19531250000000000000f, -0.14453125000000000000f, + -0.01562500000000000000f, 0.04687500000000000000f, + 0.10937500000000000000f, 0.17968750000000000000f, + 0.23437499999999997000f, 0.30078125000000000000f, + 0.35546875000000000000f, 0.41406250000000000000f, + -0.44140625000000000000f, -0.42578124999999994000f, + -0.33984375000000000000f, -0.30468750000000000000f, + -0.26171875000000000000f, -0.20312500000000003000f, + -0.15625000000000000000f, -0.07421875000000000000f, + -0.03125000000000000000f, 0.04687500000000000000f, + 0.11328125000000000000f, 0.16796875000000000000f, + 0.22656250000000000000f, 0.29296875000000000000f, + 0.36718750000000000000f, 0.44140625000000000000f, + -0.46484375000000000000f, -0.44531250000000000000f, + -0.34374999999999994000f, -0.30078125000000000000f, + -0.24609375000000000000f, -0.19140625000000000000f, + -0.14062500000000000000f, -0.08984375000000000000f, + 0.00390625000000000000f, 0.06640625000000000000f, + 0.12890625000000000000f, 0.19921875000000000000f, + 0.26562500000000000000f, 0.31640625000000000000f, + 0.37890625000000000000f, 0.42578124999999994000f, + -0.46484375000000000000f, -0.44531250000000000000f, + -0.39453125000000000000f, -0.34374999999999994000f, + -0.27734375000000000000f, -0.22265625000000000000f, + -0.16406250000000000000f, -0.06250000000000000000f, + -0.00390625000000000000f, 0.04296874999999999300f, + 0.09375000000000000000f, 0.14843750000000000000f, + 0.21093750000000000000f, 0.26953125000000000000f, + 0.35156250000000000000f, 0.42968750000000000000f, + -0.45312500000000000000f, -0.40234375000000000000f, + -0.33593750000000000000f, -0.28515625000000000000f, + -0.22265625000000000000f, -0.16796875000000000000f, + -0.10546875000000000000f, -0.05078125000000000700f, + 0.00781250000000000000f, 0.06250000000000000000f, + 0.12109375000000000000f, 0.17578125000000000000f, + 0.23828125000000000000f, 0.29687500000000000000f, + 0.35937500000000000000f, 0.42187500000000000000f, + -0.45312500000000000000f, -0.43750000000000000000f, + -0.39062500000000000000f, -0.30078125000000000000f, + -0.26562500000000000000f, -0.19921875000000000000f, + -0.16015625000000000000f, -0.08593749999999998600f, + -0.04296874999999999300f, 0.00000000000000000000f, + 0.06250000000000000000f, 0.14453125000000000000f, + 0.21875000000000000000f, 0.28125000000000000000f, + 0.34374999999999994000f, 0.40625000000000006000f, + -0.46093750000000000000f, -0.44140625000000000000f, + -0.37500000000000000000f, -0.32812500000000000000f, + -0.26953125000000000000f, -0.21484375000000000000f, + -0.16406250000000000000f, -0.11718749999999999000f, + -0.04687500000000000000f, 0.06640625000000000000f, + 0.12890625000000000000f, 0.19921875000000000000f, + 0.27343750000000000000f, 0.32421875000000006000f, + 0.38281250000000000000f, 0.42968750000000000000f, + -0.42578124999999994000f, -0.40625000000000006000f, + -0.35937500000000000000f, -0.31250000000000000000f, + -0.26171875000000000000f, -0.21875000000000000000f, + -0.16015625000000000000f, -0.10937500000000000000f, + -0.05078125000000000700f, 0.00000000000000000000f, + 0.05468750000000000000f, 0.10937500000000000000f, + 0.16796875000000000000f, 0.23437499999999997000f, + 0.33203125000000000000f, 0.40625000000000006000f, + -0.43750000000000000000f, -0.41796875000000000000f, + -0.37109375000000000000f, -0.32031250000000000000f, + -0.27734375000000000000f, -0.22265625000000000000f, + -0.17578125000000000000f, -0.10156250000000001000f, + -0.04296874999999999300f, 0.00390625000000000000f, + 0.10546875000000000000f, 0.16015625000000000000f, + 0.20703125000000000000f, 0.25781250000000000000f, + 0.32812500000000000000f, 0.40625000000000006000f, + -0.44921875000000006000f, -0.43359375000000000000f, + -0.38671875000000006000f, -0.35937500000000000000f, + -0.24609375000000000000f, -0.20312500000000003000f, + -0.15234375000000000000f, -0.09375000000000000000f, + -0.05078125000000000700f, 0.01953125000000000000f, + 0.10546875000000000000f, 0.16406250000000000000f, + 0.23437499999999997000f, 0.30468750000000000000f, + 0.36328124999999994000f, 0.42578124999999994000f, + -0.43750000000000000000f, -0.42187500000000000000f, + -0.37500000000000000000f, -0.34765625000000000000f, + -0.30078125000000000000f, -0.19921875000000000000f, + -0.16015625000000000000f, -0.08593749999999998600f, + -0.04296874999999999300f, 0.05078125000000000700f, + 0.12109375000000000000f, 0.17187499999999997000f, + 0.22265625000000000000f, 0.28125000000000000000f, + 0.33984375000000000000f, 0.41015625000000000000f, + -0.43359375000000000000f, -0.41796875000000000000f, + -0.37109375000000000000f, -0.33984375000000000000f, + -0.30078125000000000000f, -0.19140625000000000000f, + -0.14843750000000000000f, -0.09375000000000000000f, + -0.03906250000000000000f, 0.00000000000000000000f, + 0.05859374999999999300f, 0.11718749999999999000f, + 0.21093750000000000000f, 0.29296875000000000000f, + 0.36328124999999994000f, 0.41796875000000000000f, + -0.41796875000000000000f, -0.40234375000000000000f, + -0.36328124999999994000f, -0.28906250000000000000f, + -0.20312500000000003000f, -0.17187499999999997000f, + -0.12109375000000000000f, -0.06250000000000000000f, + -0.01171875000000000000f, 0.03906250000000000000f, + 0.12890625000000000000f, 0.17578125000000000000f, + 0.22656250000000000000f, 0.27734375000000000000f, + 0.33203125000000000000f, 0.38281250000000000000f, + -0.44921875000000006000f, -0.43359375000000000000f, + -0.38281250000000000000f, -0.28125000000000000000f, + -0.23437499999999997000f, -0.19140625000000000000f, + -0.13671875000000000000f, -0.09375000000000000000f, + 0.00390625000000000000f, 0.04296874999999999300f, + 0.09765625000000000000f, 0.14843750000000000000f, + 0.21875000000000000000f, 0.31640625000000000000f, + 0.38281250000000000000f, 0.43750000000000000000f, + -0.45312500000000000000f, -0.43750000000000000000f, + -0.39843750000000000000f, -0.27343750000000000000f, + -0.23046875000000000000f, -0.19140625000000000000f, + -0.14062500000000000000f, -0.09765625000000000000f, + -0.02734375000000000000f, 0.01953125000000000000f, + 0.06640625000000000000f, 0.11718749999999999000f, + 0.18750000000000000000f, 0.25781250000000000000f, + 0.33984375000000000000f, 0.40234375000000000000f, + -0.44140625000000000000f, -0.42578124999999994000f, + -0.36718750000000000000f, -0.33593750000000000000f, + -0.29296875000000000000f, -0.25000000000000000000f, + -0.20312500000000003000f, -0.09375000000000000000f, + -0.05468750000000000000f, 0.02343750000000000000f, + 0.08984375000000000000f, 0.16796875000000000000f, + 0.23828125000000000000f, 0.30078125000000000000f, + 0.35937500000000000000f, 0.42187500000000000000f, + -0.46093750000000000000f, -0.43750000000000000000f, + -0.39062500000000000000f, -0.35156250000000000000f, + -0.25390625000000000000f, -0.20703125000000000000f, + -0.15234375000000000000f, -0.08593749999999998600f, + 0.02343750000000000000f, 0.07031250000000000000f, + 0.12500000000000000000f, 0.19140625000000000000f, + 0.26171875000000000000f, 0.31640625000000000000f, + 0.37890625000000000000f, 0.42578124999999994000f, + -0.45312500000000000000f, -0.42578124999999994000f, + -0.38671875000000006000f, -0.31250000000000000000f, + -0.26953125000000000000f, -0.21484375000000000000f, + -0.16015625000000000000f, -0.10546875000000000000f, + -0.04296874999999999300f, 0.01171875000000000000f, + 0.08984375000000000000f, 0.15625000000000000000f, + 0.23828125000000000000f, 0.31250000000000000000f, + 0.39453125000000000000f, 0.44140625000000000000f, + -0.42968750000000000000f, -0.41406250000000000000f, + -0.35937500000000000000f, -0.32812500000000000000f, + -0.28515625000000000000f, -0.16406250000000000000f, + -0.12109375000000000000f, -0.06640625000000000000f, + -0.00390625000000000000f, 0.03906250000000000000f, + 0.10156250000000001000f, 0.14453125000000000000f, + 0.19921875000000000000f, 0.29687500000000000000f, + 0.38671875000000006000f, 0.44140625000000000000f, + -0.45312500000000000000f, -0.42968750000000000000f, + -0.36328124999999994000f, -0.29296875000000000000f, + -0.22265625000000000000f, -0.16015625000000000000f, + -0.08203125000000000000f, -0.02343750000000000000f, + 0.03906250000000000000f, 0.09765625000000000000f, + 0.15625000000000000000f, 0.21093750000000000000f, + 0.26562500000000000000f, 0.32031250000000000000f, + 0.37500000000000000000f, 0.42968750000000000000f, + -0.45312500000000000000f, -0.43359375000000000000f, + -0.39062500000000000000f, -0.35937500000000000000f, + -0.31640625000000000000f, -0.17968750000000000000f, + -0.12500000000000000000f, -0.07421875000000000000f, + -0.01953125000000000000f, 0.02734375000000000000f, + 0.09765625000000000000f, 0.16406250000000000000f, + 0.22656250000000000000f, 0.28906250000000000000f, + 0.35937500000000000000f, 0.41796875000000000000f, + -0.43750000000000000000f, -0.42578124999999994000f, + -0.33593750000000000000f, -0.30468750000000000000f, + -0.26562500000000000000f, -0.21875000000000000000f, + -0.17578125000000000000f, -0.08593749999999998600f, + -0.05078125000000000700f, -0.00390625000000000000f, + 0.05078125000000000700f, 0.12500000000000000000f, + 0.22656250000000000000f, 0.30468750000000000000f, + 0.35546875000000000000f, 0.41796875000000000000f, + -0.42187500000000000000f, -0.40625000000000006000f, + -0.34765625000000000000f, -0.29687500000000000000f, + -0.25781250000000000000f, -0.20312500000000003000f, + -0.14843750000000000000f, -0.10156250000000001000f, + -0.02734375000000000000f, 0.01562500000000000000f, + 0.07031250000000000000f, 0.11718749999999999000f, + 0.16796875000000000000f, 0.28906250000000000000f, + 0.38281250000000000000f, 0.43750000000000000000f, + -0.44531250000000000000f, -0.42968750000000000000f, + -0.32031250000000000000f, -0.28125000000000000000f, + -0.23828125000000000000f, -0.19531250000000000000f, + -0.14453125000000000000f, -0.07812500000000000000f, + -0.04296874999999999300f, 0.00390625000000000000f, + 0.06640625000000000000f, 0.17968750000000000000f, + 0.24218750000000000000f, 0.30468750000000000000f, + 0.36328124999999994000f, 0.43750000000000000000f, + -0.43750000000000000000f, -0.42187500000000000000f, + -0.38671875000000006000f, -0.30078125000000000000f, + -0.25781250000000000000f, -0.22656250000000000000f, + -0.12890625000000000000f, -0.08593749999999998600f, + -0.04296874999999999300f, 0.05078125000000000700f, + 0.09765625000000000000f, 0.13671875000000000000f, + 0.18359375000000000000f, 0.25000000000000000000f, + 0.33984375000000000000f, 0.42187500000000000000f, + -0.44140625000000000000f, -0.42578124999999994000f, + -0.37500000000000000000f, -0.27343750000000000000f, + -0.23046875000000000000f, -0.19140625000000000000f, + -0.13671875000000000000f, -0.09375000000000000000f, + -0.02343750000000000000f, 0.02734375000000000000f, + 0.07421875000000000000f, 0.13281250000000000000f, + 0.25390625000000000000f, 0.30859375000000000000f, + 0.36718750000000000000f, 0.41406250000000000000f, + -0.44921875000000006000f, -0.43359375000000000000f, + -0.37500000000000000000f, -0.33203125000000000000f, + -0.28125000000000000000f, -0.23046875000000000000f, + -0.18359375000000000000f, -0.12890625000000000000f, + -0.07812500000000000000f, -0.03125000000000000000f, + 0.03125000000000000000f, 0.13671875000000000000f, + 0.21875000000000000000f, 0.28906250000000000000f, + 0.35937500000000000000f, 0.42968750000000000000f, + -0.43359375000000000000f, -0.42187500000000000000f, + -0.35937500000000000000f, -0.25390625000000000000f, + -0.21093750000000000000f, -0.17578125000000000000f, + -0.12109375000000000000f, -0.07812500000000000000f, + -0.00781250000000000000f, 0.04296874999999999300f, + 0.08984375000000000000f, 0.13281250000000000000f, + 0.18359375000000000000f, 0.24609375000000000000f, + 0.37500000000000000000f, 0.44531250000000000000f, + -0.44140625000000000000f, -0.42187500000000000000f, + -0.38281250000000000000f, -0.33984375000000000000f, + -0.30859375000000000000f, -0.26562500000000000000f, + -0.12500000000000000000f, -0.07421875000000000000f, + -0.01953125000000000000f, 0.04687500000000000000f, + 0.09765625000000000000f, 0.16015625000000000000f, + 0.23437499999999997000f, 0.30078125000000000000f, + 0.37500000000000000000f, 0.42578124999999994000f, + -0.44921875000000006000f, -0.42578124999999994000f, + -0.37500000000000000000f, -0.32031250000000000000f, + -0.22656250000000000000f, -0.18750000000000000000f, + -0.13281250000000000000f, -0.06640625000000000000f, + -0.01562500000000000000f, 0.03515625000000000000f, + 0.14062500000000000000f, 0.19531250000000000000f, + 0.25390625000000000000f, 0.30859375000000000000f, + 0.37890625000000000000f, 0.42578124999999994000f, + -0.44921875000000006000f, -0.42968750000000000000f, + -0.39062500000000000000f, -0.34374999999999994000f, + -0.21875000000000000000f, -0.17578125000000000000f, + -0.13281250000000000000f, -0.08203125000000000000f, + -0.02734375000000000000f, 0.02734375000000000000f, + 0.09375000000000000000f, 0.14453125000000000000f, + 0.19531250000000000000f, 0.25000000000000000000f, + 0.33593750000000000000f, 0.41796875000000000000f, + -0.40625000000000006000f, -0.38281250000000000000f, + -0.34374999999999994000f, -0.30078125000000000000f, + -0.23437499999999997000f, -0.19921875000000000000f, + -0.14453125000000000000f, -0.07031250000000000000f, + -0.01171875000000000000f, 0.03125000000000000000f, + 0.09765625000000000000f, 0.15625000000000000000f, + 0.20703125000000000000f, 0.26562500000000000000f, + 0.35546875000000000000f, 0.41796875000000000000f, + -0.46093750000000000000f, -0.44140625000000000000f, + -0.37890625000000000000f, -0.33203125000000000000f, + -0.28906250000000000000f, -0.24218750000000000000f, + -0.19921875000000000000f, -0.15625000000000000000f, + -0.09765625000000000000f, 0.01562500000000000000f, + 0.09375000000000000000f, 0.15625000000000000000f, + 0.22265625000000000000f, 0.29296875000000000000f, + 0.35937500000000000000f, 0.42578124999999994000f, + -0.41796875000000000000f, -0.40234375000000000000f, + -0.35937500000000000000f, -0.32421875000000006000f, + -0.28906250000000000000f, -0.24218750000000000000f, + -0.10937500000000000000f, -0.07031250000000000000f, + -0.01562500000000000000f, 0.03515625000000000000f, + 0.08593749999999998600f, 0.13281250000000000000f, + 0.19531250000000000000f, 0.26171875000000000000f, + 0.33984375000000000000f, 0.41796875000000000000f, + -0.45312500000000000000f, -0.43750000000000000000f, + -0.29296875000000000000f, -0.26171875000000000000f, + -0.21875000000000000000f, -0.17578125000000000000f, + -0.12109375000000000000f, -0.06250000000000000000f, + -0.01953125000000000000f, 0.03906250000000000000f, + 0.11718749999999999000f, 0.17578125000000000000f, + 0.24609375000000000000f, 0.30859375000000000000f, + 0.37500000000000000000f, 0.43359375000000000000f, + -0.41406250000000000000f, -0.39843750000000000000f, + -0.34374999999999994000f, -0.30078125000000000000f, + -0.26562500000000000000f, -0.20312500000000003000f, + -0.14843750000000000000f, -0.09765625000000000000f, + -0.01562500000000000000f, 0.02734375000000000000f, + 0.08984375000000000000f, 0.14062500000000000000f, + 0.25781250000000000000f, 0.32812500000000000000f, + 0.38281250000000000000f, 0.43359375000000000000f, + -0.40234375000000000000f, -0.38671875000000006000f, + -0.33984375000000000000f, -0.29687500000000000000f, + -0.25781250000000000000f, -0.21875000000000000000f, + -0.11328125000000000000f, -0.05078125000000000700f, + 0.00000000000000000000f, 0.05468750000000000000f, + 0.12109375000000000000f, 0.16406250000000000000f, + 0.22265625000000000000f, 0.27734375000000000000f, + 0.33203125000000000000f, 0.37500000000000000000f, + -0.44531250000000000000f, -0.43359375000000000000f, + -0.35546875000000000000f, -0.22656250000000000000f, + -0.18359375000000000000f, -0.14843750000000000000f, + -0.10156250000000001000f, -0.05468750000000000000f, + 0.01171875000000000000f, 0.05078125000000000700f, + 0.10156250000000001000f, 0.15625000000000000000f, + 0.24218750000000000000f, 0.31250000000000000000f, + 0.37500000000000000000f, 0.42968750000000000000f, + -0.44531250000000000000f, -0.42968750000000000000f, + -0.35156250000000000000f, -0.32421875000000006000f, + -0.28125000000000000000f, -0.25000000000000000000f, + -0.14062500000000000000f, -0.09375000000000000000f, + -0.05078125000000000700f, 0.02343750000000000000f, + 0.10937500000000000000f, 0.19140625000000000000f, + 0.25781250000000000000f, 0.31640625000000000000f, + 0.37890625000000000000f, 0.43750000000000000000f, + -0.42578124999999994000f, -0.41015625000000000000f, + -0.35546875000000000000f, -0.32031250000000000000f, + -0.27734375000000000000f, -0.19921875000000000000f, + -0.14843750000000000000f, -0.09375000000000000000f, + -0.03906250000000000000f, 0.00390625000000000000f, + 0.07812500000000000000f, 0.19140625000000000000f, + 0.25000000000000000000f, 0.30468750000000000000f, + 0.35546875000000000000f, 0.41406250000000000000f, + -0.43359375000000000000f, -0.41796875000000000000f, + -0.35156250000000000000f, -0.32031250000000000000f, + -0.27343750000000000000f, -0.23437499999999997000f, + -0.19140625000000000000f, -0.04687500000000000000f, + 0.00000000000000000000f, 0.04296874999999999300f, + 0.09765625000000000000f, 0.14453125000000000000f, + 0.23437499999999997000f, 0.32031250000000000000f, + 0.39453125000000000000f, 0.44531250000000000000f, + -0.43359375000000000000f, -0.41796875000000000000f, + -0.36328124999999994000f, -0.28125000000000000000f, + -0.16406250000000000000f, -0.11718749999999999000f, + -0.07812500000000000000f, -0.03125000000000000000f, + 0.01562500000000000000f, 0.06250000000000000000f, + 0.13281250000000000000f, 0.17968750000000000000f, + 0.22656250000000000000f, 0.27343750000000000000f, + 0.33203125000000000000f, 0.38281250000000000000f, + -0.43750000000000000000f, -0.42578124999999994000f, + -0.31250000000000000000f, -0.25390625000000000000f, + -0.21875000000000000000f, -0.17187499999999997000f, + -0.12890625000000000000f, -0.06640625000000000000f, + -0.01171875000000000000f, 0.03125000000000000000f, + 0.07812500000000000000f, 0.12109375000000000000f, + 0.19140625000000000000f, 0.30859375000000000000f, + 0.38281250000000000000f, 0.43750000000000000000f, + -0.40625000000000006000f, -0.38281250000000000000f, + -0.32812500000000000000f, -0.28125000000000000000f, + -0.23046875000000000000f, -0.17578125000000000000f, + -0.12109375000000000000f, -0.07031250000000000000f, + -0.00390625000000000000f, 0.04687500000000000000f, + 0.12109375000000000000f, 0.18359375000000000000f, + 0.25000000000000000000f, 0.31640625000000000000f, + 0.38281250000000000000f, 0.42968750000000000000f, + -0.42968750000000000000f, -0.41406250000000000000f, + -0.35937500000000000000f, -0.30859375000000000000f, + -0.27343750000000000000f, -0.23046875000000000000f, + -0.19140625000000000000f, -0.15234375000000000000f, + -0.00390625000000000000f, 0.04296874999999999300f, + 0.08593749999999998600f, 0.13671875000000000000f, + 0.20312500000000003000f, 0.26953125000000000000f, + 0.34765625000000000000f, 0.42578124999999994000f, + -0.44140625000000000000f, -0.42578124999999994000f, + -0.39453125000000000000f, -0.37109375000000000000f, + -0.21875000000000000000f, -0.17187499999999997000f, + -0.11328125000000000000f, -0.06250000000000000000f, + -0.00781250000000000000f, 0.07031250000000000000f, + 0.12890625000000000000f, 0.18750000000000000000f, + 0.24609375000000000000f, 0.30468750000000000000f, + 0.37109375000000000000f, 0.42968750000000000000f, + -0.42578124999999994000f, -0.41406250000000000000f, + -0.36718750000000000000f, -0.33984375000000000000f, + -0.28906250000000000000f, -0.16015625000000000000f, + -0.11328125000000000000f, -0.05468750000000000000f, + 0.00390625000000000000f, 0.05078125000000000700f, + 0.10937500000000000000f, 0.18359375000000000000f, + 0.26953125000000000000f, 0.32812500000000000000f, + 0.38671875000000006000f, 0.43359375000000000000f, + -0.44921875000000006000f, -0.42968750000000000000f, + -0.39453125000000000000f, -0.32812500000000000000f, + -0.19531250000000000000f, -0.12500000000000000000f, + -0.08593749999999998600f, -0.04296874999999999300f, + 0.00390625000000000000f, 0.05078125000000000700f, + 0.11718749999999999000f, 0.17578125000000000000f, + 0.22656250000000000000f, 0.28125000000000000000f, + 0.34765625000000000000f, 0.41796875000000000000f, + -0.41406250000000000000f, -0.39843750000000000000f, + -0.34765625000000000000f, -0.29296875000000000000f, + -0.25000000000000000000f, -0.21484375000000000000f, + -0.17187499999999997000f, -0.13281250000000000000f, + -0.05078125000000000700f, 0.06250000000000000000f, + 0.12500000000000000000f, 0.16796875000000000000f, + 0.23046875000000000000f, 0.28515625000000000000f, + 0.33593750000000000000f, 0.39062500000000000000f, + -0.43359375000000000000f, -0.41796875000000000000f, + -0.36718750000000000000f, -0.27343750000000000000f, + -0.21484375000000000000f, -0.17968750000000000000f, + -0.12890625000000000000f, -0.08203125000000000000f, + -0.02734375000000000000f, 0.01953125000000000000f, + 0.07421875000000000000f, 0.12109375000000000000f, + 0.16796875000000000000f, 0.21484375000000000000f, + 0.27343750000000000000f, 0.40234375000000000000f, + -0.39843750000000000000f, -0.37890625000000000000f, + -0.31250000000000000000f, -0.27734375000000000000f, + -0.23437499999999997000f, -0.19140625000000000000f, + -0.14062500000000000000f, -0.09375000000000000000f, + -0.03125000000000000000f, 0.01562500000000000000f, + 0.07421875000000000000f, 0.12500000000000000000f, + 0.18750000000000000000f, 0.24609375000000000000f, + 0.30859375000000000000f, 0.39062500000000000000f, + -0.44140625000000000000f, -0.42578124999999994000f, + -0.35156250000000000000f, -0.29687500000000000000f, + -0.25781250000000000000f, -0.20703125000000000000f, + -0.16015625000000000000f, -0.11328125000000000000f, + -0.06250000000000000000f, -0.02734375000000000000f, + 0.01953125000000000000f, 0.05859374999999999300f, + 0.16406250000000000000f, 0.26953125000000000000f, + 0.34765625000000000000f, 0.42187500000000000000f, + -0.42187500000000000000f, -0.41015625000000000000f, + -0.36328124999999994000f, -0.33203125000000000000f, + -0.29687500000000000000f, -0.24218750000000000000f, + -0.08984375000000000000f, -0.03125000000000000000f, + 0.01562500000000000000f, 0.07031250000000000000f, + 0.12890625000000000000f, 0.17578125000000000000f, + 0.23437499999999997000f, 0.28906250000000000000f, + 0.35156250000000000000f, 0.41015625000000000000f, + -0.44531250000000000000f, -0.42968750000000000000f, + -0.34765625000000000000f, -0.23828125000000000000f, + -0.20312500000000003000f, -0.16406250000000000000f, + -0.11718749999999999000f, -0.07031250000000000000f, + -0.01562500000000000000f, 0.05078125000000000700f, + 0.10156250000000001000f, 0.15234375000000000000f, + 0.20703125000000000000f, 0.26171875000000000000f, + 0.31640625000000000000f, 0.37500000000000000000f, + -0.38671875000000006000f, -0.37109375000000000000f, + -0.33593750000000000000f, -0.30078125000000000000f, + -0.26953125000000000000f, -0.23437499999999997000f, + -0.12500000000000000000f, -0.05859374999999999300f, + -0.00781250000000000000f, 0.05859374999999999300f, + 0.13671875000000000000f, 0.18359375000000000000f, + 0.25000000000000000000f, 0.31250000000000000000f, + 0.37500000000000000000f, 0.42968750000000000000f, + -0.44921875000000006000f, -0.41015625000000000000f, + -0.31250000000000000000f, -0.23828125000000000000f, + -0.16796875000000000000f, -0.10546875000000000000f, + -0.05468750000000000000f, -0.00390625000000000000f, + 0.05078125000000000700f, 0.10156250000000001000f, + 0.15625000000000000000f, 0.20703125000000000000f, + 0.26171875000000000000f, 0.31250000000000000000f, + 0.37109375000000000000f, 0.42968750000000000000f, + -0.39062500000000000000f, -0.35546875000000000000f, + -0.28125000000000000000f, -0.23046875000000000000f, + -0.18750000000000000000f, -0.14843750000000000000f, + -0.09765625000000000000f, -0.05078125000000000700f, + 0.00390625000000000000f, 0.05859374999999999300f, + 0.10937500000000000000f, 0.15234375000000000000f, + 0.22656250000000000000f, 0.29296875000000000000f, + 0.35546875000000000000f, 0.41015625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + -0.01953125000000000000f, -0.01953125000000000000f, + -0.02734375000000000000f, -0.03125000000000000000f, + -0.01953125000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.02343750000000000000f, + -0.03125000000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + -0.02343750000000000000f, 0.01562500000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.03515625000000000000f, 0.02734375000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.00781250000000000000f, + -0.01953125000000000000f, -0.02343750000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.01562500000000000000f, -0.03125000000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + -0.01953125000000000000f, -0.02734375000000000000f, + -0.03515625000000000000f, 0.01562500000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + -0.00390625000000000000f, 0.03515625000000000000f, + 0.02734375000000000000f, 0.02343750000000000000f, + 0.01953125000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.01562500000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.03125000000000000000f, 0.03125000000000000000f, + 0.02343750000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.02343750000000000000f, + 0.02343750000000000000f, 0.02343750000000000000f, + 0.02734375000000000000f, 0.02343750000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.01562500000000000000f, + -0.02734375000000000000f, -0.03906250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01562500000000000000f, -0.01953125000000000000f, + 0.03125000000000000000f, 0.01953125000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01171875000000000000f, + -0.02343750000000000000f, -0.03906250000000000000f, + -0.03906250000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01953125000000000000f, + -0.03125000000000000000f, -0.03515625000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01171875000000000000f, + 0.03906250000000000000f, 0.03515625000000000000f, + 0.02734375000000000000f, 0.01562500000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + 0.03515625000000000000f, 0.02734375000000000000f, + 0.01562500000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + -0.01171875000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01953125000000000000f, + -0.02343750000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.01562500000000000000f, -0.01562500000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.01562500000000000000f, 0.01953125000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.01562500000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + 0.00000000000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, -0.01953125000000000000f, + -0.02734375000000000000f, 0.01953125000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + -0.02343750000000000000f, -0.02734375000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.02734375000000000000f, 0.01953125000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.01953125000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01953125000000000000f, + 0.01562500000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.01562500000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01562500000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.02343750000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.01562500000000000000f, -0.02343750000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01562500000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01562500000000000000f, 0.01562500000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.01171875000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.01562500000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + -0.01562500000000000000f, 0.01953125000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01953125000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.01562500000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.01562500000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.01562500000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.01562500000000000000f, + 0.00781250000000000000f, 0.01562500000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + 0.01171875000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.01171875000000000000f, 0.01562500000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, -0.01171875000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f }; const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB0_16_Stage_info_FLP[ NLSF_MSVQ_CB0_16_STAGES ] = { - { 128, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 0 ] }, - { 16, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 128 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 128 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 144 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 144 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 152 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 152 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 160 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 160 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 168 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 168 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 176 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 176 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 184 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 184 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 192 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 192 ] }, - { 16, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 200 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 200 ] } + { 64, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 0 ] }, + { 16, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 64 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 64 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 80 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 80 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 88 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 88 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 96 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 96 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 104 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 112 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 112 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 120 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 120 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 128 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 128 ] }, + { 16, &SKP_Silk_NLSF_MSVQ_CB0_16[ 16 * 136 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates[ 136 ] } }; const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB0_16_FLP = diff --git a/src_FLP/SKP_Silk_tables_NLSF_CB1_10_FLP.c b/src_FLP/SKP_Silk_tables_NLSF_CB1_10_FLP.c index 5cd706b480c24d4e1f74f27f74251fe99a20d554..38d6bca3fef2697cc22a99a108298a77b83a787d 100644 --- a/src_FLP/SKP_Silk_tables_NLSF_CB1_10_FLP.c +++ b/src_FLP/SKP_Silk_tables_NLSF_CB1_10_FLP.c @@ -28,7 +28,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /**********************************************/ /* This file has been automatically generated */ /* */ -/* ROM usage: 3.21 kB */ +/* ROM usage: 3.56 kB */ /**********************************************/ #include "SKP_Silk_tables_FLP.h" @@ -36,421 +36,465 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. const SKP_float SKP_Silk_NLSF_MSVQ_CB1_10_rates[ NLSF_MSVQ_CB1_10_VECTORS ] = { - 1.93750000000000000000f, 3.21875000000000000000f, - 3.75000000000000000000f, 3.96875000000000000000f, - 4.21875000000000000000f, 4.21875000000000000000f, - 4.84375000000000000000f, 5.21875000000000000000f, - 5.25000000000000000000f, 5.37500000000000000000f, - 5.40625000000000000000f, 5.50000000000000000000f, - 5.59375000000000000000f, 5.65625000000000000000f, - 5.65625000000000000000f, 5.78125000000000000000f, - 5.81250000000000000000f, 6.18750000000000000000f, - 6.21875000000000000000f, 6.34375000000000000000f, - 6.40625000000000000000f, 6.93750000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 1.68750000000000000000f, 2.37500000000000000000f, - 3.15625000000000000000f, 3.37500000000000000000f, - 3.71875000000000000000f, 3.75000000000000000000f, - 3.84375000000000000000f, 3.90625000000000000000f, - 2.12500000000000000000f, 2.65625000000000000000f, - 2.71875000000000000000f, 3.21875000000000000000f, - 3.34375000000000000000f, 3.50000000000000000000f, - 3.59375000000000000000f, 3.62500000000000000000f, - 2.43750000000000000000f, 2.65625000000000000000f, - 2.65625000000000000000f, 3.15625000000000000000f, - 3.28125000000000000000f, 3.28125000000000000000f, - 3.43750000000000000000f, 3.46875000000000000000f, - 2.59375000000000000000f, 2.84375000000000000000f, - 3.03125000000000000000f, 3.03125000000000000000f, - 3.03125000000000000000f, 3.12500000000000000000f, - 3.15625000000000000000f, 3.28125000000000000000f, - 2.87500000000000000000f, 2.90625000000000000000f, - 2.90625000000000000000f, 2.96875000000000000000f, - 3.00000000000000000000f, 3.06250000000000000000f, - 3.09375000000000000000f, 3.21875000000000000000f + 1.62500000000000000000f, 3.18750000000000000000f, + 3.43750000000000000000f, 4.00000000000000000000f, + 4.75000000000000000000f, 4.81250000000000000000f, + 5.00000000000000000000f, 5.31250000000000000000f, + 5.43750000000000000000f, 5.62500000000000000000f, + 5.68750000000000000000f, 5.75000000000000000000f, + 5.75000000000000000000f, 6.12500000000000000000f, + 6.18750000000000000000f, 6.31250000000000000000f, + 6.37500000000000000000f, 6.43750000000000000000f, + 6.43750000000000000000f, 6.50000000000000000000f, + 6.56250000000000000000f, 6.75000000000000000000f, + 6.93750000000000000000f, 7.06250000000000000000f, + 7.06250000000000000000f, 7.06250000000000000000f, + 7.06250000000000000000f, 7.06250000000000000000f, + 7.06250000000000000000f, 7.06250000000000000000f, + 7.06250000000000000000f, 7.06250000000000000000f, + 0.93750000000000000000f, 2.87500000000000000000f, + 3.68750000000000000000f, 4.00000000000000000000f, + 4.25000000000000000000f, 4.25000000000000000000f, + 4.25000000000000000000f, 4.37500000000000000000f, + 1.12500000000000000000f, 2.62500000000000000000f, + 3.50000000000000000000f, 3.93750000000000000000f, + 4.00000000000000000000f, 4.18750000000000000000f, + 4.25000000000000000000f, 4.25000000000000000000f, + 1.06250000000000000000f, 3.18750000000000000000f, + 3.62500000000000000000f, 3.75000000000000000000f, + 3.87500000000000000000f, 3.93750000000000000000f, + 3.93750000000000000000f, 4.25000000000000000000f, + 2.18750000000000000000f, 2.56250000000000000000f, + 2.75000000000000000000f, 2.87500000000000000000f, + 2.93750000000000000000f, 3.56250000000000000000f, + 4.06250000000000000000f, 4.31250000000000000000f, + 1.31250000000000000000f, 2.75000000000000000000f, + 2.93750000000000000000f, 3.62500000000000000000f, + 3.93750000000000000000f, 4.00000000000000000000f, + 4.12500000000000000000f, 4.12500000000000000000f, + 1.68750000000000000000f, 2.50000000000000000000f, + 3.25000000000000000000f, 3.37500000000000000000f, + 3.37500000000000000000f, 3.43750000000000000000f, + 3.56250000000000000000f, 4.31250000000000000000f }; const SKP_float SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min[ 10 + 1 ] = { - 0.01409912109375000000f, + 0.00894165039062500000f, + 0.00097656250000000000f, + 0.00686645507812500000f, + 0.00854492187500000000f, + 0.00466918945312500000f, + 0.00070190429687500000f, + 0.00039672851562500005f, + 0.00042724609375000000f, + 0.00027465820312500000f, 0.00009155273437500000f, - 0.00195312500000000000f, - 0.00225830078125000000f, - 0.00299072265625000000f, - 0.00152587890625000000f, - 0.00296020507812500000f, - 0.00207519531250000000f, - 0.00366210937499999960f, - 0.00161743164062500000f, - 0.01950073242187500000f + 0.02099609375000000000f }; const SKP_float SKP_Silk_NLSF_MSVQ_CB1_10[ 10 * NLSF_MSVQ_CB1_10_VECTORS ] = { - 0.05728149414062500000f, 0.14178466796875000000f, - 0.23535156250000003000f, 0.32791137695312500000f, - 0.42614746093750000000f, 0.51965332031250000000f, - 0.61764526367187500000f, 0.70745849609375000000f, - 0.80783081054687511000f, 0.89376831054687500000f, - 0.04919433593750000000f, 0.10003662109375001000f, - 0.21624755859374997000f, 0.30441284179687500000f, - 0.40368652343750000000f, 0.49633789062499994000f, - 0.59802246093750000000f, 0.69244384765625011000f, - 0.79458618164062500000f, 0.88394165039062500000f, - 0.06619262695312500000f, 0.11688232421875000000f, - 0.19714355468750000000f, 0.27337646484375000000f, - 0.36499023437500000000f, 0.45013427734375000000f, - 0.56176757812500000000f, 0.66098022460937500000f, - 0.76348876953125000000f, 0.85580444335937489000f, - 0.11230468750000001000f, 0.18383789062500000000f, - 0.27423095703125000000f, 0.37402343749999994000f, - 0.46389770507812494000f, 0.55505371093750000000f, - 0.66348266601562500000f, 0.74645996093750000000f, - 0.83874511718749989000f, 0.91732788085937500000f, - 0.07885742187500000000f, 0.15829467773437500000f, - 0.23800659179687500000f, 0.33270263671874994000f, - 0.40219116210937500000f, 0.48110961914062500000f, - 0.58035278320312500000f, 0.68453979492187500000f, - 0.79013061523437500000f, 0.87579345703125000000f, - 0.11386108398437500000f, 0.17550659179687500000f, - 0.26397705078125000000f, 0.35833740234375000000f, - 0.46051025390625000000f, 0.53121948242187500000f, - 0.62228393554687500000f, 0.71475219726562500000f, - 0.80041503906250000000f, 0.89254760742187511000f, - 0.06430053710937500000f, 0.19296264648437500000f, - 0.27206420898437500000f, 0.37310791015625000000f, - 0.45089721679687500000f, 0.54293823242187500000f, - 0.63061523437500000000f, 0.72262573242187500000f, - 0.81875610351562500000f, 0.89578247070312500000f, - 0.05117797851562500000f, 0.08758544921875000000f, - 0.16436767578125000000f, 0.24649047851562500000f, - 0.36062622070312500000f, 0.46313476562500000000f, - 0.56936645507812500000f, 0.67156982421875011000f, - 0.77859497070312500000f, 0.87551879882812500000f, - 0.06442260742187500000f, 0.11062622070312501000f, - 0.21444702148437500000f, 0.32312011718750000000f, - 0.42904663085937500000f, 0.52468872070312500000f, - 0.64505004882812489000f, 0.74035644531250000000f, - 0.84158325195312500000f, 0.91662597656250011000f, - 0.07409667968750000000f, 0.12237548828125000000f, - 0.17593383789062500000f, 0.28613281250000000000f, - 0.42129516601562500000f, 0.48281860351562500000f, - 0.59338378906250000000f, 0.68325805664062511000f, - 0.77194213867187500000f, 0.89447021484375000000f, - 0.06884765625000000000f, 0.14123535156250000000f, - 0.25564575195312500000f, 0.37966918945312500000f, - 0.46640014648437500000f, 0.59393310546875000000f, - 0.67922973632812500000f, 0.77975463867187489000f, - 0.86767578124999989000f, 0.92480468750000000000f, - 0.07177734375000000000f, 0.11215209960937499000f, - 0.18704223632812500000f, 0.36218261718750000000f, - 0.44406127929687494000f, 0.50827026367187500000f, - 0.59887695312500000000f, 0.66781616210937500000f, - 0.80950927734375000000f, 0.88040161132812500000f, - 0.16000366210937500000f, 0.22119140625000000000f, - 0.32220458984375000000f, 0.40493774414062500000f, - 0.47763061523437506000f, 0.54684448242187500000f, - 0.64517211914062500000f, 0.72714233398437500000f, - 0.82708740234375000000f, 0.90084838867187489000f, - 0.13494873046875000000f, 0.20523071289062500000f, - 0.31887817382812500000f, 0.40505981445312500000f, - 0.49206542968750000000f, 0.60794067382812500000f, - 0.69659423828124989000f, 0.79531860351562500000f, - 0.87777709960937500000f, 0.93331909179687500000f, - 0.13757324218750000000f, 0.19198608398437500000f, - 0.29003906250000000000f, 0.36038208007812506000f, - 0.42196655273437500000f, 0.48675537109375000000f, - 0.58218383789062500000f, 0.67395019531250000000f, - 0.78552246093750000000f, 0.87457275390625000000f, - 0.07751464843750000000f, 0.13113403320312500000f, - 0.26181030273437500000f, 0.41436767578125000000f, - 0.50762939453125000000f, 0.58291625976562500000f, - 0.65756225585937500000f, 0.72897338867187500000f, - 0.81716918945312489000f, 0.88946533203125000000f, - 0.10305786132812501000f, 0.19403076171875003000f, - 0.31201171875000000000f, 0.44305419921875000000f, - 0.54641723632812500000f, 0.64257812500000000000f, - 0.72134399414062500000f, 0.78686523437500011000f, - 0.85940551757812500000f, 0.91885375976562500000f, - 0.12747192382812500000f, 0.18133544921875000000f, - 0.24899291992187497000f, 0.30847167968750000000f, - 0.37017822265625000000f, 0.47210693359375000000f, - 0.61618041992187500000f, 0.71185302734375000000f, - 0.81732177734375000000f, 0.89596557617187500000f, - 0.07604980468750000000f, 0.11599731445312501000f, - 0.18750000000000000000f, 0.29983520507812500000f, - 0.48828124999999994000f, 0.56979370117187500000f, - 0.63760375976562489000f, 0.72213745117187500000f, - 0.79037475585937500000f, 0.88421630859374989000f, - 0.09188842773437500000f, 0.14425659179687500000f, - 0.20855712890625000000f, 0.32058715820312500000f, - 0.38040161132812500000f, 0.44238281250000000000f, - 0.52078247070312500000f, 0.61193847656250000000f, - 0.77102661132812500000f, 0.85623168945312500000f, - 0.12661743164062500000f, 0.21963500976562500000f, - 0.37652587890625000000f, 0.46008300781249994000f, - 0.54937744140625000000f, 0.61614990234375000000f, - 0.67709350585937500000f, 0.75448608398437500000f, - 0.82650756835937500000f, 0.88882446289062511000f, - 0.09078979492187500000f, 0.13970947265625000000f, - 0.19677734375000000000f, 0.25567626953125000000f, - 0.29513549804687500000f, 0.40359497070312500000f, - 0.59515380859375000000f, 0.67984008789062500000f, - 0.79522705078125000000f, 0.88043212890625000000f, - 0.12518310546875000000f, 0.17578125000000000000f, - 0.23632812500000000000f, 0.28942871093750000000f, - 0.32788085937500000000f, 0.37561035156250000000f, - 0.44790649414062500000f, 0.59835815429687500000f, - 0.75808715820312500000f, 0.86611938476562489000f, - 0.15048217773437500000f, 0.28341674804687500000f, - 0.38076782226562500000f, 0.40878295898437500000f, - 0.41845703125000000000f, 0.43795776367187506000f, - 0.48974609375000000000f, 0.60629272460937500000f, - 0.73815917968750000000f, 0.88482666015624989000f, - 0.12637329101562500000f, 0.24008178710937500000f, - 0.40100097656250000000f, 0.54077148437500000000f, - 0.61230468750000000000f, 0.64416503906250000000f, - 0.66198730468750000000f, 0.69342041015625000000f, - 0.72436523437500000000f, 0.83767700195312500000f, - 0.12240600585937499000f, 0.26611328125000000000f, - 0.40386962890625006000f, 0.49456787109375006000f, - 0.53713989257812500000f, 0.55813598632812500000f, - 0.56530761718750000000f, 0.60086059570312500000f, - 0.70904541015625000000f, 0.85089111328125000000f, - 0.10437011718750000000f, 0.18295288085937500000f, - 0.34271240234375006000f, 0.46133422851562500000f, - 0.48544311523437500000f, 0.51217651367187500000f, - 0.54205322265625000000f, 0.71249389648437500000f, - 0.82086181640625000000f, 0.91387939453125000000f, - 0.09399414062500001400f, 0.20709228515625000000f, - 0.31936645507812506000f, 0.41735839843750000000f, - 0.55111694335937500000f, 0.72067260742187489000f, - 0.82574462890624989000f, 0.88751220703124989000f, - 0.90219116210937500000f, 0.91262817382812500000f, - 0.09271240234375000000f, 0.17150878906250003000f, - 0.28277587890625000000f, 0.39276123046875000000f, - 0.57382202148437500000f, 0.59844970703125000000f, - 0.61065673828125000000f, 0.63482666015625000000f, - 0.72882080078125011000f, 0.89434814453125000000f, - 0.10113525390625000000f, 0.19592285156250000000f, - 0.27606201171875000000f, 0.40472412109375000000f, - 0.48428344726562500000f, 0.70547485351562500000f, - 0.72225952148437500000f, 0.73898315429687500000f, - 0.74728393554687500000f, 0.79086303710937500000f, - 0.10586547851562500000f, 0.21249389648437500000f, - 0.30831909179687500000f, 0.46636962890625006000f, - 0.62655639648437500000f, 0.70922851562500000000f, - 0.76367187500000000000f, 0.79409790039062500000f, - 0.81591796875000000000f, 0.83175659179687500000f, - 0.09280395507812500000f, 0.19711303710937500000f, - 0.29837036132812500000f, 0.39355468750000000000f, - 0.49789428710937500000f, 0.59234619140625000000f, - 0.73455810546875000000f, 0.89578247070312500000f, - 0.97030639648437500000f, 0.97885131835937500000f, - -0.00610351562500000000f, -0.00408935546875000000f, - -0.00344848632812500000f, -0.00622558593750000000f, - -0.01058959960937500000f, -0.01342773437500000000f, - -0.01074218749999999800f, -0.00643920898437500000f, - -0.01275634765625000200f, -0.00524902343750000000f, - -0.00955200195312500000f, 0.00180053710937500000f, - 0.01510620117187500000f, 0.02355957031250000000f, - 0.02200317382812500000f, 0.01873779296875000000f, - 0.01019287109375000000f, 0.01354980468750000000f, - 0.00686645507812500000f, 0.00738525390625000000f, - 0.00491333007812500000f, 0.00048828125000000000f, - 0.00836181640625000000f, 0.01721191406250000000f, - -0.00222778320312500000f, -0.00573730468750000000f, - -0.01205444335937500000f, -0.00521850585937500000f, - 0.02371215820312499700f, 0.01550292968750000000f, - 0.04089355468750000000f, 0.03494262695312500000f, - 0.02133178710937500000f, 0.00598144531250000000f, - 0.00680541992187500000f, 0.00527954101562500000f, - 0.00274658203125000000f, 0.00076293945312500000f, - -0.00079345703125000011f, 0.00054931640625000000f, - 0.00405883789062500000f, -0.00320434570312500000f, - -0.01098632812500000000f, -0.00845336914062500000f, - 0.02621459960937500000f, 0.01934814453125000000f, - 0.00125122070312500000f, -0.01699829101562500000f, - -0.02343750000000000000f, -0.02825927734375000000f, - -0.01834106445312500000f, -0.03115844726562500000f, - -0.03628540039062500000f, -0.01113891601562500000f, - 0.00686645507812500000f, 0.00326538085937500000f, - 0.01141357421875000200f, -0.00152587890625000000f, - 0.01321411132812500000f, 0.01272583007812500000f, - 0.00476074218750000000f, 0.00119018554687500000f, - -0.01821899414062500000f, -0.04263305664062499300f, - -0.04864501953125000000f, -0.01806640625000000000f, - -0.01480102539062500000f, -0.00891113281250000000f, - 0.00772094726562500000f, 0.00265502929687500000f, - -0.00000000000000000000f, -0.00018310546875000000f, - -0.00076293945312500000f, -0.01052856445312500000f, - -0.00732421874999999910f, 0.00366210937499999960f, - 0.03848266601562500000f, 0.02886962890625000000f, - 0.00506591796875000090f, -0.00845336914062500000f, - 0.00735473632812500090f, 0.00509643554687500000f, - 0.00518798828125000000f, 0.01309204101562500000f, - 0.01580810546875000000f, 0.02178955078125000000f, - 0.01837158203125000000f, 0.00775146484375000000f, - 0.00408935546875000000f, 0.00280761718750000000f, - -0.00463867187500000000f, -0.00988769531250000000f, - -0.01202392578124999800f, 0.00149536132812500000f, - -0.00460815429687500000f, -0.00927734375000000000f, - -0.02209472656250000000f, -0.02005004882812500000f, - -0.00494384765625000000f, -0.01126098632812500000f, - -0.00106811523437500000f, 0.00009155273437500000f, - -0.00006103515625000000f, -0.00952148437500000000f, - -0.00610351562500000000f, -0.00280761718750000000f, - -0.00692749023437500000f, 0.00738525390625000000f, - 0.01916503906250000000f, 0.01724243164062500000f, - -0.00378417968750000000f, 0.03222656250000000000f, - 0.02349853515625000300f, 0.00308227539062500000f, - -0.00256347656250000000f, -0.00100708007812500000f, - 0.00012207031250000000f, -0.00585937500000000000f, - -0.00830078125000000000f, 0.00015258789062500000f, - -0.01913452148437500000f, -0.02981567382812500000f, - 0.01278686523437500000f, 0.01440429687500000000f, - 0.00161743164062500000f, -0.00314331054687500000f, - 0.00442504882812500000f, 0.00982666015625000000f, - -0.00289916992187500000f, -0.00094604492187500000f, - -0.00305175781250000000f, -0.00924682617187500000f, - -0.01708984375000000000f, -0.03256225585937500000f, - -0.01260375976562500000f, 0.02178955078125000000f, - 0.00863647460937500000f, 0.00006103515625000000f, - -0.00680541992187500000f, -0.01119995117187500000f, - 0.01596069335937500000f, 0.01098632812500000000f, - -0.00115966796875000000f, -0.00350952148437500040f, - 0.01153564453125000000f, -0.01803588867187500000f, - -0.02191162109375000000f, 0.01367187500000000000f, - -0.01467895507812500000f, -0.00836181640625000000f, - 0.00549316406250000000f, -0.00268554687499999960f, - -0.01773071289062500000f, -0.00479125976562500000f, - -0.02124023437500000000f, -0.03860473632812500000f, - 0.01202392578124999800f, -0.01461791992187500000f, - -0.00070190429687500000f, 0.00378417968750000000f, - -0.00131225585937500000f, 0.00057983398437500000f, - -0.00344848632812500000f, -0.00720214843750000000f, - -0.01257324218750000000f, -0.02011108398437500000f, - -0.00610351562500000000f, 0.00006103515625000000f, - -0.00210571289062500000f, -0.01043701171875000000f, - 0.00607299804687500000f, 0.00167846679687500000f, - 0.00177001953125000000f, -0.00109863281250000000f, - -0.00155639648437500000f, -0.00189208984375000000f, - 0.01547241210937500000f, 0.01547241210937500000f, - 0.01303100585937500200f, 0.01348876953125000000f, - 0.00109863281250000000f, 0.01834106445312500000f, - -0.00430297851562500000f, 0.00207519531250000000f, - 0.00836181640625000000f, 0.00836181640625000000f, - 0.00207519531250000000f, -0.00036621093750000000f, - -0.00012207031250000000f, 0.00216674804687500000f, - -0.00588989257812500000f, -0.01416015625000000000f, - -0.01296997070312499800f, -0.01168823242187499800f, - 0.01245117187500000000f, 0.00619506835937500000f, - -0.01028442382812500000f, 0.00720214843750000000f, - 0.01251220703125000000f, -0.00180053710937500000f, - -0.00076293945312500000f, -0.01040649414062499800f, - -0.01370239257812500200f, 0.00085449218750000000f, - -0.00027465820312500000f, 0.00274658203125000000f, - 0.01013183593750000200f, -0.00042724609375000000f, - -0.02761840820312499700f, 0.00292968750000000000f, - -0.01647949218750000000f, -0.00738525390625000000f, - 0.02072143554687500000f, -0.00180053710937500000f, - 0.00585937500000000000f, -0.00073242187500000000f, - 0.00183105468749999980f, -0.00662231445312500000f, - 0.00015258789062500000f, -0.00112915039062500000f, - 0.00546264648437500000f, -0.00061035156250000000f, - 0.00949096679687500000f, 0.01583862304687500000f, - 0.00836181640625000000f, 0.00219726562500000000f, - -0.00994873046875000000f, -0.03143310546875000000f, - -0.00799560546875000000f, 0.00650024414062500000f, - 0.01159667968750000000f, 0.00250244140625000000f, - 0.01000976562500000000f, 0.01254272460937500000f, - -0.01647949218750000000f, 0.01751708984375000000f, - -0.00863647460937500000f, 0.00460815429687500000f, - 0.00552368164062500000f, -0.01226806640625000000f, - -0.00848388671875000000f, -0.00732421874999999910f, - -0.00335693359375000000f, -0.00692749023437500000f, - -0.00805664062500000000f, -0.00271606445312500000f, - -0.00762939453124999910f, -0.00790405273437500000f, - -0.00082397460937500000f, 0.00323486328125000000f, - -0.00729370117187499910f, -0.00299072265625000000f, - -0.01190185546875000000f, 0.00360107421875000000f, - 0.00186157226562500000f, 0.00317382812500000040f, - 0.00897216796875000000f, 0.01623535156250000000f, - 0.00280761718750000000f, -0.00039672851562500005f, - 0.00183105468749999980f, -0.00711059570312500000f, - 0.01022338867187500000f, 0.01651000976562500000f, - 0.00936889648437500000f, -0.00079345703125000011f, - -0.00335693359375000000f, -0.00277709960937500000f, - -0.00704956054687500000f, -0.01403808593750000200f, - 0.00518798828125000000f, 0.00613403320312500000f, - 0.00292968750000000000f, -0.01135253906249999800f, - 0.00402832031250000000f, 0.01327514648437500000f, - -0.00921630859375000000f, 0.00659179687500000000f, - -0.00851440429687500000f, -0.00125122070312500000f, - 0.00225830078125000000f, 0.00579833984375000000f, - 0.01123046875000000000f, 0.00833129882812500000f, - -0.00567626953124999910f, -0.01855468750000000000f, - -0.00479125976562500000f, 0.00485229492187500000f, - 0.00036621093750000000f, 0.00848388671875000000f, - 0.00747680664062500000f, 0.00936889648437500000f, - 0.00076293945312500000f, -0.00570678710937500090f, - -0.00048828125000000000f, 0.00167846679687500000f, - 0.00091552734374999989f, -0.00497436523437500000f, - 0.01672363281250000000f, -0.00936889648437500000f, - 0.00323486328125000000f, -0.00015258789062500000f, - 0.00082397460937500000f, 0.01007080078124999800f, - -0.01269531250000000200f, 0.01449584960937500000f, - 0.01336669921875000200f, -0.00717163085937500000f, - 0.00317382812500000040f, 0.00418090820312500000f, - 0.00064086914062500000f, -0.00015258789062500000f, - -0.00915527343750000000f, -0.01428222656250000000f, - 0.01589965820312500000f, -0.01058959960937500000f, - 0.00518798828125000000f, -0.00610351562500000000f, - -0.00668334960937500090f, 0.00939941406250000000f, - -0.00372314453125000000f, -0.00405883789062500000f, - 0.00668334960937500090f, -0.00048828125000000000f, - 0.01095581054687500000f, 0.01257324218750000000f, - -0.00271606445312500000f, -0.00338745117187500000f, - 0.00146484375000000000f, 0.00982666015625000000f, - 0.00433349609375000000f, 0.00540161132812500090f, - -0.00872802734375000000f, -0.00387573242187500000f, - -0.00119018554687500000f, -0.00192260742187500000f, - -0.00128173828125000000f, -0.01376342773437500000f, - 0.00488281250000000000f, 0.00939941406250000000f, - -0.00173950195312500000f, 0.00588989257812500000f, - -0.00146484375000000000f, 0.00225830078125000000f, - -0.01055908203125000000f, 0.00180053710937500000f, - -0.00082397460937500000f, 0.00082397460937500000f, - -0.01431274414062499800f, -0.00845336914062500000f, - -0.01049804687500000000f, 0.00860595703125000000f, - 0.00799560546875000000f, 0.00372314453125000000f, - 0.00521850585937500000f, -0.00759887695312500000f, - 0.00082397460937500000f, 0.00787353515625000000f, - 0.00573730468750000000f, -0.00009155273437500000f, - 0.00204467773437500000f, -0.00628662109375000000f, - -0.00866699218750000000f, 0.00888061523437500000f, - -0.00357055664062500000f, -0.00268554687499999960f, - -0.01455688476562500000f, 0.01144409179687500000f, - 0.00152587890625000000f, 0.00323486328125000000f, - 0.00302124023437500040f, -0.00555419921875000000f, - 0.01336669921875000200f, -0.01147460937500000000f, - -0.01223754882812500000f, -0.00149536132812500000f, - 0.00363159179687500000f, -0.00070190429687500000f, - -0.00030517578125000000f, -0.00146484375000000000f, - -0.00354003906250000000f, -0.00610351562500000000f, - -0.00946044921875000000f, 0.00369262695312500000f, - 0.00222778320312500000f, 0.00021362304687500000f, - 0.00723266601562500000f, -0.00689697265625000000f, - 0.00424194335937500000f, -0.01391601562500000000f, - 0.01211547851562500000f, 0.00106811523437500000f, - 0.00009155273437500000f, -0.00329589843750000000f, - 0.00985717773437500000f, -0.00228881835937500000f, - 0.01013183593750000200f, 0.00604248046875000090f, - -0.00302124023437500040f, -0.00064086914062500000f + -0.44140625000000000000f, -0.35937500000000000000f, + -0.26562500000000000000f, -0.16796875000000000000f, + -0.07812500000000000000f, 0.01171875000000000000f, + 0.10937500000000000000f, 0.20312500000000003000f, + 0.30468750000000000000f, 0.39062500000000000000f, + -0.44531250000000000000f, -0.39453125000000000000f, + -0.29296875000000000000f, -0.20703125000000000000f, + -0.11718749999999999000f, -0.02734375000000000000f, + 0.07812500000000000000f, 0.17578125000000000000f, + 0.28125000000000000000f, 0.37500000000000000000f, + -0.38281250000000000000f, -0.31640625000000000000f, + -0.22656250000000000000f, -0.12890625000000000000f, + -0.03906250000000000000f, 0.03906250000000000000f, + 0.13671875000000000000f, 0.22656250000000000000f, + 0.32031250000000000000f, 0.40234375000000000000f, + -0.42968750000000000000f, -0.38671875000000006000f, + -0.31250000000000000000f, -0.23828125000000000000f, + -0.14843750000000000000f, -0.05859374999999999300f, + 0.04687500000000000000f, 0.14843750000000000000f, + 0.25781250000000000000f, 0.34765625000000000000f, + -0.44921875000000006000f, -0.42187500000000000000f, + -0.30078125000000000000f, -0.19140625000000000000f, + -0.08203125000000000000f, 0.01562500000000000000f, + 0.11328125000000000000f, 0.20703125000000000000f, + 0.30859375000000000000f, 0.39843750000000000000f, + -0.39453125000000000000f, -0.31640625000000000000f, + -0.21484375000000000000f, -0.11328125000000000000f, + -0.02734375000000000000f, 0.08984375000000000000f, + 0.18359375000000000000f, 0.27734375000000000000f, + 0.36328124999999994000f, 0.42968750000000000000f, + -0.39062500000000000000f, -0.32421875000000006000f, + -0.25390625000000000000f, -0.17187499999999997000f, + -0.09765625000000000000f, -0.02734375000000000000f, + 0.07421875000000000000f, 0.17578125000000000000f, + 0.28125000000000000000f, 0.37500000000000000000f, + -0.42968750000000000000f, -0.39062500000000000000f, + -0.33203125000000000000f, -0.17578125000000000000f, + -0.09765625000000000000f, -0.03125000000000000000f, + 0.08593749999999998600f, 0.15234375000000000000f, + 0.30468750000000000000f, 0.37890625000000000000f, + -0.44921875000000006000f, -0.41796875000000000000f, + -0.34765625000000000000f, -0.26953125000000000000f, + -0.14062500000000000000f, -0.03515625000000000000f, + 0.07812500000000000000f, 0.17578125000000000000f, + 0.28125000000000000000f, 0.38671875000000006000f, + -0.44140625000000000000f, -0.38671875000000006000f, + -0.26953125000000000000f, -0.14843750000000000000f, + -0.04687500000000000000f, 0.06250000000000000000f, + 0.17187499999999997000f, 0.26562500000000000000f, + 0.35937500000000000000f, 0.42578124999999994000f, + -0.42578124999999994000f, -0.38281250000000000000f, + -0.32812500000000000000f, -0.23437499999999997000f, + -0.07421875000000000000f, -0.01171875000000000000f, + 0.07031250000000000000f, 0.16796875000000000000f, + 0.23828125000000000000f, 0.38281250000000000000f, + -0.38671875000000006000f, -0.30078125000000000000f, + -0.17968750000000000000f, -0.06640625000000000000f, + 0.03906250000000000000f, 0.13671875000000000000f, + 0.21484375000000000000f, 0.28906250000000000000f, + 0.35937500000000000000f, 0.41406250000000000000f, + -0.41015625000000000000f, -0.35546875000000000000f, + -0.27343750000000000000f, -0.16406250000000000000f, + -0.00390625000000000000f, 0.06640625000000000000f, + 0.13671875000000000000f, 0.22656250000000000000f, + 0.29296875000000000000f, 0.38671875000000006000f, + -0.35156250000000000000f, -0.30078125000000000000f, + -0.20703125000000000000f, -0.14843750000000000000f, + -0.08203125000000000000f, 0.00000000000000000000f, + 0.10937500000000000000f, 0.19140625000000000000f, + 0.29687500000000000000f, 0.37890625000000000000f, + -0.42968750000000000000f, -0.39453125000000000000f, + -0.31250000000000000000f, -0.11328125000000000000f, + -0.03125000000000000000f, 0.02343750000000000000f, + 0.11718749999999999000f, 0.18750000000000000000f, + 0.32031250000000000000f, 0.38671875000000006000f, + -0.42968750000000000000f, -0.35937500000000000000f, + -0.21484375000000000000f, -0.07421875000000000000f, + 0.01562500000000000000f, 0.09765625000000000000f, + 0.16796875000000000000f, 0.24218750000000000000f, + 0.32812500000000000000f, 0.39453125000000000000f, + -0.39453125000000000000f, -0.34374999999999994000f, + -0.28515625000000000000f, -0.22656250000000000000f, + -0.17578125000000000000f, -0.10156250000000001000f, + 0.08203125000000000000f, 0.17968750000000000000f, + 0.27734375000000000000f, 0.38281250000000000000f, + -0.32421875000000006000f, -0.26171875000000000000f, + -0.15625000000000000000f, -0.08593749999999998600f, + -0.00781250000000000000f, 0.07421875000000000000f, + 0.16015625000000000000f, 0.24609375000000000000f, + 0.33203125000000000000f, 0.40234375000000000000f, + -0.43750000000000000000f, -0.40234375000000000000f, + -0.34765625000000000000f, -0.24218750000000000000f, + -0.03125000000000000000f, 0.05859374999999999300f, + 0.12890625000000000000f, 0.21875000000000000000f, + 0.28906250000000000000f, 0.37890625000000000000f, + -0.45703125000000000000f, -0.28515625000000000000f, + -0.21875000000000000000f, -0.12890625000000000000f, + -0.05078125000000000700f, 0.04296874999999999300f, + 0.13281250000000000000f, 0.22265625000000000000f, + 0.31250000000000000000f, 0.39453125000000000000f, + -0.42968750000000000000f, -0.39062500000000000000f, + -0.32812500000000000000f, -0.28125000000000000000f, + -0.23046875000000000000f, -0.05859374999999999300f, + 0.08203125000000000000f, 0.17578125000000000000f, + 0.29687500000000000000f, 0.37500000000000000000f, + -0.40234375000000000000f, -0.35156250000000000000f, + -0.28125000000000000000f, -0.23046875000000000000f, + -0.15625000000000000000f, 0.00390625000000000000f, + 0.12500000000000000000f, 0.21875000000000000000f, + 0.32031250000000000000f, 0.38281250000000000000f, + -0.41796875000000000000f, -0.37890625000000000000f, + -0.30859375000000000000f, -0.21093750000000000000f, + -0.14453125000000000000f, -0.08203125000000000000f, + -0.01562500000000000000f, 0.08593749999999998600f, + 0.27734375000000000000f, 0.36718750000000000000f, + -0.37890625000000000000f, -0.26171875000000000000f, + -0.10546875000000000000f, -0.00781250000000000000f, + 0.11328125000000000000f, 0.17187499999999997000f, + 0.22656250000000000000f, 0.27734375000000000000f, + 0.32031250000000000000f, 0.38281250000000000000f, + -0.34765625000000000000f, -0.28906250000000000000f, + -0.21484375000000000000f, -0.17578125000000000000f, + -0.11718749999999999000f, -0.07031250000000000000f, + -0.00781250000000000000f, 0.08984375000000000000f, + 0.25390625000000000000f, 0.37890625000000000000f, + -0.41406250000000000000f, -0.32031250000000000000f, + -0.21875000000000000000f, -0.12109375000000000000f, + -0.01953125000000000000f, 0.13281250000000000000f, + 0.23046875000000000000f, 0.25390625000000000000f, + 0.26562500000000000000f, 0.30468750000000000000f, + -0.41796875000000000000f, -0.32031250000000000000f, + -0.22265625000000000000f, -0.12109375000000000000f, + 0.07812500000000000000f, 0.12109375000000000000f, + 0.13281250000000000000f, 0.13671875000000000000f, + 0.26562500000000000000f, 0.40234375000000000000f, + -0.42578124999999994000f, -0.32421875000000006000f, + -0.21875000000000000000f, -0.12500000000000000000f, + -0.02343750000000000000f, 0.07031250000000000000f, + 0.19140625000000000000f, 0.32031250000000000000f, + 0.42578124999999994000f, 0.45312500000000000000f, + -0.40234375000000000000f, -0.32031250000000000000f, + -0.19531250000000000000f, -0.06640625000000000000f, + -0.02343750000000000000f, 0.00781250000000000000f, + 0.07421875000000000000f, 0.21875000000000000000f, + 0.32421875000000006000f, 0.41015625000000000000f, + -0.41406250000000000000f, -0.32031250000000000000f, + -0.21093750000000000000f, -0.11718749999999999000f, + -0.00390625000000000000f, 0.12500000000000000000f, + 0.16015625000000000000f, 0.19140625000000000000f, + 0.20312500000000003000f, 0.38281250000000000000f, + -0.38281250000000000000f, -0.25781250000000000000f, + -0.14062500000000000000f, 0.00000000000000000000f, + 0.01953125000000000000f, 0.04687500000000000000f, + 0.05468750000000000000f, 0.10156250000000001000f, + 0.25000000000000000000f, 0.37890625000000000000f, + -0.41015625000000000000f, -0.31250000000000000000f, + -0.20703125000000000000f, -0.11328125000000000000f, + 0.00781250000000000000f, 0.11718749999999999000f, + 0.29687500000000000000f, 0.35156250000000000000f, + 0.36718750000000000000f, 0.37500000000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.01953125000000000000f, + 0.02734375000000000000f, 0.02343750000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + 0.03125000000000000000f, 0.03515625000000000000f, + 0.01953125000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, -0.00781250000000000000f, + -0.02734375000000000000f, -0.04296874999999999300f, + -0.04296874999999999300f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.00781250000000000000f, + -0.02343750000000000000f, -0.01171875000000000000f, + 0.00781250000000000000f, -0.01562500000000000000f, + 0.03906250000000000000f, 0.01953125000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + -0.01953125000000000000f, -0.02734375000000000000f, + 0.04296874999999999300f, 0.02734375000000000000f, + 0.01562500000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.02734375000000000000f, 0.03906250000000000000f, + 0.01171875000000000000f, -0.00390625000000000000f, + -0.02343750000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01562500000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.01953125000000000000f, + -0.04296874999999999300f, -0.03906250000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + -0.01953125000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.01953125000000000000f, + 0.01562500000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.03515625000000000000f, + -0.01953125000000000000f, -0.00390625000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.02343750000000000000f, + 0.02734375000000000000f, 0.02343750000000000000f, + -0.00781250000000000000f, -0.01953125000000000000f, + -0.03515625000000000000f, -0.01562500000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + -0.01171875000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + -0.02343750000000000000f, -0.03515625000000000000f, + 0.02343750000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.00781250000000000000f, + 0.01562500000000000000f, -0.01171875000000000000f, + 0.03515625000000000000f, 0.01171875000000000000f, + -0.01171875000000000000f, 0.01562500000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.01562500000000000000f, + -0.02343750000000000000f, 0.04296874999999999300f, + 0.01562500000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.02343750000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.01953125000000000000f, 0.02343750000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.02343750000000000000f, -0.03125000000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.03125000000000000000f, 0.00390625000000000000f, + -0.01953125000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.03125000000000000000f, + 0.01171875000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.03906250000000000000f, + 0.00390625000000000000f, -0.01562500000000000000f, + -0.00390625000000000000f, -0.01562500000000000000f, + -0.02343750000000000000f, 0.02343750000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.01562500000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.01562500000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.01562500000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.01562500000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.01562500000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.01562500000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.01953125000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.02734375000000000000f, 0.02343750000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.01562500000000000000f, + -0.01562500000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.01562500000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.01171875000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.01953125000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.01953125000000000000f, -0.01171875000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.01562500000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + -0.01953125000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.01171875000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01562500000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.01171875000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.01562500000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.01171875000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.01171875000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00781250000000000000f, + -0.01562500000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.01562500000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f }; const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB1_10_Stage_info_FLP[ NLSF_MSVQ_CB1_10_STAGES ] = @@ -460,7 +504,8 @@ const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB1_10_Stage_info_FLP[ NLSF_MSVQ_CB1_1 { 8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 * 40 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[ 40 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 * 48 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[ 48 ] }, { 8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 * 56 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[ 56 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 * 64 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[ 64 ] } + { 8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 * 64 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[ 64 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_10[ 10 * 72 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates[ 72 ] } }; const SKP_Silk_NLSF_CB_FLP SKP_Silk_NLSF_CB1_10_FLP = diff --git a/src_FLP/SKP_Silk_tables_NLSF_CB1_16_FLP.c b/src_FLP/SKP_Silk_tables_NLSF_CB1_16_FLP.c index 494166f29746fecd929de72a480eab66a2902e30..3c969551071c1fb620494974d4a0fa816c4d0627 100644 --- a/src_FLP/SKP_Silk_tables_NLSF_CB1_16_FLP.c +++ b/src_FLP/SKP_Silk_tables_NLSF_CB1_16_FLP.c @@ -36,915 +36,915 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. const SKP_float SKP_Silk_NLSF_MSVQ_CB1_16_rates[ NLSF_MSVQ_CB1_16_VECTORS ] = { - 1.78125000000000000000f, 3.06250000000000000000f, - 4.15625000000000000000f, 4.18750000000000000000f, - 4.31250000000000000000f, 4.50000000000000000000f, - 4.53125000000000000000f, 4.59375000000000000000f, - 4.75000000000000000000f, 5.53125000000000000000f, - 5.53125000000000000000f, 5.56250000000000000000f, - 5.65625000000000000000f, 5.71875000000000000000f, - 5.75000000000000000000f, 6.31250000000000000000f, - 6.43750000000000000000f, 6.71875000000000000000f, - 6.81250000000000000000f, 6.93750000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 7.09375000000000000000f, 7.09375000000000000000f, - 1.18750000000000000000f, 2.71875000000000000000f, - 3.03125000000000000000f, 3.71875000000000000000f, - 4.00000000000000000000f, 4.21875000000000000000f, - 4.37500000000000000000f, 4.46875000000000000000f, - 1.25000000000000000000f, 2.53125000000000000000f, - 3.34375000000000000000f, 3.34375000000000000000f, - 4.03125000000000000000f, 4.18750000000000000000f, - 4.18750000000000000000f, 4.46875000000000000000f, - 0.96875000000000000000f, 3.40625000000000000000f, - 3.56250000000000000000f, 3.75000000000000000000f, - 4.00000000000000000000f, 4.06250000000000000000f, - 4.09375000000000000000f, 4.12500000000000000000f, - 1.34375000000000000000f, 1.90625000000000000000f, - 3.87500000000000000000f, 3.90625000000000000000f, - 4.12500000000000000000f, 4.25000000000000000000f, - 4.40625000000000000000f, 4.43750000000000000000f, - 0.93750000000000000000f, 3.43750000000000000000f, + 1.93750000000000000000f, 3.25000000000000000000f, + 3.81250000000000000000f, 4.31250000000000000000f, + 4.56250000000000000000f, 4.75000000000000000000f, + 5.06250000000000000000f, 5.06250000000000000000f, + 5.18750000000000000000f, 5.25000000000000000000f, + 5.31250000000000000000f, 5.37500000000000000000f, + 5.37500000000000000000f, 5.50000000000000000000f, + 5.50000000000000000000f, 5.62500000000000000000f, + 5.87500000000000000000f, 5.87500000000000000000f, + 5.93750000000000000000f, 6.06250000000000000000f, + 6.12500000000000000000f, 6.25000000000000000000f, + 6.37500000000000000000f, 6.68750000000000000000f, + 6.68750000000000000000f, 7.00000000000000000000f, + 7.00000000000000000000f, 7.00000000000000000000f, + 7.00000000000000000000f, 7.00000000000000000000f, + 7.00000000000000000000f, 7.00000000000000000000f, + 1.25000000000000000000f, 2.62500000000000000000f, + 2.75000000000000000000f, 3.87500000000000000000f, + 4.00000000000000000000f, 4.25000000000000000000f, + 4.62500000000000000000f, 4.62500000000000000000f, + 1.06250000000000000000f, 2.87500000000000000000f, 3.68750000000000000000f, 3.75000000000000000000f, - 4.03125000000000000000f, 4.09375000000000000000f, - 4.15625000000000000000f, 4.15625000000000000000f, - 0.96875000000000000000f, 3.37500000000000000000f, - 3.59375000000000000000f, 3.78125000000000000000f, - 3.87500000000000000000f, 4.06250000000000000000f, - 4.15625000000000000000f, 4.28125000000000000000f, - 1.25000000000000000000f, 3.06250000000000000000f, - 3.59375000000000000000f, 3.59375000000000000000f, - 3.62500000000000000000f, 3.65625000000000000000f, - 3.84375000000000000000f, 3.87500000000000000000f, - 1.56250000000000000000f, 2.90625000000000000000f, - 3.37500000000000000000f, 3.43750000000000000000f, - 3.50000000000000000000f, 3.50000000000000000000f, - 3.56250000000000000000f, 3.59375000000000000000f, - 2.28125000000000000000f, 2.96875000000000000000f, - 2.96875000000000000000f, 3.00000000000000000000f, - 3.00000000000000000000f, 3.28125000000000000000f, - 3.34375000000000000000f, 3.43750000000000000000f + 3.87500000000000000000f, 3.87500000000000000000f, + 4.31250000000000000000f, 4.37500000000000000000f, + 0.75000000000000000000f, 3.75000000000000000000f, + 3.93750000000000000000f, 4.06250000000000000000f, + 4.18750000000000000000f, 4.31250000000000000000f, + 4.31250000000000000000f, 4.43750000000000000000f, + 0.62500000000000000000f, 3.87500000000000000000f, + 3.93750000000000000000f, 4.00000000000000000000f, + 4.25000000000000000000f, 4.62500000000000000000f, + 4.75000000000000000000f, 5.00000000000000000000f, + 0.56250000000000000000f, 4.06250000000000000000f, + 4.31250000000000000000f, 4.37500000000000000000f, + 4.43750000000000000000f, 4.56250000000000000000f, + 4.56250000000000000000f, 4.68750000000000000000f, + 0.68750000000000000000f, 3.81250000000000000000f, + 3.87500000000000000000f, 4.18750000000000000000f, + 4.25000000000000000000f, 4.37500000000000000000f, + 4.43750000000000000000f, 4.50000000000000000000f, + 1.06250000000000000000f, 3.06250000000000000000f, + 3.56250000000000000000f, 3.62500000000000000000f, + 3.68750000000000000000f, 4.12500000000000000000f, + 4.18750000000000000000f, 4.68750000000000000000f, + 1.18750000000000000000f, 2.56250000000000000000f, + 3.00000000000000000000f, 3.75000000000000000000f, + 4.31250000000000000000f, 4.31250000000000000000f, + 4.37500000000000000000f, 4.37500000000000000000f, + 1.87500000000000000000f, 2.00000000000000000000f, + 2.93750000000000000000f, 3.25000000000000000000f, + 3.50000000000000000000f, 4.12500000000000000000f, + 4.37500000000000000000f, 4.50000000000000000000f }; const SKP_float SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min[ 16 + 1 ] = { - 0.00451660156250000000f, - 0.00009155273437500000f, - 0.00183105468749999980f, + 0.00335693359375000000f, + 0.00085449218750000000f, + 0.00372314453125000000f, 0.00207519531250000000f, - 0.00357055664062500000f, - 0.00262451171875000000f, - 0.00369262695312500000f, - 0.00378417968750000000f, - 0.00463867187500000000f, - 0.00466918945312500000f, - 0.00631713867187499910f, - 0.00460815429687500000f, - 0.00686645507812500000f, - 0.00729370117187499910f, - 0.00384521484375000000f, - 0.00558471679687500000f, - 0.02416992187500000300f + 0.00228881835937500000f, + 0.00216674804687500000f, + 0.00195312500000000000f, + 0.00238037109375000000f, + 0.00253295898437500040f, + 0.00234985351562500000f, + 0.00247192382812500000f, + 0.00231933593750000000f, + 0.00256347656250000000f, + 0.00222778320312500000f, + 0.00210571289062500000f, + 0.00064086914062500000f, + 0.02374267578125000000f }; const SKP_float SKP_Silk_NLSF_MSVQ_CB1_16[ 16 * NLSF_MSVQ_CB1_16_VECTORS ] = { - 0.03994750976562499300f, 0.09338378906250000000f, - 0.15475463867187500000f, 0.21350097656250000000f, - 0.27551269531250000000f, 0.33380126953125000000f, - 0.39471435546875000000f, 0.45443725585937500000f, - 0.51675415039062500000f, 0.57537841796875000000f, - 0.63452148437500000000f, 0.69470214843750000000f, - 0.75540161132812500000f, 0.81356811523437500000f, - 0.87359619140625000000f, 0.93081665039062500000f, - 0.03857421875000000000f, 0.08377075195312498600f, - 0.14068603515625000000f, 0.19555664062500000000f, - 0.25286865234375000000f, 0.30648803710937500000f, - 0.36877441406250000000f, 0.43054199218750000000f, - 0.49188232421875006000f, 0.55429077148437500000f, - 0.61325073242187500000f, 0.67639160156250000000f, - 0.74047851562500000000f, 0.80310058593750000000f, - 0.86453247070312500000f, 0.92318725585937500000f, - 0.03186035156250000000f, 0.06347656250000000000f, - 0.11206054687500000000f, 0.15805053710937500000f, - 0.21789550781250003000f, 0.27770996093750000000f, - 0.33782958984375000000f, 0.39871215820312494000f, - 0.47067260742187500000f, 0.54290771484375000000f, - 0.60824584960937500000f, 0.67446899414062500000f, - 0.74127197265625000000f, 0.80447387695312500000f, - 0.86972045898437500000f, 0.92828369140625000000f, - 0.03451538085937500000f, 0.07556152343750000000f, - 0.13665771484375000000f, 0.18765258789062500000f, - 0.24114990234375000000f, 0.30136108398437500000f, - 0.36431884765624994000f, 0.42141723632812500000f, - 0.48428344726562500000f, 0.54107666015625000000f, - 0.60876464843750000000f, 0.66244506835937500000f, - 0.72512817382812500000f, 0.77926635742187500000f, - 0.83697509765625000000f, 0.88247680664062500000f, - 0.03173828125000000000f, 0.06115722656250000000f, - 0.12286376953125000000f, 0.18615722656250000000f, - 0.25732421875000000000f, 0.32025146484375000000f, - 0.38482666015625000000f, 0.44842529296875000000f, - 0.51260375976562500000f, 0.57296752929687500000f, - 0.63473510742187500000f, 0.69525146484375000000f, - 0.75598144531250000000f, 0.81427001953125000000f, - 0.87374877929687511000f, 0.93127441406250000000f, - 0.07049560546875000000f, 0.11633300781250001000f, - 0.18045043945312497000f, 0.24209594726562500000f, - 0.30618286132812500000f, 0.36257934570312500000f, - 0.42373657226562500000f, 0.48211669921875000000f, - 0.54171752929687500000f, 0.59741210937500000000f, - 0.65557861328125000000f, 0.71032714843750000000f, - 0.76773071289062500000f, 0.82427978515624989000f, - 0.87991333007812500000f, 0.93453979492187500000f, - 0.03826904296875000000f, 0.08688354492187500000f, - 0.15298461914062500000f, 0.20693969726562500000f, - 0.26324462890625000000f, 0.31646728515625000000f, - 0.38836669921875000000f, 0.44656372070312500000f, - 0.49685668945312494000f, 0.54479980468750000000f, - 0.60638427734375000000f, 0.65527343749999989000f, - 0.70196533203124989000f, 0.75161743164062500000f, - 0.81512451171875000000f, 0.85327148437500000000f, - 0.04479980468750000000f, 0.09335327148437500000f, - 0.15219116210937500000f, 0.21441650390625000000f, - 0.26675415039062500000f, 0.31774902343750000000f, - 0.37478637695312500000f, 0.42785644531250000000f, - 0.48736572265625000000f, 0.54086303710937500000f, - 0.59936523437500000000f, 0.65679931640625000000f, - 0.71630859375000000000f, 0.78311157226562500000f, - 0.85406494140625000000f, 0.92239379882812500000f, - 0.06625366210937500000f, 0.10882568359375000000f, - 0.17105102539062497000f, 0.22534179687500000000f, - 0.28698730468750000000f, 0.34240722656249994000f, - 0.39764404296875000000f, 0.45037841796875000000f, - 0.50924682617187500000f, 0.56204223632812500000f, - 0.62091064453125000000f, 0.67416381835937511000f, - 0.73410034179687489000f, 0.79992675781250000000f, - 0.86535644531250000000f, 0.92764282226562500000f, - 0.07351684570312500000f, 0.14270019531250000000f, - 0.23019409179687497000f, 0.29864501953125000000f, - 0.34848022460937500000f, 0.39474487304687500000f, - 0.43847656250000006000f, 0.47769165039062500000f, - 0.52996826171875000000f, 0.57809448242187500000f, - 0.63360595703125000000f, 0.68594360351562511000f, - 0.74584960937500000000f, 0.80343627929687500000f, - 0.86315917968750000000f, 0.92291259765625000000f, - 0.07183837890625000000f, 0.12884521484375000000f, - 0.20812988281250003000f, 0.27792358398437500000f, - 0.35388183593749994000f, 0.42523193359375000000f, - 0.48745727539062494000f, 0.53961181640625000000f, - 0.58465576171875000000f, 0.62612915039062500000f, - 0.67111206054687500000f, 0.71472167968750000000f, - 0.76837158203125000000f, 0.82202148437499989000f, - 0.87872314453125000000f, 0.93161010742187511000f, - 0.04037475585937500000f, 0.07366943359375000000f, - 0.12768554687500000000f, 0.18429565429687500000f, - 0.22991943359375000000f, 0.28680419921875000000f, - 0.33871459960937500000f, 0.39968872070312500000f, - 0.45162963867187500000f, 0.50204467773437500000f, - 0.56256103515625000000f, 0.63742065429687500000f, - 0.71685791015624989000f, 0.78851318359375011000f, - 0.85589599609374989000f, 0.92239379882812500000f, - 0.04153442382812500700f, 0.09896850585937500000f, - 0.18457031250000000000f, 0.25973510742187500000f, - 0.33572387695312500000f, 0.40115356445312500000f, - 0.45999145507812500000f, 0.50683593750000000000f, - 0.55316162109375000000f, 0.59146118164062500000f, - 0.63818359375000000000f, 0.68991088867187500000f, - 0.75256347656250011000f, 0.81384277343750000000f, - 0.87472534179687500000f, 0.93280029296875000000f, - 0.03710937500000000000f, 0.08081054687500000000f, - 0.18008422851562503000f, 0.25701904296875000000f, - 0.30630493164062500000f, 0.34866333007812500000f, - 0.39590454101562500000f, 0.44564819335937500000f, - 0.50921630859375000000f, 0.56762695312500000000f, - 0.62728881835937500000f, 0.68405151367187500000f, - 0.74615478515625000000f, 0.80200195312500000000f, - 0.86077880859375000000f, 0.91787719726562500000f, - 0.07376098632812500000f, 0.12353515625000000000f, - 0.19274902343750000000f, 0.25735473632812500000f, - 0.32073974609375000000f, 0.38931274414062494000f, - 0.45996093750000006000f, 0.52780151367187500000f, - 0.59732055664062500000f, 0.65621948242187489000f, - 0.71194458007812500000f, 0.75628662109375011000f, - 0.80062866210937489000f, 0.84500122070312500000f, - 0.89154052734375000000f, 0.94052124023437500000f, - 0.03088378906250000000f, 0.07156372070312500000f, - 0.15231323242187500000f, 0.22512817382812503000f, - 0.28884887695312500000f, 0.36364746093750000000f, - 0.43627929687500000000f, 0.50555419921875000000f, - 0.56982421875000000000f, 0.62695312500000000000f, - 0.68029785156250000000f, 0.72747802734375000000f, - 0.77560424804687511000f, 0.82550048828125011000f, - 0.88037109375000000000f, 0.93234252929687500000f, - 0.05911254882812500000f, 0.11270141601562500000f, - 0.19125366210937500000f, 0.24472045898437500000f, - 0.31652832031250000000f, 0.37213134765625000000f, - 0.43600463867187494000f, 0.47781372070312500000f, - 0.53195190429687500000f, 0.57568359375000000000f, - 0.63381958007812500000f, 0.67767333984375000000f, - 0.73355102539062500000f, 0.77706909179687489000f, - 0.83566284179687500000f, 0.87286376953125000000f, - 0.06008911132812500000f, 0.10086059570312500000f, - 0.15310668945312500000f, 0.20526123046875000000f, - 0.25558471679687500000f, 0.30496215820312500000f, - 0.35504150390625000000f, 0.40527343750000000000f, - 0.46014404296875000000f, 0.51119995117187500000f, - 0.56347656250000000000f, 0.61398315429687500000f, - 0.67013549804687500000f, 0.72808837890625000000f, - 0.80029296875000011000f, 0.89410400390625011000f, - 0.03656005859375000000f, 0.08078002929687500000f, - 0.16564941406250000000f, 0.22653198242187500000f, - 0.29830932617187500000f, 0.37094116210937500000f, - 0.44754028320312500000f, 0.49877929687500000000f, - 0.55300903320312500000f, 0.60394287109375000000f, - 0.65786743164062489000f, 0.69723510742187500000f, - 0.74719238281250011000f, 0.78558349609375000000f, - 0.84347534179687500000f, 0.87619018554687500000f, - 0.04992675781250000000f, 0.10232543945312500000f, - 0.16622924804687500000f, 0.23184204101562503000f, - 0.30020141601562500000f, 0.35543823242187500000f, - 0.42614746093750000000f, 0.48886108398437500000f, - 0.54510498046875000000f, 0.61389160156250000000f, - 0.68112182617187500000f, 0.73355102539062500000f, - 0.79241943359375000000f, 0.85711669921875011000f, - 0.91290283203125011000f, 0.95501708984375000000f, - 0.08166503906250000000f, 0.12527465820312500000f, - 0.19464111328125000000f, 0.25094604492187500000f, - 0.30694580078125000000f, 0.35244750976562500000f, - 0.39892578124999994000f, 0.44107055664062494000f, - 0.48693847656249994000f, 0.52963256835937500000f, - 0.57772827148437500000f, 0.62261962890625000000f, - 0.67697143554687500000f, 0.72888183593750000000f, - 0.78482055664062500000f, 0.84603881835937500000f, - 0.04190063476562500000f, 0.07913208007812500000f, - 0.13577270507812500000f, 0.17190551757812500000f, - 0.22277832031250000000f, 0.25711059570312500000f, - 0.28912353515625000000f, 0.33013916015625000000f, - 0.38967895507812500000f, 0.47979736328125006000f, - 0.57989501953125000000f, 0.65396118164062500000f, - 0.72271728515625000000f, 0.79113769531250000000f, - 0.85861206054687500000f, 0.92568969726562500000f, - 0.04870605468750000000f, 0.09713745117187500000f, - 0.16412353515625003000f, 0.21862792968750000000f, - 0.26458740234375000000f, 0.30838012695312500000f, - 0.35003662109375000000f, 0.39166259765625000000f, - 0.42697143554687500000f, 0.45904541015624994000f, - 0.50787353515625000000f, 0.54635620117187500000f, - 0.63351440429687500000f, 0.77157592773437500000f, - 0.84747314453125000000f, 0.92285156249999989000f, - 0.06216430664062500000f, 0.12167358398437500000f, - 0.19033813476562500000f, 0.24771118164062500000f, - 0.30377197265625000000f, 0.37368774414062500000f, - 0.43386840820312500000f, 0.48498535156250000000f, - 0.54244995117187500000f, 0.61383056640625000000f, - 0.68096923828125000000f, 0.79168701171875000000f, - 0.80276489257812500000f, 0.80819702148437500000f, - 0.81774902343750000000f, 0.87161254882812500000f, - 0.06655883789062500000f, 0.11773681640625000000f, - 0.17578125000000000000f, 0.24182128906250000000f, - 0.30642700195312500000f, 0.35330200195312500000f, - 0.42019653320312494000f, 0.47912597656250000000f, - 0.53189086914062500000f, 0.60665893554687500000f, - 0.71969604492187500000f, 0.74884033203125000000f, - 0.76940917968750000000f, 0.78408813476562511000f, - 0.87548828125000000000f, 0.93099975585937489000f, - 0.06079101562500000000f, 0.11846923828125000000f, - 0.19757080078125000000f, 0.24057006835937503000f, - 0.28628540039062500000f, 0.38671875000000006000f, - 0.43762207031250000000f, 0.47915649414062500000f, - 0.50836181640625000000f, 0.54418945312500000000f, - 0.63629150390625000000f, 0.69839477539062500000f, - 0.75308227539062511000f, 0.80740356445312500000f, - 0.86947631835937500000f, 0.92956542968750000000f, - 0.07296752929687500000f, 0.12170410156250000000f, - 0.16625976562500000000f, 0.22680664062500000000f, - 0.33612060546875000000f, 0.38388061523437500000f, - 0.40100097656250000000f, 0.43170166015625000000f, - 0.48516845703125006000f, 0.56738281250000000000f, - 0.64404296875000000000f, 0.70169067382812500000f, - 0.75296020507812500000f, 0.82965087890624989000f, - 0.85882568359375000000f, 0.90368652343750000000f, - 0.05227661132812500000f, 0.15570068359375000000f, - 0.21328735351562500000f, 0.23797607421875000000f, - 0.26458740234375000000f, 0.30853271484375000000f, - 0.38897705078125000000f, 0.45413208007812500000f, - 0.50991821289062500000f, 0.56173706054687500000f, - 0.61419677734375000000f, 0.67465209960937500000f, - 0.73794555664062500000f, 0.79949951171874989000f, - 0.86172485351562500000f, 0.91970825195312500000f, - 0.04919433593750000000f, 0.11038208007812500000f, - 0.18762207031250000000f, 0.25509643554687500000f, - 0.29223632812500000000f, 0.35180664062500006000f, - 0.45581054687500000000f, 0.54348754882812500000f, - 0.55807495117187500000f, 0.57156372070312500000f, - 0.57986450195312500000f, 0.64425659179687500000f, - 0.75167846679687500000f, 0.81164550781250000000f, - 0.87707519531250000000f, 0.93515014648437500000f, - 0.06915283203125000000f, 0.12719726562500000000f, - 0.23992919921875000000f, 0.29132080078125000000f, - 0.29351806640625000000f, 0.29611206054687500000f, - 0.30926513671875000000f, 0.42410278320312500000f, - 0.49636840820312500000f, 0.56250000000000000000f, - 0.62826538085937500000f, 0.68984985351562500000f, - 0.75543212890625000000f, 0.82379150390625000000f, - 0.88882446289062511000f, 0.94116210937500000000f, - 0.05615234375000000700f, 0.11953735351562501000f, - 0.19140625000000000000f, 0.23831176757812500000f, - 0.29644775390625000000f, 0.34906005859375000000f, - 0.42013549804687500000f, 0.48214721679687500000f, - 0.58728027343750000000f, 0.67053222656250000000f, - 0.70129394531250000000f, 0.70739746093750000000f, - 0.72396850585937489000f, 0.78277587890625000000f, - 0.88858032226562500000f, 0.94863891601562500000f, - 0.04449462890625000000f, 0.11022949218750000000f, - 0.18334960937500000000f, 0.22851562500000000000f, - 0.29989624023437500000f, 0.36294555664062500000f, - 0.42987060546875000000f, 0.48016357421875000000f, - 0.53222656250000000000f, 0.59616088867187500000f, - 0.68432617187500000000f, 0.75582885742187500000f, - 0.89251708984375000000f, 0.91333007812499989000f, - 0.93127441406250000000f, 0.94442749023437489000f, - -0.00311279296875000000f, -0.00369262695312500000f, - -0.00094604492187500000f, -0.00018310546875000000f, - 0.00015258789062500000f, -0.00006103515625000000f, - 0.00024414062500000000f, -0.00054931640625000000f, - -0.00012207031250000000f, 0.00018310546875000000f, - 0.00042724609375000000f, -0.00006103515625000000f, - -0.00036621093750000000f, -0.00048828125000000000f, - -0.00036621093750000000f, -0.00183105468749999980f, - -0.00384521484375000000f, -0.01077270507812500000f, - -0.01751708984375000000f, -0.02066040039062500000f, - -0.02005004882812500000f, -0.01882934570312500000f, - -0.01519775390625000000f, -0.01199340820312500000f, - -0.01062011718750000000f, -0.00845336914062500000f, - -0.00686645507812500000f, -0.00500488281250000000f, - -0.00311279296875000000f, -0.00213623046875000000f, - -0.00094604492187500000f, 0.00100708007812500000f, - 0.00012207031250000000f, 0.01156616210937500000f, - 0.01181030273437500000f, 0.01681518554687500000f, - 0.01846313476562500000f, 0.01892089843750000000f, - 0.01623535156250000000f, 0.01470947265625000200f, - 0.01348876953125000000f, 0.01385498046875000000f, - 0.01174926757812500200f, 0.01058959960937500000f, - 0.00982666015625000000f, 0.00912475585937500000f, - 0.00811767578125000000f, 0.00610351562500000000f, - 0.03564453125000000000f, 0.02902221679687500000f, - 0.02050781250000000000f, 0.00750732421875000000f, - 0.00183105468749999980f, -0.00491333007812500000f, - -0.00790405273437500000f, -0.00714111328125000000f, - -0.00772094726562500000f, -0.00860595703125000000f, - -0.00619506835937500000f, -0.00570678710937500090f, - -0.00473022460937500000f, -0.00537109374999999910f, - -0.00604248046875000090f, -0.00543212890625000000f, - 0.00030517578125000000f, 0.00518798828125000000f, - 0.01199340820312500000f, 0.01858520507812500000f, - 0.01693725585937500000f, 0.00634765625000000090f, - -0.01007080078124999800f, -0.01742553710937500000f, - -0.02346801757812500000f, -0.01931762695312500000f, - -0.00973510742187500000f, -0.00131225585937500000f, - 0.00289916992187500000f, 0.00320434570312500000f, - 0.00323486328125000000f, 0.00354003906250000000f, - -0.00463867187500000000f, -0.00427246093750000000f, - -0.00381469726562499960f, 0.00015258789062500000f, - 0.00527954101562500000f, 0.00836181640625000000f, - 0.00805664062500000000f, 0.01010131835937500000f, - -0.00112915039062500000f, -0.00894165039062500000f, - -0.01858520507812500000f, -0.02398681640625000000f, - -0.02926635742187500000f, -0.02484130859375000300f, - -0.01968383789062500000f, -0.00726318359375000000f, - -0.00277709960937500000f, 0.00109863281250000000f, - -0.00033569335937499995f, -0.00308227539062500000f, - -0.00851440429687500000f, -0.00692749023437500000f, - -0.00122070312500000000f, 0.00274658203125000000f, - 0.01617431640625000000f, 0.02066040039062500000f, - 0.02716064453125000000f, 0.03369140625000000000f, - 0.03048706054687500000f, 0.02548217773437500000f, - 0.01721191406250000000f, 0.00900268554687500000f, - -0.00854492187500000000f, -0.01110839843750000000f, - -0.01037597656250000000f, -0.01010131835937500000f, - -0.00866699218750000000f, 0.00878906250000000000f, - 0.02322387695312500000f, 0.02685546875000000000f, - 0.03015136718750000000f, 0.01913452148437500000f, - 0.00445556640625000000f, -0.00689697265625000000f, - -0.00619506835937500000f, -0.00552368164062500000f, - -0.00433349609375000000f, 0.00119018554687500000f, - 0.00073242187500000000f, -0.00079345703125000011f, - -0.00326538085937500000f, -0.00280761718750000000f, - -0.00491333007812500000f, -0.00411987304687500000f, - -0.00399780273437500000f, -0.00268554687499999960f, - -0.00488281250000000000f, -0.00476074218750000000f, - -0.00228881835937500000f, -0.00131225585937500000f, - -0.00109863281250000000f, -0.00018310546875000000f, - -0.00100708007812500000f, 0.00100708007812500000f, - -0.00988769531250000000f, -0.01266479492187500000f, - -0.00329589843750000000f, 0.00378417968750000000f, - 0.00479125976562500000f, 0.00582885742187500000f, - 0.00619506835937500000f, 0.00601196289062499910f, - 0.00439453125000000000f, 0.00332641601562499960f, - 0.00463867187500000000f, 0.00537109374999999910f, - 0.00579833984375000000f, 0.00372314453125000000f, - 0.00308227539062500000f, 0.00485229492187500000f, - 0.02023315429687500000f, 0.02038574218750000000f, - 0.01464843749999999800f, 0.01220703125000000000f, - 0.01156616210937500000f, 0.01354980468750000000f, - 0.01361083984375000000f, 0.01397705078124999800f, - 0.01046752929687500200f, 0.01071166992187500000f, - 0.00946044921875000000f, 0.00695800781250000000f, - 0.00405883789062500000f, 0.00134277343749999980f, - 0.00228881835937500000f, 0.00192260742187500000f, - -0.00256347656250000000f, 0.00119018554687500000f, - -0.00088500976562500000f, 0.00106811523437500000f, - -0.00286865234375000000f, -0.00711059570312500000f, - -0.00796508789062500000f, -0.01080322265625000200f, - 0.00234985351562500000f, 0.00799560546875000000f, - -0.00073242187500000000f, -0.00442504882812500000f, - -0.01016235351562500000f, -0.01248168945312500000f, - -0.01232910156250000000f, -0.01821899414062500000f, - -0.01489257812500000000f, -0.00915527343750000000f, - 0.02777099609375000000f, 0.01806640625000000000f, - 0.01257324218750000000f, 0.00366210937499999960f, - 0.00396728515625000000f, -0.00155639648437500000f, - -0.00112915039062500000f, -0.00234985351562500000f, - -0.00524902343750000000f, -0.00552368164062500000f, - -0.00485229492187500000f, -0.00451660156250000000f, - -0.00219726562500000000f, -0.00189208984375000000f, - 0.01556396484375000000f, 0.01574707031250000000f, - 0.00344848632812500000f, -0.01785278320312500000f, - -0.03280639648437500000f, -0.02920532226562500000f, - -0.01272583007812500000f, -0.00595092773437500000f, - 0.00027465820312500000f, 0.00021362304687500000f, - -0.00268554687499999960f, -0.00527954101562500000f, - -0.00277709960937500000f, 0.00164794921875000000f, - 0.00299072265625000000f, 0.00289916992187500000f, - -0.00085449218750000000f, 0.00601196289062499910f, - -0.01608276367187500000f, -0.01895141601562500000f, - 0.00479125976562500000f, 0.00372314453125000000f, - -0.00512695312500000000f, 0.00448608398437500000f, - 0.00942993164062500000f, 0.00915527343750000000f, - 0.01025390625000000000f, 0.00961303710937500000f, - 0.01208496093750000200f, 0.01245117187500000000f, - 0.01147460937500000000f, 0.00323486328125000000f, - -0.00494384765625000000f, -0.00518798828125000000f, - -0.00961303710937500000f, 0.00299072265625000000f, - 0.02505493164062499700f, 0.02770996093750000000f, - 0.01739501953125000000f, -0.00100708007812500000f, - -0.00952148437500000000f, -0.01733398437500000000f, - -0.01745605468750000000f, -0.01153564453125000000f, - -0.00326538085937500000f, 0.00070190429687500000f, - 0.00476074218750000000f, 0.00283813476562499960f, - -0.00393676757812500000f, -0.00265502929687500000f, - 0.00061035156250000000f, -0.00219726562500000000f, - -0.00112915039062500000f, 0.00122070312500000000f, - 0.00064086914062500000f, 0.00082397460937500000f, - 0.00146484375000000000f, 0.00228881835937500000f, - 0.00234985351562500000f, 0.00198364257812500000f, - 0.00140380859375000000f, 0.00216674804687500000f, - 0.00201416015625000000f, 0.00143432617187500000f, - 0.00415039062500000000f, 0.01049804687500000000f, - 0.00720214843750000000f, 0.00982666015625000000f, - 0.00518798828125000000f, 0.00863647460937500000f, - 0.00820922851562500000f, 0.00888061523437500000f, - 0.00494384765625000000f, -0.00131225585937500000f, - -0.00622558593750000000f, -0.00790405273437500000f, - -0.00732421874999999910f, -0.00930786132812500000f, - -0.01068115234374999800f, -0.00952148437500000000f, - 0.01364135742187499800f, 0.01062011718750000000f, - 0.01052856445312500000f, 0.00784301757812500000f, - 0.00216674804687500000f, -0.00399780273437500000f, - -0.00234985351562500000f, -0.00579833984375000000f, - -0.00616455078125000000f, -0.00122070312500000000f, - 0.00106811523437500000f, 0.00405883789062500000f, - 0.00796508789062500000f, 0.01113891601562500000f, - 0.01336669921875000200f, 0.00924682617187500000f, - -0.00024414062500000000f, 0.00067138671874999989f, - 0.00427246093750000000f, 0.00418090820312500000f, - -0.00915527343750000000f, -0.01956176757812500000f, - -0.02331542968750000000f, -0.00817871093750000000f, - -0.00070190429687500000f, -0.00076293945312500000f, - 0.00222778320312500000f, -0.00494384765625000000f, - -0.00457763671875000000f, -0.00646972656250000000f, - -0.00219726562500000000f, 0.00018310546875000000f, - 0.00119018554687500000f, 0.00238037109375000000f, - 0.00317382812500000040f, -0.00283813476562499960f, - -0.00939941406250000000f, -0.00415039062500000000f, - 0.00357055664062500000f, -0.00216674804687500000f, - -0.01565551757812500000f, -0.02502441406250000000f, - -0.02136230468749999700f, -0.01373291015625000000f, - -0.00491333007812500000f, -0.00070190429687500000f, - 0.00088500976562500000f, 0.00238037109375000000f, - 0.01028442382812500000f, 0.00323486328125000000f, - -0.01239013671875000000f, -0.02386474609375000000f, - -0.00341796875000000000f, 0.00711059570312500000f, - 0.01168823242187499800f, 0.00189208984375000000f, - -0.00384521484375000000f, 0.00018310546875000000f, - -0.00234985351562500000f, -0.00088500976562500000f, - -0.00445556640625000000f, -0.00375366210937500000f, - -0.00155639648437500000f, -0.00082397460937500000f, - -0.00082397460937500000f, -0.01162719726562500000f, - -0.01956176757812500000f, 0.01226806640625000000f, - 0.01644897460937500000f, 0.00024414062500000000f, - -0.00631713867187499910f, -0.01116943359375000000f, - -0.00109863281250000000f, -0.00082397460937500000f, - -0.00622558593750000000f, -0.00692749023437500000f, - -0.00723266601562500000f, -0.00576782226562500000f, - -0.00195312500000000000f, 0.00155639648437500000f, - -0.00280761718750000000f, -0.00418090820312500000f, - -0.00857543945312500000f, 0.00189208984375000000f, - 0.00711059570312500000f, 0.00280761718750000000f, - 0.00451660156250000000f, 0.00897216796875000000f, - 0.01107788085937500200f, 0.01269531250000000200f, - 0.01721191406250000000f, 0.01907348632812500000f, - 0.01129150390625000000f, -0.00109863281250000000f, - -0.01431274414062499800f, -0.01409912109375000000f, - 0.00311279296875000000f, 0.00512695312500000000f, - 0.00097656250000000000f, 0.00357055664062500000f, - -0.00064086914062500000f, 0.00296020507812500000f, - 0.00424194335937500000f, 0.00271606445312500000f, - 0.00317382812500000040f, 0.00106811523437500000f, - 0.00012207031250000000f, 0.00250244140625000000f, - 0.00201416015625000000f, 0.00177001953125000000f, - 0.00222778320312500000f, 0.00283813476562499960f, - -0.00231933593750000000f, -0.00976562500000000000f, - -0.00720214843750000000f, -0.00576782226562500000f, - -0.00619506835937500000f, -0.00433349609375000000f, - -0.00082397460937500000f, -0.00222778320312500000f, - 0.00027465820312500000f, -0.00027465820312500000f, - -0.00076293945312500000f, 0.00036621093750000000f, - -0.00045776367187499995f, 0.00012207031250000000f, - 0.00012207031250000000f, -0.00152587890625000000f, - 0.00958251953125000000f, 0.00549316406250000000f, - 0.00494384765625000000f, -0.00149536132812500000f, - 0.00607299804687500000f, -0.00329589843750000000f, - -0.00692749023437500000f, -0.00201416015625000000f, - -0.01364135742187499800f, -0.00204467773437500000f, - -0.00805664062500000000f, -0.01202392578124999800f, - 0.00015258789062500000f, 0.00167846679687500000f, - -0.00405883789062500000f, -0.00537109374999999910f, - -0.00354003906250000000f, -0.00735473632812500090f, - 0.00830078125000000000f, 0.00332641601562499960f, - 0.00860595703125000000f, 0.00799560546875000000f, - 0.00585937500000000000f, -0.00195312500000000000f, - -0.01196289062500000000f, -0.01568603515625000000f, - 0.00476074218750000000f, 0.00619506835937500000f, - 0.00469970703125000000f, 0.00219726562500000000f, - -0.00103759765625000000f, -0.00488281250000000000f, - -0.00222778320312500000f, 0.00009155273437500000f, - -0.00100708007812500000f, -0.01315307617187500000f, - 0.00979614257812500000f, 0.00054931640625000000f, - -0.01730346679687500000f, -0.01800537109375000000f, - -0.00329589843750000000f, 0.00268554687499999960f, - 0.00201416015625000000f, 0.00155639648437500000f, - -0.00094604492187500000f, -0.00588989257812500000f, - -0.00140380859375000000f, 0.00198364257812500000f, - -0.00088500976562500000f, -0.00070190429687500000f, - 0.00656127929687500000f, -0.00094604492187500000f, - 0.00308227539062500000f, -0.00344848632812500000f, - 0.00097656250000000000f, 0.00927734375000000000f, - 0.00268554687499999960f, 0.00976562500000000000f, - 0.01367187500000000000f, 0.00015258789062500000f, - -0.01339721679687500000f, -0.01715087890625000000f, - -0.01550292968750000000f, -0.00411987304687500000f, - -0.00039672851562500005f, -0.00521850585937500000f, - -0.00024414062500000000f, 0.00555419921875000000f, - -0.00302124023437500040f, -0.00552368164062500000f, - -0.00454711914062500000f, 0.01147460937500000000f, - 0.01452636718750000000f, 0.00195312500000000000f, - -0.01208496093750000200f, -0.01989746093750000000f, - -0.00457763671875000000f, 0.00537109374999999910f, - 0.00677490234375000000f, 0.00198364257812500000f, - -0.01800537109375000000f, 0.02194213867187500300f, - 0.00827026367187500000f, 0.01217651367187500000f, - 0.00747680664062500000f, 0.00219726562500000000f, - -0.00476074218750000000f, -0.00463867187500000000f, - -0.00537109374999999910f, 0.00180053710937500000f, - 0.00286865234375000000f, 0.00381469726562499960f, - -0.00027465820312500000f, -0.00021362304687500000f, - 0.00027465820312500000f, 0.00003051757812500000f, - -0.00186157226562500000f, -0.00354003906250000000f, - -0.00250244140625000000f, 0.00003051757812500000f, - 0.00241088867187500000f, 0.00067138671874999989f, - -0.00134277343749999980f, -0.00045776367187499995f, - -0.00146484375000000000f, -0.00198364257812500000f, - -0.00189208984375000000f, -0.00308227539062500000f, - -0.00311279296875000000f, -0.00164794921875000000f, - -0.00213623046875000000f, -0.00238037109375000000f, - -0.00244140625000000000f, -0.00076293945312500000f, - 0.01214599609375000000f, 0.00216674804687500000f, - 0.00424194335937500000f, 0.00115966796875000000f, - 0.00274658203125000000f, 0.00592041015625000000f, - 0.00677490234375000000f, 0.00759887695312500000f, - 0.00503540039062499910f, 0.00286865234375000000f, - 0.00674438476562500000f, 0.00799560546875000000f, - 0.00497436523437500000f, 0.00277709960937500000f, - -0.00628662109375000000f, 0.01748657226562500000f, - 0.00610351562500000000f, -0.00875854492187500000f, - -0.00448608398437500000f, 0.00015258789062500000f, - -0.00054931640625000000f, -0.00259399414062500000f, - -0.00225830078125000000f, -0.00381469726562499960f, - -0.00265502929687500000f, 0.00259399414062500000f, - 0.00430297851562500000f, 0.00012207031250000000f, - -0.00012207031250000000f, 0.00085449218750000000f, - 0.00714111328125000000f, 0.00146484375000000000f, - -0.00457763671875000000f, -0.00338745117187500000f, - -0.01544189453125000000f, 0.00723266601562500000f, - -0.00637817382812500090f, 0.01052856445312500000f, - 0.00286865234375000000f, -0.00378417968750000000f, - 0.00234985351562500000f, 0.00369262695312500000f, - 0.00436401367187500000f, 0.00036621093750000000f, - -0.00244140625000000000f, -0.00146484375000000000f, - 0.00582885742187500000f, 0.00439453125000000000f, - -0.00283813476562499960f, -0.00198364257812500000f, - -0.00460815429687500000f, -0.01962280273437500000f, - 0.01327514648437500000f, 0.00323486328125000000f, - 0.00265502929687500000f, 0.00021362304687500000f, - 0.00198364257812500000f, 0.00311279296875000000f, - 0.00286865234375000000f, 0.00207519531250000000f, - 0.00015258789062500000f, 0.00302124023437500040f, - 0.00677490234375000000f, 0.00283813476562499960f, - 0.00286865234375000000f, 0.01083374023437500000f, - -0.00039672851562500005f, -0.00271606445312500000f, - -0.00695800781250000000f, -0.01535034179687500000f, - 0.00875854492187500000f, 0.00332641601562499960f, - 0.00329589843750000000f, 0.01370239257812500200f, - 0.00772094726562500000f, -0.00088500976562500000f, - -0.00332641601562499960f, -0.00354003906250000000f, - 0.00045776367187499995f, -0.00222778320312500000f, - -0.00061035156250000000f, 0.00399780273437500000f, - -0.00448608398437500000f, 0.00219726562500000000f, - 0.00180053710937500000f, -0.00457763671875000000f, - -0.01812744140625000000f, 0.00833129882812500000f, - 0.00964355468750000000f, 0.00402832031250000000f, - 0.00607299804687500000f, 0.00323486328125000000f, - 0.00604248046875000090f, 0.00646972656250000000f, - 0.00671386718750000000f, 0.00250244140625000000f, - 0.00137329101562500000f, -0.00039672851562500005f, - 0.00680541992187500000f, 0.00418090820312500000f, - 0.00823974609375000000f, 0.00115966796875000000f, - 0.00769042968750000000f, 0.00411987304687500000f, - -0.00540161132812500090f, -0.00631713867187499910f, - -0.01098632812500000000f, -0.00311279296875000000f, - 0.01229858398437500000f, 0.01239013671875000000f, - -0.00042724609375000000f, 0.00253295898437500040f, - 0.00195312500000000000f, 0.00155639648437500000f, - -0.00021362304687500000f, -0.00302124023437500040f, - -0.00296020507812500000f, -0.00268554687499999960f, - -0.00378417968750000000f, -0.00198364257812500000f, - 0.00128173828125000000f, 0.00097656250000000000f, - 0.00085449218750000000f, 0.00088500976562500000f, - 0.00036621093750000000f, 0.00061035156250000000f, - 0.00363159179687500000f, -0.00079345703125000011f, - -0.00646972656250000000f, -0.00613403320312500000f, - 0.01138305664062500000f, 0.00765991210937500090f, - 0.00430297851562500000f, 0.00314331054687500000f, - 0.00109863281250000000f, -0.00158691406250000020f, - 0.00201416015625000000f, 0.00054931640625000000f, - -0.00018310546875000000f, -0.00289916992187500000f, - -0.00598144531250000000f, 0.00015258789062500000f, - 0.00299072265625000000f, -0.00259399414062500000f, - -0.00329589843750000000f, 0.00665283203124999910f, - -0.00500488281250000000f, 0.00061035156250000000f, - 0.01086425781250000000f, 0.00524902343750000000f, - 0.00112915039062500000f, 0.00811767578125000000f, - 0.00070190429687500000f, 0.00341796875000000000f, - -0.00073242187500000000f, -0.00302124023437500040f, - -0.00280761718750000000f, -0.00543212890625000000f, - 0.00088500976562500000f, -0.00848388671875000000f, - 0.01184082031250000000f, -0.00183105468749999980f, - -0.00671386718750000000f, 0.00915527343750000000f, - -0.00039672851562500005f, 0.00469970703125000000f, - 0.00582885742187500000f, 0.00045776367187499995f, - -0.00112915039062500000f, -0.00335693359375000000f, - -0.00466918945312500000f, -0.00457763671875000000f, - -0.00347900390625000000f, -0.00021362304687500000f, - -0.00286865234375000000f, -0.00094604492187500000f, - -0.00189208984375000000f, -0.00540161132812500090f, - 0.00012207031250000000f, -0.00213623046875000000f, - 0.00106811523437500000f, 0.01382446289062500000f, - 0.00448608398437500000f, -0.00753784179687500000f, - -0.01000976562500000000f, 0.00308227539062500000f, - 0.00061035156250000000f, -0.00347900390625000000f, - 0.00448608398437500000f, 0.00329589843750000000f, - -0.00363159179687500000f, -0.00332641601562499960f, - -0.00311279296875000000f, -0.00726318359375000000f, - 0.00167846679687500000f, -0.00311279296875000000f, - 0.00527954101562500000f, -0.00271606445312500000f, - 0.00393676757812500000f, 0.00421142578125000000f, - -0.01007080078124999800f, -0.00488281250000000000f, - 0.01480102539062500000f, 0.00469970703125000000f, - -0.00180053710937500000f, -0.00518798828125000000f, - -0.00061035156250000000f, -0.00103759765625000000f, - -0.00796508789062500000f, -0.00122070312500000000f, - -0.00393676757812500000f, 0.00234985351562500000f, - -0.00256347656250000000f, 0.00210571289062500000f, - 0.00253295898437500040f, 0.00488281250000000000f, - 0.00515747070312500000f, 0.00192260742187500000f, - -0.01574707031250000000f, 0.00091552734374999989f, - 0.01025390625000000000f, 0.00158691406250000020f, - -0.00000000000000000000f, -0.00158691406250000020f, - -0.00378417968750000000f, 0.00482177734375000000f, - 0.00057983398437500000f, 0.00601196289062499910f, - -0.00030517578125000000f, -0.01144409179687500000f, - 0.01235961914062499800f, 0.00869750976562500000f, - 0.00347900390625000000f, -0.01205444335937500000f, - -0.00143432617187500000f, 0.00598144531250000000f, - 0.00189208984375000000f, 0.00265502929687500000f, - -0.00323486328125000000f, -0.00198364257812500000f, - -0.00228881835937500000f, -0.00210571289062500000f, - -0.00039672851562500005f, 0.00103759765625000000f, - 0.00302124023437500040f, 0.00180053710937500000f, - 0.00253295898437500040f, 0.00299072265625000000f, - 0.00134277343749999980f, 0.00000000000000000000f, - 0.00073242187500000000f, 0.00054931640625000000f, - 0.00051879882812500000f, 0.00213623046875000000f, - -0.00067138671874999989f, 0.00592041015625000000f, - 0.00634765625000000090f, 0.00439453125000000000f, - -0.00241088867187500000f, -0.00045776367187499995f, - 0.00097656250000000000f, -0.00317382812500000040f, - -0.00085449218750000000f, -0.00320434570312500000f, - -0.00567626953124999910f, -0.00646972656250000000f, - -0.00695800781250000000f, -0.00241088867187500000f, - -0.00231933593750000000f, 0.00155639648437500000f, - -0.00216674804687500000f, 0.00219726562500000000f, - 0.00360107421875000000f, -0.00103759765625000000f, - -0.00009155273437500000f, -0.00521850585937500000f, - 0.00015258789062500000f, 0.00006103515625000000f, - -0.00329589843750000000f, -0.00381469726562499960f, - 0.00189208984375000000f, -0.00177001953125000000f, - 0.00177001953125000000f, -0.00369262695312500000f, - 0.00222778320312500000f, -0.01422119140625000000f, - 0.00280761718750000000f, 0.00192260742187500000f, - -0.00286865234375000000f, -0.00238037109375000000f, - -0.00231933593750000000f, 0.00646972656250000000f, - 0.00109863281250000000f, -0.00686645507812500000f, - -0.00216674804687500000f, -0.01080322265625000200f, - 0.00463867187500000000f, 0.00436401367187500000f, - -0.00241088867187500000f, -0.00750732421875000000f, - -0.00155639648437500000f, -0.00094604492187500000f, - -0.00018310546875000000f, -0.00823974609375000000f, - 0.00732421874999999910f, 0.00640869140625000000f, - 0.00091552734374999989f, -0.00479125976562500000f, - -0.00704956054687500000f, 0.00225830078125000000f, - -0.00445556640625000000f, 0.00268554687499999960f, - -0.00833129882812500000f, 0.00476074218750000000f, - 0.00280761718750000000f, 0.00170898437500000000f, - 0.00216674804687500000f, 0.00006103515625000000f, - 0.00970458984375000000f, 0.00500488281250000000f, - 0.00097656250000000000f, -0.00335693359375000000f, - -0.00106811523437500000f, -0.00125122070312500000f, - -0.00289916992187500000f, -0.00323486328125000000f, - 0.00033569335937499995f, 0.00402832031250000000f, - -0.00207519531250000000f, 0.00167846679687500000f, - 0.00375366210937500000f, -0.00253295898437500040f, - -0.00454711914062500000f, 0.00646972656250000000f, - 0.00402832031250000000f, 0.00000000000000000000f, - -0.00592041015625000000f, 0.00167846679687500000f, - 0.00628662109375000000f, -0.00329589843750000000f, - -0.01077270507812500000f, 0.00881958007812500000f, - -0.00595092773437500000f, 0.00003051757812500000f, - 0.00711059570312500000f, -0.00067138671874999989f, - -0.00183105468749999980f, 0.00061035156250000000f, - 0.00079345703125000011f, 0.00207519531250000000f, - 0.00506591796875000090f, 0.00082397460937500000f, - -0.00177001953125000000f, 0.00396728515625000000f, - 0.00341796875000000000f, 0.00326538085937500000f, - 0.00082397460937500000f, -0.00503540039062499910f, - 0.00350952148437500040f, -0.00283813476562499960f, - -0.00112915039062500000f, 0.00115966796875000000f, - 0.00253295898437500040f, 0.01473999023437500000f, - 0.00198364257812500000f, -0.00698852539062499910f, - -0.00039672851562500005f, 0.00479125976562500000f, - 0.00259399414062500000f, 0.00152587890625000000f, - 0.00415039062500000000f, 0.00030517578125000000f, - 0.00097656250000000000f, 0.00253295898437500040f, - 0.00250244140625000000f, 0.00167846679687500000f, - 0.00015258789062500000f, -0.00027465820312500000f, - -0.00158691406250000020f, -0.00238037109375000000f, - -0.00247192382812500000f, -0.00155639648437500000f, - 0.00122070312500000000f, 0.00054931640625000000f, - -0.00387573242187500000f, -0.00683593750000000000f, - -0.00125122070312500000f, 0.00161743164062500000f, - -0.00640869140625000000f, -0.00344848632812500000f, - 0.00073242187500000000f, -0.00051879882812500000f, - -0.00570678710937500090f, -0.00271606445312500000f, - 0.00024414062500000000f, 0.00369262695312500000f, - 0.00253295898437500040f, 0.00234985351562500000f, - 0.00277709960937500000f, -0.00225830078125000000f, - -0.00106811523437500000f, -0.00341796875000000000f, - -0.00491333007812500000f, -0.00527954101562500000f, - 0.00311279296875000000f, 0.00402832031250000000f, - -0.00381469726562499960f, -0.00186157226562500000f, - 0.00314331054687500000f, -0.00793457031250000000f, - 0.00158691406250000020f, 0.00506591796875000090f, - -0.00097656250000000000f, -0.00476074218750000000f, - -0.00265502929687500000f, -0.00170898437500000000f, - 0.00183105468749999980f, -0.00213623046875000000f, - -0.00378417968750000000f, 0.00738525390625000000f, - 0.00347900390625000000f, -0.00765991210937500090f, - -0.00506591796875000090f, 0.00613403320312500000f, - 0.00387573242187500000f, 0.00085449218750000000f, - -0.00033569335937499995f, 0.00070190429687500000f, - -0.00244140625000000000f, -0.00350952148437500040f, - -0.00061035156250000000f, -0.00155639648437500000f, - -0.01062011718750000000f, 0.01037597656250000000f, - -0.00103759765625000000f, 0.00405883789062500000f, - 0.00039672851562500005f, 0.00280761718750000000f, - -0.00378417968750000000f, -0.00415039062500000000f, - -0.00366210937499999960f, -0.00079345703125000011f, - -0.00018310546875000000f, 0.00051879882812500000f, - 0.00085449218750000000f, 0.00064086914062500000f, - 0.00366210937499999960f, -0.00512695312500000000f, - 0.00488281250000000000f, -0.00106811523437500000f, - 0.00350952148437500040f, 0.00085449218750000000f, - 0.00027465820312500000f, 0.00021362304687500000f, - -0.00170898437500000000f, 0.00119018554687500000f, - 0.00476074218750000000f, 0.00781250000000000000f, - -0.00054931640625000000f, 0.00003051757812500000f, - 0.00845336914062500000f, 0.00250244140625000000f, - -0.00213623046875000000f, -0.00439453125000000000f, - -0.00268554687499999960f, -0.00039672851562500005f, - -0.00180053710937500000f, -0.00479125976562500000f, - 0.00024414062500000000f, -0.00408935546875000000f, - 0.00064086914062500000f, -0.00122070312500000000f, - 0.00177001953125000000f, -0.00064086914062500000f, - 0.00592041015625000000f, -0.00842285156250000000f, - 0.00296020507812500000f, 0.00851440429687500000f, - -0.00170898437500000000f, -0.00427246093750000000f, - 0.00381469726562499960f, 0.00173950195312500000f, - -0.00561523437500000000f, -0.00622558593750000000f, - -0.00213623046875000000f, -0.00006103515625000000f, - 0.00390625000000000000f, -0.00616455078125000000f, - -0.00238037109375000000f, 0.00701904296875000090f, - -0.00070190429687500000f, 0.00491333007812500000f, - -0.00311279296875000000f, 0.00003051757812500000f, - 0.00003051757812500000f, 0.00549316406250000000f, - -0.00094604492187500000f, -0.00262451171875000000f, - -0.00509643554687500000f, -0.00173950195312500000f, - -0.00183105468749999980f, 0.00082397460937500000f, - -0.00039672851562500005f, 0.00302124023437500040f, - 0.00329589843750000000f, 0.00338745117187500000f, - 0.00231933593750000000f, 0.00210571289062500000f, - 0.00103759765625000000f, -0.00064086914062500000f, - 0.00161743164062500000f, 0.00115966796875000000f, - 0.00103759765625000000f, 0.00238037109375000000f, - 0.00222778320312500000f, 0.00668334960937500090f, - 0.00155639648437500000f, 0.00045776367187499995f, - -0.00219726562500000000f, -0.00314331054687500000f, - -0.00631713867187499910f, 0.00091552734374999989f, - 0.00650024414062500000f, -0.00042724609375000000f, - 0.00094604492187500000f, -0.00286865234375000000f, - -0.00122070312500000000f, -0.00439453125000000000f, - 0.00204467773437500000f, 0.00012207031250000000f, - 0.00320434570312500000f, 0.00180053710937500000f, - -0.00732421874999999910f, 0.00076293945312500000f, - 0.00744628906250000000f, 0.00210571289062500000f, - 0.00177001953125000000f, 0.00070190429687500000f, - -0.00073242187500000000f, -0.00015258789062500000f, - -0.00045776367187499995f, -0.00405883789062500000f, - -0.00216674804687500000f, -0.00204467773437500000f, - 0.00552368164062500000f, 0.00088500976562500000f, - -0.00137329101562500000f, 0.00369262695312500000f, - 0.00292968750000000000f, 0.00155639648437500000f, - -0.00219726562500000000f, -0.00161743164062500000f, - 0.00170898437500000000f, -0.00466918945312500000f, - -0.00082397460937500000f, 0.00259399414062500000f, - 0.00558471679687500000f, 0.00643920898437500000f, - 0.00320434570312500000f, -0.00103759765625000000f, - -0.00140380859375000000f, 0.00131225585937500000f, - -0.00219726562500000000f, -0.00283813476562499960f, - 0.00109863281250000000f, -0.00390625000000000000f, - 0.00088500976562500000f, 0.00338745117187500000f, - -0.00289916992187500000f, -0.00476074218750000000f, - -0.00546264648437500000f, -0.00717163085937500000f, - 0.00064086914062500000f, -0.00119018554687500000f, - -0.00216674804687500000f, -0.00100708007812500000f, - -0.00186157226562500000f, -0.00769042968750000000f, - 0.00701904296875000090f, -0.00399780273437500000f, - 0.00479125976562500000f, -0.00064086914062500000f, - -0.00259399414062500000f, -0.00085449218750000000f, - -0.00375366210937500000f, 0.00244140625000000000f, - -0.00488281250000000000f, 0.00192260742187500000f, - 0.00143432617187500000f, -0.00018310546875000000f, - -0.00149536132812500000f, -0.00292968750000000000f, - -0.00057983398437500000f, 0.00051879882812500000f, - -0.00177001953125000000f, 0.00051879882812500000f, - -0.00000000000000000000f, -0.00039672851562500005f, - -0.00518798828125000000f, 0.00076293945312500000f, - -0.00106811523437500000f, 0.00180053710937500000f, - 0.00030517578125000000f, -0.00094604492187500000f, - -0.01260375976562500000f, 0.00247192382812500000f, - 0.00189208984375000000f, 0.00054931640625000000f, - -0.00500488281250000000f, 0.00747680664062500000f, - 0.00280761718750000000f, -0.00503540039062499910f, - 0.00128173828125000000f, 0.00079345703125000011f, - 0.00384521484375000000f, -0.00756835937500000000f, - 0.00588989257812500000f, -0.00167846679687500000f, - 0.00048828125000000000f, 0.00119018554687500000f, - 0.00042724609375000000f, 0.00152587890625000000f + -0.46093750000000000000f, -0.41015625000000000000f, + -0.35156250000000000000f, -0.28906250000000000000f, + -0.22656250000000000000f, -0.17187499999999997000f, + -0.11328125000000000000f, -0.05078125000000000700f, + 0.01171875000000000000f, 0.07031250000000000000f, + 0.12890625000000000000f, 0.19140625000000000000f, + 0.25000000000000000000f, 0.30859375000000000000f, + 0.37109375000000000000f, 0.42578124999999994000f, + -0.46093750000000000000f, -0.42968750000000000000f, + -0.37109375000000000000f, -0.31640625000000000000f, + -0.25781250000000000000f, -0.20312500000000003000f, + -0.14453125000000000000f, -0.08203125000000000000f, + -0.01562500000000000000f, 0.04687500000000000000f, + 0.10546875000000000000f, 0.16796875000000000000f, + 0.23437499999999997000f, 0.30078125000000000000f, + 0.36328124999999994000f, 0.41796875000000000000f, + -0.46874999999999994000f, -0.44531250000000000000f, + -0.36718750000000000000f, -0.30468750000000000000f, + -0.23437499999999997000f, -0.17578125000000000000f, + -0.11328125000000000000f, -0.05078125000000000700f, + 0.01171875000000000000f, 0.07421875000000000000f, + 0.13281250000000000000f, 0.19140625000000000000f, + 0.25390625000000000000f, 0.31250000000000000000f, + 0.37109375000000000000f, 0.42968750000000000000f, + -0.47656250000000000000f, -0.45703125000000000000f, + -0.40234375000000000000f, -0.34374999999999994000f, + -0.26953125000000000000f, -0.20312500000000003000f, + -0.14453125000000000000f, -0.07421875000000000000f, + -0.00781250000000000000f, 0.05859374999999999300f, + 0.12109375000000000000f, 0.18359375000000000000f, + 0.24609375000000000000f, 0.30859375000000000000f, + 0.37109375000000000000f, 0.42968750000000000000f, + -0.46484375000000000000f, -0.43359375000000000000f, + -0.37109375000000000000f, -0.31640625000000000000f, + -0.26562500000000000000f, -0.20703125000000000000f, + -0.14062500000000000000f, -0.08593749999999998600f, + -0.01953125000000000000f, 0.03515625000000000000f, + 0.10546875000000000000f, 0.15625000000000000000f, + 0.21875000000000000000f, 0.27343750000000000000f, + 0.33203125000000000000f, 0.37500000000000000000f, + -0.45703125000000000000f, -0.41406250000000000000f, + -0.35156250000000000000f, -0.29687500000000000000f, + -0.24218750000000000000f, -0.19140625000000000000f, + -0.12109375000000000000f, -0.05859374999999999300f, + -0.00781250000000000000f, 0.03906250000000000000f, + 0.10156250000000001000f, 0.15234375000000000000f, + 0.19921875000000000000f, 0.25000000000000000000f, + 0.31250000000000000000f, 0.35156250000000000000f, + -0.44140625000000000000f, -0.39843750000000000000f, + -0.32812500000000000000f, -0.26953125000000000000f, + -0.21093750000000000000f, -0.16406250000000000000f, + -0.10546875000000000000f, -0.05859374999999999300f, + -0.00390625000000000000f, 0.05078125000000000700f, + 0.10937500000000000000f, 0.16406250000000000000f, + 0.22656250000000000000f, 0.28515625000000000000f, + 0.35156250000000000000f, 0.41406250000000000000f, + -0.44921875000000006000f, -0.40625000000000006000f, + -0.35156250000000000000f, -0.29687500000000000000f, + -0.24609375000000000000f, -0.19531250000000000000f, + -0.13671875000000000000f, -0.08203125000000000000f, + -0.03125000000000000000f, 0.02734375000000000000f, + 0.08593749999999998600f, 0.14453125000000000000f, + 0.20703125000000000000f, 0.27343750000000000000f, + 0.34374999999999994000f, 0.41796875000000000000f, + -0.42578124999999994000f, -0.38281250000000000000f, + -0.32031250000000000000f, -0.25781250000000000000f, + -0.19140625000000000000f, -0.13671875000000000000f, + -0.07031250000000000000f, -0.00781250000000000000f, + 0.05468750000000000000f, 0.11718749999999999000f, + 0.17578125000000000000f, 0.22656250000000000000f, + 0.28515625000000000000f, 0.33593750000000000000f, + 0.39062500000000000000f, 0.44140625000000000000f, + -0.41406250000000000000f, -0.37500000000000000000f, + -0.32031250000000000000f, -0.26562500000000000000f, + -0.20703125000000000000f, -0.15625000000000000000f, + -0.09765625000000000000f, -0.03906250000000000000f, + 0.01953125000000000000f, 0.07421875000000000000f, + 0.13281250000000000000f, 0.19140625000000000000f, + 0.25390625000000000000f, 0.31250000000000000000f, + 0.37500000000000000000f, 0.42968750000000000000f, + -0.46874999999999994000f, -0.44140625000000000000f, + -0.38671875000000006000f, -0.33593750000000000000f, + -0.28125000000000000000f, -0.23046875000000000000f, + -0.19531250000000000000f, -0.14062500000000000000f, + -0.02734375000000000000f, 0.03906250000000000000f, + 0.10546875000000000000f, 0.17578125000000000000f, + 0.23828125000000000000f, 0.30468750000000000000f, + 0.36718750000000000000f, 0.42578124999999994000f, + -0.45703125000000000000f, -0.42578124999999994000f, + -0.37500000000000000000f, -0.32812500000000000000f, + -0.28125000000000000000f, -0.22656250000000000000f, + -0.18359375000000000000f, -0.12500000000000000000f, + -0.07421875000000000000f, -0.00781250000000000000f, + 0.08984375000000000000f, 0.15625000000000000000f, + 0.22265625000000000000f, 0.29296875000000000000f, + 0.35937500000000000000f, 0.42578124999999994000f, + -0.46484375000000000000f, -0.43750000000000000000f, + -0.38671875000000006000f, -0.33984375000000000000f, + -0.30468750000000000000f, -0.25781250000000000000f, + -0.16406250000000000000f, -0.07812500000000000000f, + -0.02343750000000000000f, 0.04296874999999999300f, + 0.10937500000000000000f, 0.17187499999999997000f, + 0.23437499999999997000f, 0.30468750000000000000f, + 0.36718750000000000000f, 0.42968750000000000000f, + -0.42968750000000000000f, -0.37890625000000000000f, + -0.30859375000000000000f, -0.24218750000000000000f, + -0.17187499999999997000f, -0.10156250000000001000f, + -0.03125000000000000000f, 0.03125000000000000000f, + 0.08984375000000000000f, 0.14062500000000000000f, + 0.19140625000000000000f, 0.23437499999999997000f, + 0.28125000000000000000f, 0.32812500000000000000f, + 0.37890625000000000000f, 0.43359375000000000000f, + -0.42578124999999994000f, -0.36718750000000000000f, + -0.28515625000000000000f, -0.21484375000000000000f, + -0.14453125000000000000f, -0.08593749999999998600f, + -0.03125000000000000000f, 0.00781250000000000000f, + 0.05078125000000000700f, 0.09375000000000000000f, + 0.14453125000000000000f, 0.19531250000000000000f, + 0.25390625000000000000f, 0.30859375000000000000f, + 0.37109375000000000000f, 0.42968750000000000000f, + -0.44531250000000000000f, -0.39453125000000000000f, + -0.32421875000000006000f, -0.26171875000000000000f, + -0.18750000000000000000f, -0.12109375000000000000f, + -0.05859374999999999300f, -0.00390625000000000000f, + 0.03906250000000000000f, 0.08203125000000000000f, + 0.13281250000000000000f, 0.19140625000000000000f, + 0.25390625000000000000f, 0.31250000000000000000f, + 0.37500000000000000000f, 0.43359375000000000000f, + -0.46093750000000000000f, -0.43750000000000000000f, + -0.39062500000000000000f, -0.35937500000000000000f, + -0.31250000000000000000f, -0.19140625000000000000f, + -0.13281250000000000000f, -0.07421875000000000000f, + -0.02734375000000000000f, 0.03125000000000000000f, + 0.10156250000000001000f, 0.16796875000000000000f, + 0.23437499999999997000f, 0.30468750000000000000f, + 0.36718750000000000000f, 0.42968750000000000000f, + -0.46093750000000000000f, -0.43750000000000000000f, + -0.39062500000000000000f, -0.30468750000000000000f, + -0.23828125000000000000f, -0.19921875000000000000f, + -0.14843750000000000000f, -0.10156250000000001000f, + -0.02343750000000000000f, 0.02343750000000000000f, + 0.07421875000000000000f, 0.12890625000000000000f, + 0.20312500000000003000f, 0.28515625000000000000f, + 0.36718750000000000000f, 0.42968750000000000000f, + -0.45703125000000000000f, -0.42968750000000000000f, + -0.36718750000000000000f, -0.30859375000000000000f, + -0.26171875000000000000f, -0.21093750000000000000f, + -0.16406250000000000000f, -0.10546875000000000000f, + -0.06250000000000000000f, -0.02343750000000000000f, + 0.03125000000000000000f, 0.13671875000000000000f, + 0.22265625000000000000f, 0.29296875000000000000f, + 0.35937500000000000000f, 0.42578124999999994000f, + -0.44140625000000000000f, -0.35937500000000000000f, + -0.27734375000000000000f, -0.22265625000000000000f, + -0.17578125000000000000f, -0.13281250000000000000f, + -0.08593749999999998600f, -0.03906250000000000000f, + 0.01562500000000000000f, 0.06640625000000000000f, + 0.12500000000000000000f, 0.17968750000000000000f, + 0.24218750000000000000f, 0.30078125000000000000f, + 0.36328124999999994000f, 0.41796875000000000000f, + -0.46874999999999994000f, -0.42968750000000000000f, + -0.35156250000000000000f, -0.27734375000000000000f, + -0.21093750000000000000f, -0.14453125000000000000f, + -0.06640625000000000000f, -0.00390625000000000000f, + 0.06250000000000000000f, 0.12109375000000000000f, + 0.17187499999999997000f, 0.21875000000000000000f, + 0.27343750000000000000f, 0.32031250000000000000f, + 0.37890625000000000000f, 0.43359375000000000000f, + -0.42968750000000000000f, -0.39453125000000000000f, + -0.34374999999999994000f, -0.31250000000000000000f, + -0.26953125000000000000f, -0.19531250000000000000f, + -0.11718749999999999000f, -0.05078125000000000700f, + 0.00781250000000000000f, 0.06640625000000000000f, + 0.12500000000000000000f, 0.18750000000000000000f, + 0.25000000000000000000f, 0.31250000000000000000f, + 0.37890625000000000000f, 0.43359375000000000000f, + -0.46093750000000000000f, -0.43750000000000000000f, + -0.39453125000000000000f, -0.33593750000000000000f, + -0.21484375000000000000f, -0.16015625000000000000f, + -0.11328125000000000000f, -0.06250000000000000000f, + -0.01562500000000000000f, 0.03906250000000000000f, + 0.11718749999999999000f, 0.16796875000000000000f, + 0.21875000000000000000f, 0.28125000000000000000f, + 0.35156250000000000000f, 0.41796875000000000000f, + -0.43750000000000000000f, -0.40234375000000000000f, + -0.34374999999999994000f, -0.28906250000000000000f, + -0.23828125000000000000f, -0.19140625000000000000f, + -0.14062500000000000000f, -0.09375000000000000000f, + -0.03906250000000000000f, 0.01562500000000000000f, + 0.06640625000000000000f, 0.11328125000000000000f, + 0.16796875000000000000f, 0.22265625000000000000f, + 0.28906250000000000000f, 0.39843750000000000000f, + -0.46093750000000000000f, -0.41796875000000000000f, + -0.32812500000000000000f, -0.26953125000000000000f, + -0.20312500000000003000f, -0.13671875000000000000f, + -0.06640625000000000000f, -0.01953125000000000000f, + 0.03515625000000000000f, 0.07812500000000000000f, + 0.13281250000000000000f, 0.17578125000000000000f, + 0.23046875000000000000f, 0.26953125000000000000f, + 0.32812500000000000000f, 0.36328124999999994000f, + -0.41406250000000000000f, -0.37109375000000000000f, + -0.30468750000000000000f, -0.24609375000000000000f, + -0.18750000000000000000f, -0.14062500000000000000f, + -0.09375000000000000000f, -0.05078125000000000700f, + -0.00390625000000000000f, 0.03515625000000000000f, + 0.08203125000000000000f, 0.12500000000000000000f, + 0.17968750000000000000f, 0.23437499999999997000f, + 0.29687500000000000000f, 0.35937500000000000000f, + -0.45312500000000000000f, -0.39453125000000000000f, + -0.33203125000000000000f, -0.26953125000000000000f, + -0.21093750000000000000f, -0.14453125000000000000f, + -0.08203125000000000000f, -0.02343750000000000000f, + 0.04296874999999999300f, 0.09375000000000000000f, + 0.15234375000000000000f, 0.20703125000000000000f, + 0.29687500000000000000f, 0.36328124999999994000f, + 0.40625000000000006000f, 0.43750000000000000000f, + -0.44531250000000000000f, -0.40625000000000006000f, + -0.33984375000000000000f, -0.28906250000000000000f, + -0.23828125000000000000f, -0.19531250000000000000f, + -0.15625000000000000000f, -0.11718749999999999000f, + -0.07421875000000000000f, -0.03906250000000000000f, + 0.01562500000000000000f, 0.05468750000000000000f, + 0.14062500000000000000f, 0.26953125000000000000f, + 0.34765625000000000000f, 0.42578124999999994000f, + -0.43750000000000000000f, -0.38281250000000000000f, + -0.33203125000000000000f, -0.28125000000000000000f, + -0.21093750000000000000f, -0.13671875000000000000f, + -0.08984375000000000000f, -0.04296874999999999300f, + 0.01171875000000000000f, 0.07812500000000000000f, + 0.14843750000000000000f, 0.21875000000000000000f, + 0.26953125000000000000f, 0.31640625000000000000f, + 0.35156250000000000000f, 0.42187500000000000000f, + -0.45312500000000000000f, -0.39453125000000000000f, + -0.32812500000000000000f, -0.27343750000000000000f, + -0.21484375000000000000f, -0.15625000000000000000f, + -0.09765625000000000000f, -0.03125000000000000000f, + 0.04296874999999999300f, 0.11718749999999999000f, + 0.16015625000000000000f, 0.19140625000000000000f, + 0.24218750000000000000f, 0.32421875000000006000f, + 0.41015625000000000000f, 0.45703125000000000000f, + -0.44921875000000006000f, -0.38281250000000000000f, + -0.32031250000000000000f, -0.23828125000000000000f, + -0.18750000000000000000f, -0.15625000000000000000f, + -0.11328125000000000000f, -0.05468750000000000000f, + 0.02343750000000000000f, 0.08593749999999998600f, + 0.15234375000000000000f, 0.20703125000000000000f, + 0.26562500000000000000f, 0.32031250000000000000f, + 0.37500000000000000000f, 0.42968750000000000000f, + -0.44140625000000000000f, -0.37500000000000000000f, + -0.29687500000000000000f, -0.26562500000000000000f, + -0.23046875000000000000f, -0.17187499999999997000f, + -0.08203125000000000000f, -0.03125000000000000000f, + 0.01171875000000000000f, 0.05859374999999999300f, + 0.12890625000000000000f, 0.19140625000000000000f, + 0.25390625000000000000f, 0.31250000000000000000f, + 0.37109375000000000000f, 0.42968750000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.02343750000000000000f, + -0.02343750000000000000f, -0.01953125000000000000f, + -0.01562500000000000000f, -0.01562500000000000000f, + -0.01171875000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + -0.01562500000000000000f, -0.01953125000000000000f, + -0.01953125000000000000f, -0.01562500000000000000f, + -0.01171875000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.03515625000000000000f, 0.03125000000000000000f, + 0.01953125000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.01953125000000000000f, -0.03125000000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.03125000000000000000f, + 0.03515625000000000000f, 0.03125000000000000000f, + 0.01953125000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.01562500000000000000f, 0.01953125000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.01953125000000000000f, + -0.03125000000000000000f, -0.03125000000000000000f, + -0.02343750000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00781250000000000000f, + 0.01953125000000000000f, 0.01953125000000000000f, + 0.01953125000000000000f, 0.03125000000000000000f, + 0.03515625000000000000f, 0.02734375000000000000f, + 0.02343750000000000000f, 0.01171875000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + -0.02343750000000000000f, -0.02734375000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.01562500000000000000f, 0.02734375000000000000f, + 0.01562500000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, -0.01953125000000000000f, + -0.02734375000000000000f, 0.01953125000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + -0.02734375000000000000f, -0.02343750000000000000f, + -0.01953125000000000000f, -0.01171875000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.01562500000000000000f, + 0.01953125000000000000f, 0.01562500000000000000f, + 0.00390625000000000000f, -0.01171875000000000000f, + -0.02343750000000000000f, -0.02734375000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + -0.02343750000000000000f, -0.03515625000000000000f, + -0.01562500000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.01953125000000000000f, -0.02734375000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.01171875000000000000f, + 0.01562500000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.01953125000000000000f, + -0.01562500000000000000f, -0.01171875000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.01171875000000000000f, + 0.01171875000000000000f, 0.00000000000000000000f, + -0.01562500000000000000f, -0.02343750000000000000f, + -0.01562500000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.01953125000000000000f, + -0.02734375000000000000f, -0.01953125000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.01562500000000000000f, -0.02734375000000000000f, + 0.01953125000000000000f, 0.01171875000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.01171875000000000000f, + -0.02734375000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.01562500000000000000f, 0.02343750000000000000f, + 0.02343750000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.01562500000000000000f, -0.01562500000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01562500000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, -0.01562500000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.01171875000000000000f, + 0.01562500000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.01953125000000000000f, + -0.01562500000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + -0.01562500000000000000f, 0.00390625000000000000f, + 0.01562500000000000000f, 0.01562500000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01953125000000000000f, 0.01562500000000000000f, + -0.00390625000000000000f, -0.01953125000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.01562500000000000000f, + -0.02734375000000000000f, 0.01953125000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.01171875000000000000f, -0.01171875000000000000f, + 0.02343750000000000000f, 0.01953125000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, -0.01562500000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + 0.01562500000000000000f, 0.00000000000000000000f, + -0.01562500000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.01562500000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.01171875000000000000f, + -0.00781250000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, -0.01953125000000000000f, + 0.01562500000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00781250000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.01953125000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.01171875000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.01953125000000000000f, + 0.01171875000000000000f, -0.00781250000000000000f, + -0.01562500000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.01953125000000000000f, + 0.01171875000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.01562500000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.01562500000000000000f, 0.00781250000000000000f, + -0.01171875000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00781250000000000000f, + -0.00781250000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00781250000000000000f, + -0.01171875000000000000f, 0.00781250000000000000f, + 0.01171875000000000000f, 0.00000000000000000000f, + -0.01562500000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.01171875000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.01171875000000000000f, + 0.00781250000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.01171875000000000000f, -0.01562500000000000000f, + 0.01953125000000000000f, 0.01171875000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.01171875000000000000f, + 0.01171875000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00781250000000000000f, -0.00781250000000000000f, + 0.00781250000000000000f, 0.01171875000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, 0.01562500000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.01953125000000000000f, 0.01171875000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00781250000000000000f, -0.01171875000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.01562500000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.01562500000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00781250000000000000f, -0.01562500000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + -0.00781250000000000000f, 0.01171875000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00390625000000000000f, -0.00781250000000000000f, + 0.00000000000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.01171875000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + -0.00781250000000000000f, 0.01171875000000000000f, + -0.00390625000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00390625000000000000f, 0.00781250000000000000f, + -0.01562500000000000000f, -0.00390625000000000000f, + -0.00781250000000000000f, -0.00390625000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + -0.00390625000000000000f, 0.00390625000000000000f, + 0.00000000000000000000f, 0.00390625000000000000f, + 0.00390625000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f, + 0.00000000000000000000f, 0.00000000000000000000f }; const SKP_Silk_NLSF_CBS_FLP SKP_Silk_NLSF_CB1_16_Stage_info_FLP[ NLSF_MSVQ_CB1_16_STAGES ] = diff --git a/src_FLP/SKP_Silk_tables_other_FLP.c b/src_FLP/SKP_Silk_tables_other_FLP.c index 1531446fcc447e879764f9c4e01c4480ef06f295..00384b4b97aead003e55efb1d37688a1e03a0b83 100644 --- a/src_FLP/SKP_Silk_tables_other_FLP.c +++ b/src_FLP/SKP_Silk_tables_other_FLP.c @@ -26,8 +26,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ #include "SKP_Silk_structs_FLP.h" -#include "SKP_Silk_define_FLP.h" -#include "SKP_Silk_perceptual_parameters.h" +#include "SKP_Silk_tables_FLP.h" const SKP_float SKP_Silk_HarmShapeFIR_FLP[ HARM_SHAPE_FIR_TAPS ] = { 16384.0f / 65536.0f, 32767.0f / 65536.0f, 16384.0f / 65536.0f }; diff --git a/src_FLP/SKP_Silk_wrappers_FLP.c b/src_FLP/SKP_Silk_wrappers_FLP.c index 41da37928b4349b41b88bc335657d8106e325a5f..e27cf2639b0f596c1c0bacbe4dd9493046ee08b7 100644 --- a/src_FLP/SKP_Silk_wrappers_FLP.c +++ b/src_FLP/SKP_Silk_wrappers_FLP.c @@ -134,10 +134,10 @@ SKP_int SKP_Silk_VAD_FLP( const SKP_int16 *pIn /* I Input signal */ ) { - SKP_int i, ret, SA_Q8, Tilt_Q15; + SKP_int i, ret, SA_Q8, SNR_dB_Q7, Tilt_Q15; SKP_int Quality_Bands_Q15[ VAD_N_BANDS ]; - ret = SKP_Silk_VAD_GetSA_Q8( &psEnc->sCmn.sVAD, &SA_Q8, Quality_Bands_Q15, &Tilt_Q15, + ret = SKP_Silk_VAD_GetSA_Q8( &psEnc->sCmn.sVAD, &SA_Q8, &SNR_dB_Q7, Quality_Bands_Q15, &Tilt_Q15, pIn, psEnc->sCmn.frame_length, psEnc->sCmn.fs_kHz ); psEnc->speech_activity = ( SKP_float )SA_Q8 / 256.0f; @@ -165,7 +165,7 @@ void SKP_Silk_NSQ_wrapper_FLP( SKP_int16 x_16[ MAX_FRAME_LENGTH ]; /* Prediction and coding parameters */ SKP_int32 Gains_Q16[ MAX_NB_SUBFR ]; - SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER ); + SKP_DWORD_ALIGN SKP_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ]; SKP_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ]; SKP_int LTP_scale_Q14; @@ -180,7 +180,7 @@ void SKP_Silk_NSQ_wrapper_FLP( /* Convert control struct to fix control struct */ /* Noise shape parameters */ for( i = 0; i < MAX_NB_SUBFR * MAX_SHAPE_LPC_ORDER; i++ ) { - AR2_Q13[ i ] = (SKP_int16)SKP_SAT16( SKP_float2int( psEncCtrl->AR2[ i ] * 8192.0f ) ); + AR2_Q13[ i ] = SKP_float2int( psEncCtrl->AR2[ i ] * 8192.0f ); } for( i = 0; i < MAX_NB_SUBFR; i++ ) { @@ -222,7 +222,7 @@ void SKP_Silk_NSQ_wrapper_FLP( /* Call NSQ */ if( useLBRR ) { - if( psEnc->sCmn.nStatesDelayedDecision > 1 ) { + if( psEnc->sCmn.nStatesDelayedDecision > 1 || psEnc->sCmn.warping_Q16 > 0 ) { SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ_LBRR, x_16, q, psEncCtrl->sCmn.NLSFInterpCoef_Q2, PredCoef_Q12[ 0 ], LTPCoef_Q14, AR2_Q13, HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, Lambda_Q10, LTP_scale_Q14 ); @@ -232,7 +232,7 @@ void SKP_Silk_NSQ_wrapper_FLP( HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, Lambda_Q10, LTP_scale_Q14 ); } } else { - if( psEnc->sCmn.nStatesDelayedDecision > 1 ) { + if( psEnc->sCmn.nStatesDelayedDecision > 1 || psEnc->sCmn.warping_Q16 > 0 ) { SKP_Silk_NSQ_del_dec( &psEnc->sCmn, &psEncCtrl->sCmn, &psEnc->sNSQ, x_16, q, psEncCtrl->sCmn.NLSFInterpCoef_Q2, PredCoef_Q12[ 0 ], LTPCoef_Q14, AR2_Q13, HarmShapeGain_Q14, Tilt_Q14, LF_shp_Q14, Gains_Q16, Lambda_Q10, LTP_scale_Q14 ); diff --git a/src_SigProc_FIX/SKP_Silk_A2NLSF.c b/src_SigProc_FIX/SKP_Silk_A2NLSF.c index 23c1760b6e64ad96f4643247ae679a794dec0d87..d098ae1ca83bb87c4136b693dce93740a70dc277 100644 --- a/src_SigProc_FIX/SKP_Silk_A2NLSF.c +++ b/src_SigProc_FIX/SKP_Silk_A2NLSF.c @@ -34,9 +34,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_SigProc_FIX.h" /* Number of binary divisions, when not in low complexity mode */ -#define BIN_DIV_STEPS_A2NLSF_FIX 2 /* must be no higher than 16 - log2( LSF_COS_TAB_SZ_FIX ) */ +#define BIN_DIV_STEPS_A2NLSF_FIX 3 /* must be no higher than 16 - log2( LSF_COS_TAB_SZ_FIX ) */ #define QPoly 16 -#define MAX_ITERATIONS_A2NLSF_FIX 50 +#define MAX_ITERATIONS_A2NLSF_FIX 30 /* Flag for using 2x as many cosine sampling points, reduces the risk of missing a root */ #define OVERSAMPLE_COSINE_TABLE 0 @@ -61,7 +61,7 @@ SKP_INLINE void SKP_Silk_A2NLSF_trans_poly( /* Polynomial evaluation */ SKP_INLINE SKP_int32 SKP_Silk_A2NLSF_eval_poly( /* return the polynomial evaluation, in QPoly */ SKP_int32 *p, /* I Polynomial, QPoly */ - const SKP_int32 x, /* I Evaluation point, Q12 */ + const SKP_int32 x, /* I Evaluation point, Q12 */ const SKP_int dd /* I Order */ ) { @@ -78,9 +78,9 @@ SKP_INLINE SKP_int32 SKP_Silk_A2NLSF_eval_poly( /* return the polynomial eval SKP_INLINE void SKP_Silk_A2NLSF_init( const SKP_int32 *a_Q16, - SKP_int32 *P, - SKP_int32 *Q, - const SKP_int dd + SKP_int32 *P, + SKP_int32 *Q, + const SKP_int dd ) { SKP_int k; @@ -257,7 +257,7 @@ void SKP_Silk_A2NLSF( } /* Error: Apply progressively more bandwidth expansion and run again */ - SKP_Silk_bwexpander_32( a_Q16, d, 65536 - SKP_SMULBB( 66, i ) ); // 66_Q16 = 0.001 + SKP_Silk_bwexpander_32( a_Q16, d, 65536 - SKP_SMULBB( 10 + i, i ) ); // 10_Q16 = 0.00015 SKP_Silk_A2NLSF_init( a_Q16, P, Q, dd ); p = P; /* Pointer to polynomial */ @@ -268,9 +268,9 @@ void SKP_Silk_A2NLSF( NLSF[ 0 ] = 0; p = Q; /* Pointer to polynomial */ ylo = SKP_Silk_A2NLSF_eval_poly( p, xlo, dd ); - root_ix = 1; /* Index of current root */ + root_ix = 1; /* Index of current root */ } else { - root_ix = 0; /* Index of current root */ + root_ix = 0; /* Index of current root */ } k = 1; /* Reset loop counter */ } diff --git a/src_SigProc_FIX/SKP_Silk_LPC_inv_pred_gain.c b/src_SigProc_FIX/SKP_Silk_LPC_inv_pred_gain.c index c4f0e204e067e887eab821bf3041e5a6b2138678..d274fb420bacc6cda294712f527ce24f09861edc 100644 --- a/src_SigProc_FIX/SKP_Silk_LPC_inv_pred_gain.c +++ b/src_SigProc_FIX/SKP_Silk_LPC_inv_pred_gain.c @@ -34,6 +34,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * Copyright 2008 (c), Skype Limited * * */ #include "SKP_Silk_SigProc_FIX.h" + #define QA 16 #define A_LIMIT SKP_FIX_CONST( 0.99975, QA ) @@ -171,3 +172,4 @@ SKP_int SKP_Silk_LPC_inverse_pred_gain_Q24( /* O: Returns 1 if unstable, oth return LPC_inverse_pred_gain_QA( invGain_Q30, Atmp_QA, order ); } + diff --git a/src_SigProc_FIX/SKP_Silk_LPC_stabilize.c b/src_SigProc_FIX/SKP_Silk_LPC_stabilize.c index 8d64c8c868adfefffe9fff3c3b7c7ad92d07865c..e1dc7dbcf3ac28ffb8e2941d76dbd67a953d07cb 100644 --- a/src_SigProc_FIX/SKP_Silk_LPC_stabilize.c +++ b/src_SigProc_FIX/SKP_Silk_LPC_stabilize.c @@ -116,6 +116,7 @@ void SKP_Silk_LPC_fit( maxabs = SKP_RSHIFT( maxabs, rshift ); if( maxabs >= SKP_int16_MAX ) { /* Reduce magnitude of prediction coefficients */ + maxabs = SKP_min( maxabs, 98369 ); // ( SKP_int32_MAX / ( 65470 >> 2 ) ) + SKP_int16_MAX = 98369 sc_Q16 = 65470 - SKP_DIV32( SKP_MUL( 65470 >> 2, maxabs - SKP_int16_MAX ), SKP_RSHIFT32( SKP_MUL( maxabs, idx + 1), 2 ) ); SKP_Silk_bwexpander_32( a_Q24, L, sc_Q16 ); diff --git a/src_SigProc_FIX/SKP_Silk_NLSF_VQ_weights_laroia.c b/src_SigProc_FIX/SKP_Silk_NLSF_VQ_weights_laroia.c index e7f4618c159dfbcc0ef2dc84ed40731000623d67..532775e7222e9c73ba740c1106d750e905463d23 100644 --- a/src_SigProc_FIX/SKP_Silk_NLSF_VQ_weights_laroia.c +++ b/src_SigProc_FIX/SKP_Silk_NLSF_VQ_weights_laroia.c @@ -34,6 +34,7 @@ Signal Processing, pp. 641-644, 1991. */ #define Q_OUT 6 +#define MIN_NDELTA 3 /* Laroia low complexity NLSF weights */ void SKP_Silk_NLSF_VQ_weights_laroia( @@ -50,28 +51,28 @@ void SKP_Silk_NLSF_VQ_weights_laroia( SKP_assert( ( D & 1 ) == 0 ); /* First value */ - tmp1_int = SKP_max_int( pNLSF_Q15[ 0 ], 1 ); + tmp1_int = SKP_max_int( pNLSF_Q15[ 0 ], MIN_NDELTA ); tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int ); - tmp2_int = SKP_max_int( pNLSF_Q15[ 1 ] - pNLSF_Q15[ 0 ], 1 ); + tmp2_int = SKP_max_int( pNLSF_Q15[ 1 ] - pNLSF_Q15[ 0 ], MIN_NDELTA ); tmp2_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp2_int ); pNLSFW_Q6[ 0 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ 0 ] > 0 ); /* Main loop */ for( k = 1; k < D - 1; k += 2 ) { - tmp1_int = SKP_max_int( pNLSF_Q15[ k + 1 ] - pNLSF_Q15[ k ], 1 ); + tmp1_int = SKP_max_int( pNLSF_Q15[ k + 1 ] - pNLSF_Q15[ k ], MIN_NDELTA ); tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int ); pNLSFW_Q6[ k ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ k ] > 0 ); - tmp2_int = SKP_max_int( pNLSF_Q15[ k + 2 ] - pNLSF_Q15[ k + 1 ], 1 ); + tmp2_int = SKP_max_int( pNLSF_Q15[ k + 2 ] - pNLSF_Q15[ k + 1 ], MIN_NDELTA ); tmp2_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp2_int ); pNLSFW_Q6[ k + 1 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ k + 1 ] > 0 ); } /* Last value */ - tmp1_int = SKP_max_int( ( 1 << 15 ) - pNLSF_Q15[ D - 1 ], 1 ); + tmp1_int = SKP_max_int( ( 1 << 15 ) - pNLSF_Q15[ D - 1 ], MIN_NDELTA ); tmp1_int = SKP_DIV32_16( 1 << ( 15 + Q_OUT ), tmp1_int ); pNLSFW_Q6[ D - 1 ] = (SKP_int)SKP_min_int( tmp1_int + tmp2_int, SKP_int16_MAX ); SKP_assert( pNLSFW_Q6[ D - 1 ] > 0 ); diff --git a/src_SigProc_FIX/SKP_Silk_SigProc_FIX.h b/src_SigProc_FIX/SKP_Silk_SigProc_FIX.h index 34f1b4e1420a0b8a25d2c64cb5082bfdd484b4cc..6d80cefbb98cceb9659ff79390c2edfb193208ce 100644 --- a/src_SigProc_FIX/SKP_Silk_SigProc_FIX.h +++ b/src_SigProc_FIX/SKP_Silk_SigProc_FIX.h @@ -82,20 +82,20 @@ SKP_int SKP_Silk_resampler( Upsample 2x, low quality */ void SKP_Silk_resampler_up2( - SKP_int32 *S, /* I/O: State vector [ 2 ] */ - SKP_int16 *out, /* O: Output signal [ 2 * len ] */ - const SKP_int16 *in, /* I: Input signal [ len ] */ - SKP_int32 len /* I: Number of INPUT samples */ + SKP_int32 *S, /* I/O: State vector [ 2 ] */ + SKP_int16 *out, /* O: Output signal [ 2 * len ] */ + const SKP_int16 *in, /* I: Input signal [ len ] */ + SKP_int32 len /* I: Number of input samples */ ); /*! * Downsample 2x, mediocre quality */ void SKP_Silk_resampler_down2( - SKP_int32 *S, /* I/O: State vector [ 2 ] */ - SKP_int16 *out, /* O: Output signal [ len ] */ - const SKP_int16 *in, /* I: Input signal [ 2 * len ] */ - SKP_int32 len /* I: Number of OUTPUT samples */ + SKP_int32 *S, /* I/O: State vector [ 2 ] */ + SKP_int16 *out, /* O: Output signal [ len ] */ + const SKP_int16 *in, /* I: Input signal [ floor(len/2) ] */ + SKP_int32 inLen /* I: Number of input samples */ ); @@ -110,7 +110,7 @@ void SKP_Silk_resampler_down2_3( ); /*! - * Downsamples by a factor 3, low quality + * Downsample by a factor 3, low quality */ void SKP_Silk_resampler_down3( SKP_int32 *S, /* I/O: State vector [ 8 ] */ @@ -301,12 +301,12 @@ void SKP_Silk_sum_sqr_shift( /* Calculates the reflection coefficients from the correlation sequence */ /* Faster than schur64(), but much less accurate. */ -/* Uses SMLAWB(), requiring armv5E and higher. */ -void SKP_Silk_schur( - SKP_int16 *rc_Q15, /* O: reflection coefficients [order] Q15 */ - const SKP_int32 *c, /* I: correlations [order+1] */ - const SKP_int32 order /* I: prediction order */ -); +/* uses SMLAWB(), requiring armv5E and higher. */ +SKP_int32 SKP_Silk_schur( /* O: Returns residual energy */ + SKP_int16 *rc_Q15, /* O: reflection coefficients [order] Q15 */ + const SKP_int32 *c, /* I: correlations [order+1] */ + const SKP_int32 order /* I: prediction order */ +);; /* Calculates the reflection coefficients from the correlation sequence */ /* Slower than schur(), but more accurate. */ @@ -333,7 +333,6 @@ void SKP_Silk_k2a_Q16( /* Apply sine window to signal vector. */ /* Window types: */ -/* 0 -> sine window from 0 to pi */ /* 1 -> sine window from 0 to pi/2 */ /* 2 -> sine window from pi/2 to pi */ /* every other sample of window is linearly interpolated, for speed */ @@ -552,10 +551,12 @@ SKP_INLINE SKP_int32 SKP_ROR32( SKP_int32 a32, SKP_int rot ) return (SKP_int32) ((x << (32 - r)) | (x >> r)); } -/* Define 4-byte aligned array of SKP_int16 */ -#define SKP_array_of_int16_4_byte_aligned( arrayName, nElements ) \ - SKP_int32 dummy_int32 ## arrayName; \ - SKP_int16 arrayName[ (nElements) ] +/* Allocate SKP_int16 alligned to 4-byte memory address */ +#if EMBEDDED_ARM +#define SKP_DWORD_ALIGN __attribute__((aligned(4))) +#else +#define SKP_DWORD_ALIGN +#endif /* Useful Macros that can be adjusted to other platforms */ #define SKP_memcpy(a, b, c) memcpy((a), (b), (c)) /* Dest, Src, ByteCount */ @@ -684,7 +685,7 @@ SKP_INLINE SKP_int32 SKP_ROR32( SKP_int32 a32, SKP_int rot ) #define SKP_max(a, b) (((a) > (b)) ? (a) : (b)) /* Macro to convert floating-point constants to fixed-point */ -#define SKP_FIX_CONST( C, Q ) ((SKP_int32)((C) * (1 << (Q)) + 0.5)) +#define SKP_FIX_CONST( C, Q ) ((SKP_int32)((C) * ((SKP_int64)1 << (Q)) + 0.5)) /* SKP_min() versions with typecast in the function call */ SKP_INLINE SKP_int SKP_min_int(SKP_int a, SKP_int b) diff --git a/src_SigProc_FIX/SKP_Silk_apply_sine_window.c b/src_SigProc_FIX/SKP_Silk_apply_sine_window.c index 3b8c8cf9f724e858324b8e0668d6f47dbf890ab0..54876285ddf576037a8874bf5db072949461573a 100644 --- a/src_SigProc_FIX/SKP_Silk_apply_sine_window.c +++ b/src_SigProc_FIX/SKP_Silk_apply_sine_window.c @@ -29,10 +29,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Apply sine window to signal vector. */ /* Window types: */ -/* 0 -> sine window from 0 to pi */ /* 1 -> sine window from 0 to pi/2 */ /* 2 -> sine window from pi/2 to pi */ -/* every other sample of window is linearly interpolated, for speed */ +/* Every other sample is linearly interpolated, for speed. */ +/* Window length must be between 16 and 120 (incl) and a multiple of 4. */ + +/* Matlab code for table: + for k=16:9*4:16+2*9*4, fprintf(' %7.d,', -round(65536*pi ./ (k:4:k+8*4))); fprintf('\n'); end +*/ +static SKP_int16 freq_table_Q16[ 27 ] = { + 12111, 9804, 8235, 7100, 6239, 5565, 5022, 4575, 4202, + 3885, 3612, 3375, 3167, 2984, 2820, 2674, 2542, 2422, + 2313, 2214, 2123, 2038, 1961, 1889, 1822, 1760, 1702, +}; + void SKP_Silk_apply_sine_window( SKP_int16 px_win[], /* O Pointer to windowed signal */ const SKP_int16 px[], /* I Pointer to input signal */ @@ -40,51 +50,48 @@ void SKP_Silk_apply_sine_window( const SKP_int length /* I Window length, multiple of 4 */ ) { - SKP_int k; - SKP_int32 f_Q16, c_Q20, S0_Q16, S1_Q16; - /* Length must be multiple of 4 */ - SKP_assert( ( length & 3 ) == 0 ); + SKP_int k, f_Q16, c_Q16; + SKP_int32 S0_Q16, S1_Q16; - /* Input pointer must be 4-byte aligned */ - SKP_assert( ( (SKP_int64)px & 3 ) == 0 ); + SKP_assert( win_type == 1 || win_type == 2 ); - if( win_type == 0 ) { - f_Q16 = SKP_DIV32_16( 411775, length + 1 ); // 411775 = 2 * 65536 * pi - } else { - f_Q16 = SKP_DIV32_16( 205887, length + 1 ); // 205887 = 65536 * pi - } + /* Length must be in a range from 16 to 120 and a multiple of 4 */ + SKP_assert( length >= 16 && length <= 120 ); + SKP_assert( ( length & 3 ) == 0 ); - /* factor used for cosine approximation */ - c_Q20 = -SKP_RSHIFT( SKP_MUL( f_Q16, f_Q16 ), 12 ); + /* Frequency */ + k = ( length >> 2 ) - 4; + SKP_assert( k >= 0 && k <= 26 ); + f_Q16 = (SKP_int)freq_table_Q16[ k ]; - /* c_Q20 becomes too large if length is too small */ - SKP_assert( c_Q20 >= -32768 ); + /* Factor used for cosine approximation */ + c_Q16 = SKP_SMULWB( f_Q16, -f_Q16 ); + SKP_assert( c_Q16 >= -32768 ); /* initialize state */ - if( win_type < 2 ) { + if( win_type == 1 ) { /* start from 0 */ S0_Q16 = 0; /* approximation of sin(f) */ - S1_Q16 = f_Q16; + S1_Q16 = f_Q16 + SKP_RSHIFT( length, 3 ); } else { /* start from 1 */ S0_Q16 = ( 1 << 16 ); /* approximation of cos(f) */ - S1_Q16 = ( 1 << 16 ) + SKP_RSHIFT( c_Q20, 5 ); + S1_Q16 = ( 1 << 16 ) + SKP_RSHIFT( c_Q16, 1 ) + SKP_RSHIFT( length, 4 ); } - /* Uses the recursive equation: sin(n*f) = 2 * cos(f) * sin((n-1)*f) - sin((n-2)*f) */ /* 4 samples at a time */ for( k = 0; k < length; k += 4 ) { px_win[ k ] = (SKP_int16)SKP_SMULWB( SKP_RSHIFT( S0_Q16 + S1_Q16, 1 ), px[ k ] ); px_win[ k + 1 ] = (SKP_int16)SKP_SMULWB( S1_Q16, px[ k + 1] ); - S0_Q16 = SKP_RSHIFT( SKP_MUL( c_Q20, S1_Q16 ), 20 ) + SKP_LSHIFT( S1_Q16, 1 ) - S0_Q16 + 1; + S0_Q16 = SKP_SMULWB( S1_Q16, c_Q16 ) + SKP_LSHIFT( S1_Q16, 1 ) - S0_Q16 + 1; S0_Q16 = SKP_min( S0_Q16, ( 1 << 16 ) ); px_win[ k + 2 ] = (SKP_int16)SKP_SMULWB( SKP_RSHIFT( S0_Q16 + S1_Q16, 1 ), px[ k + 2] ); px_win[ k + 3 ] = (SKP_int16)SKP_SMULWB( S0_Q16, px[ k + 3 ] ); - S1_Q16 = SKP_RSHIFT( SKP_MUL( c_Q20, S0_Q16 ), 20 ) + SKP_LSHIFT( S0_Q16, 1 ) - S1_Q16; + S1_Q16 = SKP_SMULWB( S0_Q16, c_Q16 ) + SKP_LSHIFT( S0_Q16, 1 ) - S1_Q16; S1_Q16 = SKP_min( S1_Q16, ( 1 << 16 ) ); } } diff --git a/src_SigProc_FIX/SKP_Silk_array_maxabs.c b/src_SigProc_FIX/SKP_Silk_array_maxabs.c index 85615243121adc07a2a195e23e4e7def6f5ba1e2..e5ace4653754ac945b4a643c4b9078306f021ba5 100644 --- a/src_SigProc_FIX/SKP_Silk_array_maxabs.c +++ b/src_SigProc_FIX/SKP_Silk_array_maxabs.c @@ -37,13 +37,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_SigProc_FIX.h" /* Function that returns the maximum absolut value of the input vector */ -#if (! defined(__mips__)) && EMBEDDED_ARM<4 SKP_int16 SKP_Silk_int16_array_maxabs( /* O Maximum absolute value, max: 2^15-1 */ const SKP_int16 *vec, /* I Input vector [len] */ const SKP_int32 len /* I Length of input vector */ ) { SKP_int32 max = 0, i, lvl = 0, ind; + if( len == 0 ) return 0; ind = len - 1; max = SKP_SMULBB( vec[ ind ], vec[ ind ] ); @@ -66,4 +66,4 @@ SKP_int16 SKP_Silk_int16_array_maxabs( /* O Maximum absolute value, max: 2 } } } -#endif + diff --git a/src_SigProc_FIX/SKP_Silk_burg_modified.c b/src_SigProc_FIX/SKP_Silk_burg_modified.c index 281001a9c93af289ed937fb4428b9ae5ae900743..d603f3c6f9000a08a76f148320f4e9efbb42e1b4 100644 --- a/src_SigProc_FIX/SKP_Silk_burg_modified.c +++ b/src_SigProc_FIX/SKP_Silk_burg_modified.c @@ -40,7 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define MAX_FRAME_SIZE 544 // subfr_length * nb_subfr = ( 0.005 * 24000 + 16 ) * 4 = 544 #define MAX_NB_SUBFR 4 -#define QA 24 +#define QA 25 #define N_BITS_HEAD_ROOM 2 #define MIN_RSHIFTS -16 #define MAX_RSHIFTS (32 - QA) diff --git a/src_SigProc_FIX/SKP_Silk_debug.c b/src_SigProc_FIX/SKP_Silk_debug.c new file mode 100644 index 0000000000000000000000000000000000000000..31468f739b9cd7a3a03e322a518447f2dea0ee11 --- /dev/null +++ b/src_SigProc_FIX/SKP_Silk_debug.c @@ -0,0 +1,169 @@ +/*********************************************************************** +Copyright (c) 2006-2010, Skype Limited. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, (subject to the limitations in the disclaimer below) +are permitted provided that the following conditions are met: +- Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +- Neither the name of Skype Limited, nor the names of specific +contributors, may be used to endorse or promote products derived from +this software without specific prior written permission. +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED +BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +***********************************************************************/ + +/* * + * SKP_debug.c * + * * + * This contains code to help debugging * + * * + * Copyright 2009 (c), Skype Limited * + * Date: 090629 * + * */ + +#include "SKP_debug.h" +#include "../src_SigProc_FIX/SKP_Silk_SigProc_FIX.h" + +#ifdef _WIN32 + +#if (defined(_WIN32) || defined(_WINCE)) +#include <windows.h> /* timer */ +#else // Linux or Mac +#include <sys/time.h> +#endif + +unsigned long GetHighResolutionTime() /* O: time in usec*/ +{ + /* Returns a time counter in microsec */ + /* the resolution is platform dependent */ + /* but is typically 1.62 us resolution */ + LARGE_INTEGER lpPerformanceCount; + LARGE_INTEGER lpFrequency; + QueryPerformanceCounter(&lpPerformanceCount); + QueryPerformanceFrequency(&lpFrequency); + return (unsigned long)((1000000*(lpPerformanceCount.QuadPart)) / lpFrequency.QuadPart); +} +#else // Linux or Mac +unsigned long GetHighResolutionTime() /* O: time in usec*/ +{ + struct timeval tv; + gettimeofday(&tv, 0); + return((tv.tv_sec*1000000)+(tv.tv_usec)); +} +#endif + +#if SKP_TIC_TOC + +int SKP_Timer_nTimers = 0; +int SKP_Timer_depth_ctr = 0; +char SKP_Timer_tags[SKP_NUM_TIMERS_MAX][SKP_NUM_TIMERS_MAX_TAG_LEN]; +#ifdef WIN32 +LARGE_INTEGER SKP_Timer_start[SKP_NUM_TIMERS_MAX]; +#else +unsigned long SKP_Timer_start[SKP_NUM_TIMERS_MAX]; +#endif +unsigned int SKP_Timer_cnt[SKP_NUM_TIMERS_MAX]; +SKP_int64 SKP_Timer_min[SKP_NUM_TIMERS_MAX]; +SKP_int64 SKP_Timer_sum[SKP_NUM_TIMERS_MAX]; +SKP_int64 SKP_Timer_max[SKP_NUM_TIMERS_MAX]; +SKP_int64 SKP_Timer_depth[SKP_NUM_TIMERS_MAX]; + +#ifdef WIN32 +void SKP_TimerSave(char *file_name) +{ + if( SKP_Timer_nTimers > 0 ) + { + int k; + FILE *fp; + LARGE_INTEGER lpFrequency; + LARGE_INTEGER lpPerformanceCount1, lpPerformanceCount2; + int del = 0x7FFFFFFF; + double avg, sum_avg; + /* estimate overhead of calling performance counters */ + for( k = 0; k < 1000; k++ ) { + QueryPerformanceCounter(&lpPerformanceCount1); + QueryPerformanceCounter(&lpPerformanceCount2); + lpPerformanceCount2.QuadPart -= lpPerformanceCount1.QuadPart; + if( (int)lpPerformanceCount2.LowPart < del ) + del = lpPerformanceCount2.LowPart; + } + QueryPerformanceFrequency(&lpFrequency); + /* print results to file */ + sum_avg = 0.0f; + for( k = 0; k < SKP_Timer_nTimers; k++ ) { + if (SKP_Timer_depth[k] == 0) { + sum_avg += (1e6 * SKP_Timer_sum[k] / SKP_Timer_cnt[k] - del) / lpFrequency.QuadPart * SKP_Timer_cnt[k]; + } + } + fp = fopen(file_name, "w"); + fprintf(fp, " min avg %% max count\n"); + for( k = 0; k < SKP_Timer_nTimers; k++ ) { + if (SKP_Timer_depth[k] == 0) { + fprintf(fp, "%-28s", SKP_Timer_tags[k]); + } else if (SKP_Timer_depth[k] == 1) { + fprintf(fp, " %-27s", SKP_Timer_tags[k]); + } else if (SKP_Timer_depth[k] == 2) { + fprintf(fp, " %-26s", SKP_Timer_tags[k]); + } else if (SKP_Timer_depth[k] == 3) { + fprintf(fp, " %-25s", SKP_Timer_tags[k]); + } else { + fprintf(fp, " %-24s", SKP_Timer_tags[k]); + } + avg = (1e6 * SKP_Timer_sum[k] / SKP_Timer_cnt[k] - del) / lpFrequency.QuadPart; + fprintf(fp, "%8.2f", (1e6 * (SKP_max_64(SKP_Timer_min[k] - del, 0))) / lpFrequency.QuadPart); + fprintf(fp, "%12.2f %6.2f", avg, 100.0 * avg / sum_avg * SKP_Timer_cnt[k]); + fprintf(fp, "%12.2f", (1e6 * (SKP_max_64(SKP_Timer_max[k] - del, 0))) / lpFrequency.QuadPart); + fprintf(fp, "%10d\n", SKP_Timer_cnt[k]); + } + fprintf(fp, " microseconds\n"); + fclose(fp); + } +} +#else +void SKP_TimerSave(char *file_name) +{ + if( SKP_Timer_nTimers > 0 ) + { + int k; + FILE *fp; + /* print results to file */ + fp = fopen(file_name, "w"); + fprintf(fp, " min avg max count\n"); + for( k = 0; k < SKP_Timer_nTimers; k++ ) + { + if (SKP_Timer_depth[k] == 0) { + fprintf(fp, "%-28s", SKP_Timer_tags[k]); + } else if (SKP_Timer_depth[k] == 1) { + fprintf(fp, " %-27s", SKP_Timer_tags[k]); + } else if (SKP_Timer_depth[k] == 2) { + fprintf(fp, " %-26s", SKP_Timer_tags[k]); + } else if (SKP_Timer_depth[k] == 3) { + fprintf(fp, " %-25s", SKP_Timer_tags[k]); + } else { + fprintf(fp, " %-24s", SKP_Timer_tags[k]); + } + fprintf(fp, "%d ", SKP_Timer_min[k]); + fprintf(fp, "%f ", (double)SKP_Timer_sum[k] / (double)SKP_Timer_cnt[k]); + fprintf(fp, "%d ", SKP_Timer_max[k]); + fprintf(fp, "%10d\n", SKP_Timer_cnt[k]); + } + fprintf(fp, " microseconds\n"); + fclose(fp); + } +} +#endif + +#endif /* SKP_TIC_TOC */ diff --git a/src_SigProc_FIX/SKP_Silk_pitch_analysis_core.c b/src_SigProc_FIX/SKP_Silk_pitch_analysis_core.c index 9e76ab3c462c34732761d62a1fcd9e93846153f1..0c36f0649036f9ffa4785744c6bd1a623a9a8971 100644 --- a/src_SigProc_FIX/SKP_Silk_pitch_analysis_core.c +++ b/src_SigProc_FIX/SKP_Silk_pitch_analysis_core.c @@ -64,7 +64,7 @@ SKP_int32 SKP_FIX_P_Ana_find_scaling( /*************************************************************/ /* FIXED POINT CORE PITCH ANALYSIS FUNCTION */ /*************************************************************/ -SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unvoiced */ +SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unvoiced */ const SKP_int16 *signal, /* I Signal of length PE_FRAME_LENGTH_MS*Fs_kHz */ SKP_int *pitch_out, /* O 4 pitch lag values */ SKP_int *lagIndex, /* O Lag Index */ @@ -187,7 +187,7 @@ SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unv /* Calculate first vector products before loop */ cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz ); normalizer = SKP_Silk_inner_prod_aligned( basis_ptr, basis_ptr, sf_length_8kHz ); - normalizer = SKP_ADD_SAT32( normalizer, 1000 ); + normalizer = SKP_ADD_SAT32( normalizer, SKP_SMULBB( sf_length_8kHz, 4000 ) ); temp32 = SKP_DIV32( cross_corr, SKP_Silk_SQRT_APPROX( normalizer ) + 1 ); C[ k ][ min_lag_4kHz ] = (SKP_int16)SKP_SAT16( temp32 ); /* Q0 */ @@ -226,17 +226,18 @@ SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unv C[ 0 ][ i ] = (SKP_int16)sum; /* Q-1 */ } } else { - /* Only short lag bias */ + /* Only short-lag bias */ for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) { sum = (SKP_int32)C[ 0 ][ i ]; sum = SKP_SMLAWB( sum, sum, SKP_LSHIFT( -i, 4 ) ); /* Q-1 */ C[ 0 ][ i ] = (SKP_int16)sum; /* Q-1 */ } } + /* Sort */ - length_d_srch = 5 + complexity; - SKP_assert( length_d_srch <= PE_D_SRCH_LENGTH ); - SKP_Silk_insertion_sort_decreasing_int16( &C[ 0 ][ min_lag_4kHz ], d_srch, max_lag_4kHz - min_lag_4kHz + 1, length_d_srch ); + length_d_srch = SKP_ADD_LSHIFT32( 4, complexity, 1 ); + SKP_assert( 3 * length_d_srch <= PE_D_SRCH_LENGTH ); + SKP_Silk_insertion_sort_decreasing_int16( &C[ 0 ][ min_lag_4kHz ], d_srch, max_lag_4kHz - min_lag_4kHz + 1, length_d_srch ); /* Escape if correlation is very low already here */ target_ptr = &signal_4kHz[ SKP_SMULBB( sf_length_4kHz, nb_subfr ) ]; @@ -244,8 +245,8 @@ SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unv energy = SKP_ADD_SAT32( energy, 1000 ); /* Q0 */ Cmax = (SKP_int)C[ 0 ][ min_lag_4kHz ]; /* Q-1 */ threshold = SKP_SMULBB( Cmax, Cmax ); /* Q-2 */ - /* Compare in Q-2 domain */ + /* Compare in Q-2 domain */ if( SKP_RSHIFT( energy, 4 + 2 ) > threshold ) { SKP_memset( pitch_out, 0, nb_subfr * sizeof( SKP_int ) ); *LTPCorr_Q15 = 0; @@ -333,7 +334,7 @@ SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unv basis_ptr = target_ptr - d; /* Check that we are within range of the array */ - SKP_assert( basis_ptr >= signal_8kHz ); + SKP_assert( basis_ptr >= signal_8kHz ); SKP_assert( basis_ptr + sf_length_8kHz <= signal_8kHz + frame_length_8kHz ); cross_corr = SKP_Silk_inner_prod_aligned( target_ptr, basis_ptr, sf_length_8kHz ); @@ -433,7 +434,10 @@ SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unv CCmax_new_b -= prev_lag_bias_Q15; /* Q15 */ } - if( CCmax_new_b > CCmax_b && CCmax_new > corr_thres_Q15 ) { + if ( CCmax_new_b > CCmax_b && /* Find maximum biased correlation */ + CCmax_new > corr_thres_Q15 && /* Correlation needs to be high enough to be voiced */ + SKP_Silk_CB_lags_stage2[ 0 ][ CBimax_new ] <= min_lag_8kHz /* Lag must be in range */ + ) { CCmax_b = CCmax_new_b; CCmax = CCmax_new; lag = d; @@ -522,7 +526,7 @@ SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unv for( k = 0; k < nb_subfr; k++ ) { SKP_assert( PE_MAX_NB_SUBFR == 4 ); energy += SKP_RSHIFT( energies_st3[ k ][ j ][ lag_counter ], 2 ); /* use mean, to avoid overflow */ - SKP_assert( energy >= 0 ); + SKP_assert( energy >= 0 ); cross_corr += SKP_RSHIFT( crosscorr_st3[ k ][ j ][ lag_counter ], 2 ); /* use mean, to avoid overflow */ } if( cross_corr > 0 ) { @@ -549,7 +553,9 @@ SKP_int SKP_Silk_pitch_analysis_core( /* O Voicing estimate: 0 voiced, 1 unv CCmax_new = 0; } - if( CCmax_new > CCmax ) { + if( CCmax_new > CCmax && + ( d + (SKP_int)SKP_Silk_CB_lags_stage3[ 0 ][ j ] ) <= max_lag + ) { CCmax = CCmax_new; lag_new = d; CBimax = j; diff --git a/src_SigProc_FIX/SKP_Silk_pitch_est_tables.c b/src_SigProc_FIX/SKP_Silk_pitch_est_tables.c index 8a49981b16208c378ac51bb7361300084e321554..efacf4499ec0ce4c04e5889ee6e59721e7a3dc69 100644 --- a/src_SigProc_FIX/SKP_Silk_pitch_est_tables.c +++ b/src_SigProc_FIX/SKP_Silk_pitch_est_tables.c @@ -36,7 +36,7 @@ const SKP_int8 SKP_Silk_CB_lags_stage2_10_ms[ PE_MAX_NB_SUBFR >> 1][ PE_NB_CBKS_ const SKP_int8 SKP_Silk_CB_lags_stage3_10_ms[ PE_MAX_NB_SUBFR >> 1 ][ PE_NB_CBKS_STAGE3_10MS ] = { - {-3,-2,-2,-1,-1, 0, 0, 1, 1, 2, 2,3}, + {-3,-2,-2,-1,-1, 0, 0, 1, 1, 2, 2, 3}, { 3, 3, 2, 2, 1, 1, 0, 0,-1,-1,-2,-2} }; diff --git a/src_SigProc_FIX/SKP_Silk_resampler_down2.c b/src_SigProc_FIX/SKP_Silk_resampler_down2.c index a153c90f87edb479c89fa4b8e7ba7f0970122bf6..36e1d9bf56d5998767e91a551a4ba8a2b888afa4 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_down2.c +++ b/src_SigProc_FIX/SKP_Silk_resampler_down2.c @@ -36,7 +36,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_resampler_rom.h" -#if (EMBEDDED_ARM<5) && (!defined(__mips__)) /* Downsample by a factor 2, mediocre quality */ void SKP_Silk_resampler_down2( SKP_int32 *S, /* I/O: State vector [ 2 ] */ @@ -76,4 +75,4 @@ void SKP_Silk_resampler_down2( out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( out32, 11 ) ); } } -#endif + diff --git a/src_SigProc_FIX/SKP_Silk_resampler_private.h b/src_SigProc_FIX/SKP_Silk_resampler_private.h index d8dd7467114a5d9e80b54db46bea29033dc83933..bb8d4d84b0a6538702d83b8cb30733079be894e8 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_private.h +++ b/src_SigProc_FIX/SKP_Silk_resampler_private.h @@ -37,6 +37,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef SKP_Silk_RESAMPLER_H #define SKP_Silk_RESAMPLER_H + #ifdef __cplusplus extern "C" { #endif diff --git a/src_SigProc_FIX/SKP_Silk_resampler_private_AR2.c b/src_SigProc_FIX/SKP_Silk_resampler_private_AR2.c index 9e8a1416f320f04800d05546f9177ec20aba33a8..01b50b557174fc83f38c494b1d12a6e839d4a893 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_private_AR2.c +++ b/src_SigProc_FIX/SKP_Silk_resampler_private_AR2.c @@ -36,7 +36,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_resampler_private.h" -#if (EMBEDDED_ARM<5) && (!defined(__mips__)) /* Second order AR filter with single delay elements */ void SKP_Silk_resampler_private_AR2( SKP_int32 S[], /* I/O: State vector [ 2 ] */ @@ -57,4 +56,4 @@ void SKP_Silk_resampler_private_AR2( S[ 1 ] = SKP_SMULWB( out32, A_Q14[ 1 ] ); } } -#endif + diff --git a/src_SigProc_FIX/SKP_Silk_resampler_private_ARMA4.c b/src_SigProc_FIX/SKP_Silk_resampler_private_ARMA4.c index 47230596ae747275f79ac941ad79f4e33d1b166f..590fd61df50e08b1f09042f0ed1a27fc88aced5d 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_private_ARMA4.c +++ b/src_SigProc_FIX/SKP_Silk_resampler_private_ARMA4.c @@ -42,7 +42,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Coeffients are stored in a packed format: */ /* { B1_Q14[1], B2_Q14[1], -A1_Q14[1], -A1_Q14[2], -A2_Q14[1], -A2_Q14[2], gain_Q16 } */ /* where it is assumed that B*_Q14[0], B*_Q14[2], A*_Q14[0] are all 16384 */ -#if (EMBEDDED_ARM<5) && (!defined(__mips__)) void SKP_Silk_resampler_private_ARMA4( SKP_int32 S[], /* I/O: State vector [ 4 ] */ SKP_int16 out[], /* O: Output signal */ @@ -75,5 +74,5 @@ void SKP_Silk_resampler_private_ARMA4( out[ k ] = (SKP_int16)SKP_SAT16( SKP_RSHIFT32( SKP_SMLAWB( 128, out2_Q8, Coef[ 6 ] ), 8 ) ); } } -#endif + diff --git a/src_SigProc_FIX/SKP_Silk_resampler_private_down_FIR.c b/src_SigProc_FIX/SKP_Silk_resampler_private_down_FIR.c index e86443716464f64b4d6151fc6d7f51d2b0ff0624..687b7fd2005c8cd568eca4d1b3c9cfcc3b53f7b7 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_private_down_FIR.c +++ b/src_SigProc_FIX/SKP_Silk_resampler_private_down_FIR.c @@ -46,12 +46,14 @@ SKP_INLINE SKP_int16 *SKP_Silk_resampler_private_down_FIR_INTERPOL0( buf_ptr = buf2 + SKP_RSHIFT( index_Q16, 16 ); /* Inner product */ - res_Q6 = SKP_SMULWB( SKP_ADD32( buf_ptr[ 0 ], buf_ptr[ 11 ] ), FIR_Coefs[ 0 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 1 ], buf_ptr[ 10 ] ), FIR_Coefs[ 1 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 2 ], buf_ptr[ 9 ] ), FIR_Coefs[ 2 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 3 ], buf_ptr[ 8 ] ), FIR_Coefs[ 3 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 4 ], buf_ptr[ 7 ] ), FIR_Coefs[ 4 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 5 ], buf_ptr[ 6 ] ), FIR_Coefs[ 5 ] ); + res_Q6 = SKP_SMULWB( SKP_ADD32( buf_ptr[ 0 ], buf_ptr[ 15 ] ), FIR_Coefs[ 0 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 1 ], buf_ptr[ 14 ] ), FIR_Coefs[ 1 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 2 ], buf_ptr[ 13 ] ), FIR_Coefs[ 2 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 3 ], buf_ptr[ 12 ] ), FIR_Coefs[ 3 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 4 ], buf_ptr[ 11 ] ), FIR_Coefs[ 4 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 5 ], buf_ptr[ 10 ] ), FIR_Coefs[ 5 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 6 ], buf_ptr[ 9 ] ), FIR_Coefs[ 6 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, SKP_ADD32( buf_ptr[ 7 ], buf_ptr[ 8 ] ), FIR_Coefs[ 7 ] ); /* Scale down, saturate and store in output array */ *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( res_Q6, 6 ) ); @@ -81,13 +83,17 @@ SKP_INLINE SKP_int16 *SKP_Silk_resampler_private_down_FIR_INTERPOL1( res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 3 ], interpol_ptr[ 3 ] ); res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 4 ], interpol_ptr[ 4 ] ); res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 5 ], interpol_ptr[ 5 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 6 ], interpol_ptr[ 6 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 7 ], interpol_ptr[ 7 ] ); interpol_ptr = &FIR_Coefs[ RESAMPLER_DOWN_ORDER_FIR / 2 * ( FIR_Fracs - 1 - interpol_ind ) ]; - res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 11 ], interpol_ptr[ 0 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 10 ], interpol_ptr[ 1 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 9 ], interpol_ptr[ 2 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 8 ], interpol_ptr[ 3 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 7 ], interpol_ptr[ 4 ] ); - res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 6 ], interpol_ptr[ 5 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 15 ], interpol_ptr[ 0 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 14 ], interpol_ptr[ 1 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 13 ], interpol_ptr[ 2 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 12 ], interpol_ptr[ 3 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 11 ], interpol_ptr[ 4 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 10 ], interpol_ptr[ 5 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 9 ], interpol_ptr[ 6 ] ); + res_Q6 = SKP_SMLAWB( res_Q6, buf_ptr[ 8 ], interpol_ptr[ 7 ] ); /* Scale down, saturate and store in output array */ *out++ = (SKP_int16)SKP_SAT16( SKP_RSHIFT_ROUND( res_Q6, 6 ) ); diff --git a/src_SigProc_FIX/SKP_Silk_resampler_private_up2_HQ.c b/src_SigProc_FIX/SKP_Silk_resampler_private_up2_HQ.c index 8b8b2fec4cdd161c0baf6670ffcfe0ff728a9a28..2aa1d8a0b23b1be139b44d33dcc00c09d28f7844 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_private_up2_HQ.c +++ b/src_SigProc_FIX/SKP_Silk_resampler_private_up2_HQ.c @@ -39,7 +39,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Upsample by a factor 2, high quality */ /* Uses 2nd order allpass filters for the 2x upsampling, followed by a */ /* notch filter just above Nyquist. */ -#if (EMBEDDED_ARM<5) && (!defined(__mips__)) void SKP_Silk_resampler_private_up2_HQ( SKP_int32 *S, /* I/O: Resampler state [ 6 ] */ SKP_int16 *out, /* O: Output signal [ 2 * len ] */ @@ -105,8 +104,6 @@ void SKP_Silk_resampler_private_up2_HQ( SKP_SMLAWB( 256, out32_1, SKP_Silk_resampler_up2_hq_notch[ 3 ] ), 9 ) ); } } -#endif - void SKP_Silk_resampler_private_up2_HQ_wrapper( void *SS, /* I/O: Resampler state (unused) */ diff --git a/src_SigProc_FIX/SKP_Silk_resampler_private_up4.c b/src_SigProc_FIX/SKP_Silk_resampler_private_up4.c index add8419e41597511ab3e5a07fbeccd940f45f6a3..89be2f28ca14e9fc08246118e3d77da0055a92bb 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_private_up4.c +++ b/src_SigProc_FIX/SKP_Silk_resampler_private_up4.c @@ -34,7 +34,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include "SKP_Silk_SigProc_FIX.h" -#include "SKP_Silk_resampler_rom.h" +#include "SKP_Silk_resampler_private.h" /* Upsample by a factor 4, Note: very low quality, only use with output sampling rates above 96 kHz. */ void SKP_Silk_resampler_private_up4( diff --git a/src_SigProc_FIX/SKP_Silk_resampler_rom.c b/src_SigProc_FIX/SKP_Silk_resampler_rom.c index 1418cae446abcb3402e24bd131da0e9865fd2444..3d7dbe2aa1ceb8d94195d7dd79fe666c65ac0c86 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_rom.c +++ b/src_SigProc_FIX/SKP_Silk_resampler_rom.c @@ -29,7 +29,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * File Name: SKP_Silk_resampler_rom.c * * * * Description: Filter coefficients for IIR/FIR polyphase resampling * - * Total size: 550 Words (1.1 kB) * + * Total size: <600 Words (1.2 kB) * * * * Copyright 2010 (c), Skype Limited * * All rights reserved. * @@ -37,59 +37,52 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_resampler_private.h" - -#if EMBEDDED_ARM -#define SKP_DWORD_ALIGN __attribute__((aligned(4))) -#else -#define SKP_DWORD_ALIGN -#endif - -/* Tables for 2x downsampler. Values above 32767 intentionally wrap to a negative value. */ +/* Tables for 2x downsampler */ const SKP_int16 SKP_Silk_resampler_down2_0 = 9872; -const SKP_int16 SKP_Silk_resampler_down2_1 = 39809; +const SKP_int16 SKP_Silk_resampler_down2_1 = 39809 - 65536; -/* Tables for 2x upsampler, low quality. Values above 32767 intentionally wrap to a negative value. */ +/* Tables for 2x upsampler, low quality */ const SKP_int16 SKP_Silk_resampler_up2_lq_0 = 8102; -const SKP_int16 SKP_Silk_resampler_up2_lq_1 = 36783; +const SKP_int16 SKP_Silk_resampler_up2_lq_1 = 36783 - 65536; -/* Tables for 2x upsampler, high quality. Values above 32767 intentionally wrap to a negative value. */ -const SKP_int16 SKP_Silk_resampler_up2_hq_0[ 2 ] = { 4280, 33727 }; -const SKP_int16 SKP_Silk_resampler_up2_hq_1[ 2 ] = { 16295, 54015 }; +/* Tables for 2x upsampler, high quality */ +const SKP_int16 SKP_Silk_resampler_up2_hq_0[ 2 ] = { 4280, 33727 - 65536 }; +const SKP_int16 SKP_Silk_resampler_up2_hq_1[ 2 ] = { 16295, 54015 - 65536 }; /* Matlab code for the notch filter coefficients: */ -/* B = [1, 0.12, 1]; A = [1, 0.055, 0.8]; G = 0.87; freqz(G * B, A, 2^14, 16e3); axis([0, 8000, -10, 1]); */ +/* B = [1, 0.14, 1]; A = [1, 0.08, 0.84]; G = 0.89; freqz(G * B, A, 2^14, 16e3); axis([0, 8000, -10, 1]); */ /* fprintf('\t%6d, %6d, %6d, %6d\n', round(B(2)*2^16), round(-A(2)*2^16), round((1-A(3))*2^16), round(G*2^15)) */ -const SKP_int16 SKP_Silk_resampler_up2_hq_notch[ 4 ] = { 7864, -3604, 13107, 28508 }; - +const SKP_int16 SKP_Silk_resampler_up2_hq_notch[ 4 ] = { 9175, -5243, 10486, 29164 }; +//const SKP_int16 SKP_Silk_resampler_up2_hq_notch[ 4 ] = { 6554, -3932, 6554, 30573 }; /* for hybrid mode? */ -/* Tables with IIR and FIR coefficients for fractional downsamplers (70 Words) */ +/* Tables with IIR and FIR coefficients for fractional downsamplers (90 Words) */ SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_3_4_COEFS[ 2 + 3 * RESAMPLER_DOWN_ORDER_FIR / 2 ] = { - -18249, -12532, - -97, 284, -495, 309, 10268, 20317, - -94, 156, -48, -720, 5984, 18278, - -45, -4, 237, -847, 2540, 14662, + -20253, -13986, + 86, 7, -151, 368, -542, 232, 11041, 21904, + 39, 90, -181, 216, -17, -877, 6408, 19695, + 2, 113, -108, 2, 314, -977, 2665, 15787, }; SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_2_3_COEFS[ 2 + 2 * RESAMPLER_DOWN_ORDER_FIR / 2 ] = { - -11891, -12486, - 20, 211, -657, 688, 8423, 15911, - -44, 197, -152, -653, 3855, 13015, + -13997, -14120, + 60, -174, 71, 298, -800, 659, 9238, 17461, + 48, -40, -150, 314, -155, -845, 4188, 14293, }; SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_1_2_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR / 2 ] = { - 2415, -13101, - 158, -295, -400, 1265, 4832, 7968, + 1233, -14293, + -91, 162, 169, -342, -505, 1332, 5281, 8742, }; SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_3_8_COEFS[ 2 + 3 * RESAMPLER_DOWN_ORDER_FIR / 2 ] = { - 13270, -13738, - -294, -123, 747, 2043, 3339, 3995, - -151, -311, 414, 1583, 2947, 3877, - -33, -389, 143, 1141, 2503, 3653, + 12634, -14550, + 246, -175, -326, -113, 764, 2209, 3664, 4402, + 171, 3, -301, -258, 391, 1693, 3227, 4272, + 88, 138, -236, -327, 95, 1203, 2733, 4022, }; SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_1_3_COEFS[ 2 + RESAMPLER_DOWN_ORDER_FIR / 2 ] = { - 16643, -14000, - -331, 19, 581, 1421, 2290, 2845, + 16306, -14409, + 99, -201, -220, -16, 572, 1483, 2433, 3043, }; SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_2_3_COEFS_LQ[ 2 + 2 * 2 ] = { @@ -129,148 +122,148 @@ SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_Resampler_80_441_ARMA4_COEFS[ 7 ] = { /* Table with interplation fractions of 1/288 : 2/288 : 287/288 (432 Words) */ SKP_DWORD_ALIGN const SKP_int16 SKP_Silk_resampler_frac_FIR_144[ 144 ][ RESAMPLER_ORDER_FIR_144 / 2 ] = { - { -647, 1884, 30078}, - { -625, 1736, 30044}, - { -603, 1591, 30005}, - { -581, 1448, 29963}, - { -559, 1308, 29917}, - { -537, 1169, 29867}, - { -515, 1032, 29813}, - { -494, 898, 29755}, - { -473, 766, 29693}, - { -452, 636, 29627}, - { -431, 508, 29558}, - { -410, 383, 29484}, - { -390, 260, 29407}, - { -369, 139, 29327}, - { -349, 20, 29242}, - { -330, -97, 29154}, - { -310, -211, 29062}, - { -291, -324, 28967}, - { -271, -434, 28868}, - { -253, -542, 28765}, - { -234, -647, 28659}, - { -215, -751, 28550}, - { -197, -852, 28436}, - { -179, -951, 28320}, - { -162, -1048, 28200}, - { -144, -1143, 28077}, - { -127, -1235, 27950}, - { -110, -1326, 27820}, - { -94, -1414, 27687}, - { -77, -1500, 27550}, - { -61, -1584, 27410}, - { -45, -1665, 27268}, - { -30, -1745, 27122}, - { -15, -1822, 26972}, - { 0, -1897, 26820}, - { 15, -1970, 26665}, - { 29, -2041, 26507}, - { 44, -2110, 26346}, - { 57, -2177, 26182}, - { 71, -2242, 26015}, - { 84, -2305, 25845}, - { 97, -2365, 25673}, - { 110, -2424, 25498}, - { 122, -2480, 25320}, - { 134, -2534, 25140}, - { 146, -2587, 24956}, - { 157, -2637, 24771}, - { 168, -2685, 24583}, - { 179, -2732, 24392}, - { 190, -2776, 24199}, - { 200, -2819, 24003}, - { 210, -2859, 23805}, - { 220, -2898, 23605}, - { 229, -2934, 23403}, - { 238, -2969, 23198}, - { 247, -3002, 22992}, - { 255, -3033, 22783}, - { 263, -3062, 22572}, - { 271, -3089, 22359}, - { 279, -3114, 22144}, - { 286, -3138, 21927}, - { 293, -3160, 21709}, - { 300, -3180, 21488}, - { 306, -3198, 21266}, - { 312, -3215, 21042}, - { 318, -3229, 20816}, - { 323, -3242, 20589}, - { 328, -3254, 20360}, - { 333, -3263, 20130}, - { 338, -3272, 19898}, - { 342, -3278, 19665}, - { 346, -3283, 19430}, - { 350, -3286, 19194}, - { 353, -3288, 18957}, - { 356, -3288, 18718}, - { 359, -3286, 18478}, - { 362, -3283, 18238}, - { 364, -3279, 17996}, - { 366, -3273, 17753}, - { 368, -3266, 17509}, - { 369, -3257, 17264}, - { 371, -3247, 17018}, - { 372, -3235, 16772}, - { 372, -3222, 16525}, - { 373, -3208, 16277}, - { 373, -3192, 16028}, - { 373, -3175, 15779}, - { 373, -3157, 15529}, - { 372, -3138, 15279}, - { 371, -3117, 15028}, - { 370, -3095, 14777}, - { 369, -3072, 14526}, - { 368, -3048, 14274}, - { 366, -3022, 14022}, - { 364, -2996, 13770}, - { 362, -2968, 13517}, - { 359, -2940, 13265}, - { 357, -2910, 13012}, - { 354, -2880, 12760}, - { 351, -2848, 12508}, - { 348, -2815, 12255}, - { 344, -2782, 12003}, - { 341, -2747, 11751}, - { 337, -2712, 11500}, - { 333, -2676, 11248}, - { 328, -2639, 10997}, - { 324, -2601, 10747}, - { 320, -2562, 10497}, - { 315, -2523, 10247}, - { 310, -2482, 9998}, - { 305, -2442, 9750}, - { 300, -2400, 9502}, - { 294, -2358, 9255}, - { 289, -2315, 9009}, - { 283, -2271, 8763}, - { 277, -2227, 8519}, - { 271, -2182, 8275}, - { 265, -2137, 8032}, - { 259, -2091, 7791}, - { 252, -2045, 7550}, - { 246, -1998, 7311}, - { 239, -1951, 7072}, - { 232, -1904, 6835}, - { 226, -1856, 6599}, - { 219, -1807, 6364}, - { 212, -1758, 6131}, - { 204, -1709, 5899}, - { 197, -1660, 5668}, - { 190, -1611, 5439}, - { 183, -1561, 5212}, - { 175, -1511, 4986}, - { 168, -1460, 4761}, - { 160, -1410, 4538}, - { 152, -1359, 4317}, - { 145, -1309, 4098}, - { 137, -1258, 3880}, - { 129, -1207, 3664}, - { 121, -1156, 3450}, - { 113, -1105, 3238}, - { 105, -1054, 3028}, - { 97, -1003, 2820}, - { 89, -952, 2614}, - { 81, -901, 2409}, - { 73, -851, 2207}, + { -25, 58, 32526}, + { -8, -69, 32461}, + { 8, -195, 32393}, + { 25, -318, 32321}, + { 41, -439, 32244}, + { 57, -557, 32163}, + { 72, -673, 32079}, + { 88, -787, 31990}, + { 103, -899, 31897}, + { 118, -1009, 31801}, + { 133, -1116, 31700}, + { 148, -1221, 31596}, + { 162, -1324, 31488}, + { 177, -1424, 31376}, + { 191, -1522, 31260}, + { 205, -1618, 31140}, + { 218, -1712, 31017}, + { 231, -1803, 30890}, + { 245, -1893, 30759}, + { 257, -1980, 30625}, + { 270, -2065, 30487}, + { 282, -2147, 30346}, + { 295, -2228, 30201}, + { 306, -2306, 30052}, + { 318, -2382, 29900}, + { 330, -2456, 29745}, + { 341, -2528, 29586}, + { 352, -2597, 29424}, + { 362, -2664, 29259}, + { 373, -2730, 29090}, + { 383, -2793, 28918}, + { 393, -2854, 28743}, + { 402, -2912, 28565}, + { 411, -2969, 28384}, + { 421, -3024, 28199}, + { 429, -3076, 28012}, + { 438, -3126, 27822}, + { 446, -3175, 27628}, + { 454, -3221, 27432}, + { 462, -3265, 27233}, + { 469, -3307, 27031}, + { 476, -3348, 26826}, + { 483, -3386, 26619}, + { 490, -3422, 26409}, + { 496, -3456, 26196}, + { 502, -3488, 25981}, + { 508, -3518, 25763}, + { 514, -3547, 25543}, + { 519, -3573, 25320}, + { 524, -3597, 25095}, + { 529, -3620, 24867}, + { 533, -3640, 24637}, + { 538, -3659, 24405}, + { 541, -3676, 24171}, + { 545, -3691, 23934}, + { 548, -3704, 23696}, + { 552, -3716, 23455}, + { 554, -3726, 23212}, + { 557, -3733, 22967}, + { 559, -3740, 22721}, + { 561, -3744, 22472}, + { 563, -3747, 22222}, + { 565, -3748, 21970}, + { 566, -3747, 21716}, + { 567, -3745, 21460}, + { 568, -3741, 21203}, + { 568, -3735, 20944}, + { 568, -3728, 20684}, + { 568, -3719, 20422}, + { 568, -3708, 20159}, + { 568, -3697, 19894}, + { 567, -3683, 19628}, + { 566, -3668, 19361}, + { 564, -3652, 19093}, + { 563, -3634, 18823}, + { 561, -3614, 18552}, + { 559, -3594, 18280}, + { 557, -3571, 18008}, + { 554, -3548, 17734}, + { 552, -3523, 17459}, + { 549, -3497, 17183}, + { 546, -3469, 16907}, + { 542, -3440, 16630}, + { 539, -3410, 16352}, + { 535, -3379, 16074}, + { 531, -3346, 15794}, + { 527, -3312, 15515}, + { 522, -3277, 15235}, + { 517, -3241, 14954}, + { 513, -3203, 14673}, + { 507, -3165, 14392}, + { 502, -3125, 14110}, + { 497, -3085, 13828}, + { 491, -3043, 13546}, + { 485, -3000, 13264}, + { 479, -2957, 12982}, + { 473, -2912, 12699}, + { 466, -2867, 12417}, + { 460, -2820, 12135}, + { 453, -2772, 11853}, + { 446, -2724, 11571}, + { 439, -2675, 11289}, + { 432, -2625, 11008}, + { 424, -2574, 10727}, + { 417, -2522, 10446}, + { 409, -2470, 10166}, + { 401, -2417, 9886}, + { 393, -2363, 9607}, + { 385, -2309, 9328}, + { 376, -2253, 9050}, + { 368, -2198, 8773}, + { 359, -2141, 8497}, + { 351, -2084, 8221}, + { 342, -2026, 7946}, + { 333, -1968, 7672}, + { 324, -1910, 7399}, + { 315, -1850, 7127}, + { 305, -1791, 6856}, + { 296, -1731, 6586}, + { 286, -1670, 6317}, + { 277, -1609, 6049}, + { 267, -1548, 5783}, + { 257, -1486, 5517}, + { 247, -1424, 5254}, + { 237, -1362, 4991}, + { 227, -1300, 4730}, + { 217, -1237, 4470}, + { 207, -1174, 4212}, + { 197, -1110, 3956}, + { 187, -1047, 3701}, + { 176, -984, 3448}, + { 166, -920, 3196}, + { 155, -856, 2946}, + { 145, -792, 2698}, + { 134, -728, 2452}, + { 124, -664, 2207}, + { 113, -600, 1965}, + { 102, -536, 1724}, + { 92, -472, 1486}, + { 81, -408, 1249}, + { 70, -345, 1015}, + { 60, -281, 783}, + { 49, -217, 553}, + { 38, -154, 325}, }; diff --git a/src_SigProc_FIX/SKP_Silk_resampler_rom.h b/src_SigProc_FIX/SKP_Silk_resampler_rom.h index 9fcf5bacc8653bae75ce63f65621a856e02ffa32..dca280a33b0c5980fe8abcfebeb229b5ae3a7d27 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_rom.h +++ b/src_SigProc_FIX/SKP_Silk_resampler_rom.h @@ -40,15 +40,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef _SKP_SILK_FIX_RESAMPLER_ROM_H_ #define _SKP_SILK_FIX_RESAMPLER_ROM_H_ -#include "SKP_Silk_typedef.h" -#include "SKP_Silk_resampler_structs.h" - #ifdef __cplusplus extern "C" { #endif -#define RESAMPLER_DOWN_ORDER_FIR 12 +#include "SKP_Silk_typedef.h" +#include "SKP_Silk_resampler_structs.h" + +#define RESAMPLER_DOWN_ORDER_FIR 16 #define RESAMPLER_ORDER_FIR_144 6 diff --git a/src_SigProc_FIX/SKP_Silk_resampler_structs.h b/src_SigProc_FIX/SKP_Silk_resampler_structs.h index 0a1a8cefc7ed6c8c74e4f9fbbed0cfaac5eb94ee..e4a09c9411f86c58294b330039a29d770c86dadb 100644 --- a/src_SigProc_FIX/SKP_Silk_resampler_structs.h +++ b/src_SigProc_FIX/SKP_Silk_resampler_structs.h @@ -37,6 +37,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef SKP_Silk_RESAMPLER_STRUCTS_H #define SKP_Silk_RESAMPLER_STRUCTS_H + #ifdef __cplusplus extern "C" { #endif diff --git a/src_SigProc_FIX/SKP_Silk_schur.c b/src_SigProc_FIX/SKP_Silk_schur.c index bd46750baa89eda1f0e21f05edee08ab3e65d061..4f2209fb6b4d21227483aef26403ee52fed22ec3 100644 --- a/src_SigProc_FIX/SKP_Silk_schur.c +++ b/src_SigProc_FIX/SKP_Silk_schur.c @@ -37,10 +37,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Faster than schur64(), but much less accurate. */ /* uses SMLAWB(), requiring armv5E and higher. */ -void SKP_Silk_schur( - SKP_int16 *rc_Q15, /* O: reflection coefficients [order] Q15 */ - const SKP_int32 *c, /* I: correlations [order+1] */ - const SKP_int32 order /* I: prediction order */ +SKP_int32 SKP_Silk_schur( /* O: Returns residual energy */ + SKP_int16 *rc_Q15, /* O: reflection coefficients [order] Q15 */ + const SKP_int32 *c, /* I: correlations [order+1] */ + const SKP_int32 order /* I: prediction order */ ) { SKP_int k, n, lz; @@ -60,7 +60,7 @@ void SKP_Silk_schur( /* Shift to the left */ lz -= 2; for( k = 0; k < order + 1; k++ ) { - C[ k ][ 0 ] = C[ k ][ 1 ] = SKP_LSHIFT( c[k], lz ); + C[ k ][ 0 ] = C[ k ][ 1 ] = SKP_LSHIFT( c[ k ], lz ); } } else { /* No need to shift */ @@ -78,7 +78,7 @@ void SKP_Silk_schur( rc_tmp_Q15 = SKP_SAT16( rc_tmp_Q15 ); /* Store */ - rc_Q15[ k ] = (SKP_int16)rc_tmp_Q15; + rc_Q15[ k ] = ( SKP_int16 )rc_tmp_Q15; /* Update correlations */ for( n = 0; n < order - k; n++ ) { @@ -88,4 +88,7 @@ void SKP_Silk_schur( C[ n ][ 1 ] = SKP_SMLAWB( Ctmp2, SKP_LSHIFT( Ctmp1, 1 ), rc_tmp_Q15 ); } } + + /* return residual energy */ + return C[ 0 ][ 1 ]; } diff --git a/src_SigProc_FLP/SKP_Silk_NLSF_VQ_weights_laroia_FLP.c b/src_SigProc_FLP/SKP_Silk_NLSF_VQ_weights_laroia_FLP.c index 192758f31b4afafef872a6e48078b4b6e1739594..82a94fd9dad6a67112e815b2b609ee850667ffe3 100644 --- a/src_SigProc_FLP/SKP_Silk_NLSF_VQ_weights_laroia_FLP.c +++ b/src_SigProc_FLP/SKP_Silk_NLSF_VQ_weights_laroia_FLP.c @@ -33,7 +33,7 @@ Parameters Using Structured Vector Quantization", Proc. IEEE Int. Conf. Acoust., Signal Processing, pp. 641-644, 1991. */ -#define MIN_NDELTA ( 1e-6f / PI ) +#define MIN_NDELTA 1e-4f /* Laroia low complexity NLSF weights */ void SKP_Silk_NLSF_VQ_weights_laroia_FLP( diff --git a/src_SigProc_FLP/SKP_Silk_SigProc_FLP.h b/src_SigProc_FLP/SKP_Silk_SigProc_FLP.h index c797c89dde024e57a7c077b1484afa4194c5cd2e..74dcc000fb2865e560ad7d9b18f8e387637c9fa6 100644 --- a/src_SigProc_FLP/SKP_Silk_SigProc_FLP.h +++ b/src_SigProc_FLP/SKP_Silk_SigProc_FLP.h @@ -25,6 +25,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ + #ifndef _SKP_SILK_SIGPROC_FLP_H_ #define _SKP_SILK_SIGPROC_FLP_H_ @@ -83,10 +84,10 @@ SKP_int SKP_Silk_LPC_inverse_pred_gain_FLP( /* O: returns 1 if unstable, other SKP_int32 order /* I: prediction order */ ); -void SKP_Silk_schur_FLP( - SKP_float refl_coef[], /* O reflection coefficients (length order) */ - const SKP_float auto_corr[], /* I autotcorreation sequence (length order+1) */ - SKP_int order /* I order */ +SKP_float SKP_Silk_schur_FLP( /* O returns residual energy */ + SKP_float refl_coef[], /* O reflection coefficients (length order) */ + const SKP_float auto_corr[], /* I autocorrelation sequence (length order+1) */ + SKP_int order /* I order */ ); void SKP_Silk_k2a_FLP( diff --git a/src_SigProc_FLP/SKP_Silk_k2a_FLP.c b/src_SigProc_FLP/SKP_Silk_k2a_FLP.c index 232c885dcba6ec6258f9c20f4f5b5a64b9b98f05..4bbd9d75f12b4d8d6a26ea1505509258561d100c 100644 --- a/src_SigProc_FLP/SKP_Silk_k2a_FLP.c +++ b/src_SigProc_FLP/SKP_Silk_k2a_FLP.c @@ -44,7 +44,7 @@ void SKP_Silk_k2a_FLP( ) { SKP_int k, n; - SKP_float Atmp[SKP_Silk_MAX_ORDER_LPC]; + SKP_float Atmp[ SKP_Silk_MAX_ORDER_LPC ]; for( k = 0; k < order; k++ ){ for( n = 0; n < k; n++ ){ diff --git a/src_SigProc_FLP/SKP_Silk_pitch_analysis_core_FLP.c b/src_SigProc_FLP/SKP_Silk_pitch_analysis_core_FLP.c index 5503c5d20b4d128843295ca05c44267660d72ef2..4758952fefbf6e606fcb6d678063a3ac46ec9634 100644 --- a/src_SigProc_FLP/SKP_Silk_pitch_analysis_core_FLP.c +++ b/src_SigProc_FLP/SKP_Silk_pitch_analysis_core_FLP.c @@ -102,12 +102,13 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv SKP_float lag_log2, prevLag_log2, delta_lag_log2_sqr; SKP_float energies_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ]; SKP_float cross_corr_st3[ PE_MAX_NB_SUBFR ][ PE_NB_CBKS_STAGE3_MAX ][ PE_NB_STAGE3_LAGS ]; - SKP_int diff, lag_counter, frame_length, frame_length_8kHz, frame_length_4kHz; - SKP_int sf_length, sf_length_8kHz, sf_length_4kHz; - SKP_int min_lag, min_lag_8kHz, min_lag_4kHz; - SKP_int max_lag, max_lag_8kHz, max_lag_4kHz; + SKP_int diff, lag_counter; + SKP_int frame_length, frame_length_8kHz, frame_length_4kHz; + SKP_int sf_length, sf_length_8kHz, sf_length_4kHz; + SKP_int min_lag, min_lag_8kHz, min_lag_4kHz; + SKP_int max_lag, max_lag_8kHz, max_lag_4kHz; + SKP_int nb_cbk_search; const SKP_int8 *Lag_CB_ptr; - SKP_int nb_cbk_search; /* Check for valid sampling frequency */ SKP_assert( Fs_kHz == 8 || Fs_kHz == 12 || Fs_kHz == 16 || Fs_kHz == 24 ); @@ -210,7 +211,7 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv /* Calculate first vector products before loop */ cross_corr = SKP_Silk_inner_product_FLP( target_ptr, basis_ptr, sf_length_8kHz ); - normalizer = SKP_Silk_energy_FLP( basis_ptr, sf_length_8kHz ) + 1000.0f; + normalizer = SKP_Silk_energy_FLP( basis_ptr, sf_length_8kHz ) + sf_length_8kHz * 4000.0f; C[ 0 ][ min_lag_4kHz ] += (SKP_float)(cross_corr / sqrt(normalizer)); @@ -234,14 +235,14 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv target_ptr += sf_length_8kHz; } - /* apply short-lag bias */ + /* Apply short-lag bias */ for( i = max_lag_4kHz; i >= min_lag_4kHz; i-- ) { C[ 0 ][ i ] -= C[ 0 ][ i ] * i / 4096.0f; } /* Sort */ - length_d_srch = 5 + complexity; - SKP_assert( length_d_srch <= PE_D_SRCH_LENGTH ); + length_d_srch = 4 + 2 * complexity; + SKP_assert( 3 * length_d_srch <= PE_D_SRCH_LENGTH ); SKP_Silk_insertion_sort_decreasing_FLP( &C[ 0 ][ min_lag_4kHz ], d_srch, max_lag_4kHz - min_lag_4kHz + 1, length_d_srch ); /* Escape if correlation is very low already here */ @@ -253,7 +254,7 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv } threshold = Cmax * Cmax; if( energy / 16.0f > threshold ) { - SKP_memset( pitch_out, 0, nb_subfr * sizeof(SKP_int) ); + SKP_memset( pitch_out, 0, nb_subfr * sizeof( SKP_int ) ); *LTPCorr = 0.0f; *lagIndex = 0; *contourIndex = 0; @@ -372,7 +373,7 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv } else { nb_cbk_search = PE_NB_CBKS_STAGE2; } - }else{ + } else { cbk_size = PE_NB_CBKS_STAGE2_10MS; Lag_CB_ptr = &SKP_Silk_CB_lags_stage2_10_ms[ 0 ][ 0 ]; nb_cbk_search = PE_NB_CBKS_STAGE2_10MS; @@ -410,7 +411,10 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv CCmax_new_b -= PE_FLP_PREVLAG_BIAS * nb_subfr * (*LTPCorr) * delta_lag_log2_sqr / (delta_lag_log2_sqr + 0.5f); } - if ( CCmax_new_b > CCmax_b && CCmax_new > nb_subfr * search_thres2 * search_thres2 ) { + if ( CCmax_new_b > CCmax_b && /* Find maximum biased correlation */ + CCmax_new > nb_subfr * search_thres2 * search_thres2 && /* Correlation needs to be high enough to be voiced */ + SKP_Silk_CB_lags_stage2[ 0 ][ CBimax_new ] <= min_lag_8kHz /* Lag must be in range */ + ) { CCmax_b = CCmax_new_b; CCmax = CCmax_new; lag = d; @@ -488,7 +492,9 @@ SKP_int SKP_Silk_pitch_analysis_core_FLP( /* O voicing estimate: 0 voiced, 1 unv CCmax_new = 0.0f; } - if( CCmax_new > CCmax ) { + if( CCmax_new > CCmax && + ( d + (SKP_int)SKP_Silk_CB_lags_stage3[ 0 ][ j ] ) <= max_lag + ) { CCmax = CCmax_new; lag_new = d; CBimax = j; diff --git a/src_SigProc_FLP/SKP_Silk_schur_FLP.c b/src_SigProc_FLP/SKP_Silk_schur_FLP.c index 93362c9bb4e9afeab4caaf7871cfb88fa082e2f5..7b45d0d658d51f78b3536fa0b5cddcb23a35399d 100644 --- a/src_SigProc_FLP/SKP_Silk_schur_FLP.c +++ b/src_SigProc_FLP/SKP_Silk_schur_FLP.c @@ -36,36 +36,38 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_SigProc_FLP.h" -void SKP_Silk_schur_FLP( +SKP_float SKP_Silk_schur_FLP( /* O returns residual energy */ SKP_float refl_coef[], /* O reflection coefficients (length order) */ - const SKP_float auto_corr[], /* I autotcorreation sequence (length order+1) */ + const SKP_float auto_corr[], /* I autotcorrelation sequence (length order+1) */ SKP_int order /* I order */ ) { SKP_int k, n; - SKP_float C[SKP_Silk_MAX_ORDER_LPC + 1][2]; + SKP_float C[ SKP_Silk_MAX_ORDER_LPC + 1 ][ 2 ]; SKP_float Ctmp1, Ctmp2, rc_tmp; - /* copy correlations */ - for( k = 0; k < order+1; k++ ){ - C[k][0] = C[k][1] = auto_corr[k]; + /* Copy correlations */ + for( k = 0; k < order+1; k++ ) { + C[ k ][ 0 ] = C[ k ][ 1 ] = auto_corr[ k ]; } - for( k = 0; k < order; k++ ) - { - /* get reflection coefficient */ - rc_tmp = -C[k + 1][0] / SKP_max_float(C[0][1], 1e-9f); + for( k = 0; k < order; k++ ) { + /* Get reflection coefficient */ + rc_tmp = -C[ k + 1 ][ 0 ] / SKP_max_float( C[ 0 ][ 1 ], 1e-9f ); - /* save the output */ - refl_coef[k] = rc_tmp; + /* Save the output */ + refl_coef[ k ] = rc_tmp; - /* update correlations */ + /* Update correlations */ for( n = 0; n < order - k; n++ ){ - Ctmp1 = C[n + k + 1][0]; - Ctmp2 = C[n][1]; - C[n + k + 1][0] = Ctmp1 + Ctmp2 * rc_tmp; - C[n][1] = Ctmp2 + Ctmp1 * rc_tmp; + Ctmp1 = C[ n + k + 1 ][ 0 ]; + Ctmp2 = C[ n ][ 1 ]; + C[ n + k + 1 ][ 0 ] = Ctmp1 + Ctmp2 * rc_tmp; + C[ n ][ 1 ] = Ctmp2 + Ctmp1 * rc_tmp; } } + + /* Return residual energy */ + return C[ 0 ][ 1 ]; } diff --git a/src_SigProc_FLP/SKP_Silk_sort_FLP.c b/src_SigProc_FLP/SKP_Silk_sort_FLP.c index 25134ed9a27e3e15efe208aa22839c0ca72a7e5b..2c809b275829b4f5c038d7ce84d5394f7e48485d 100644 --- a/src_SigProc_FLP/SKP_Silk_sort_FLP.c +++ b/src_SigProc_FLP/SKP_Silk_sort_FLP.c @@ -28,9 +28,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Insertion sort (fast for already almost sorted arrays): */ /* Best case: O(n) for an already sorted array */ /* Worst case: O(n^2) for an inversely sorted array */ -/* */ -/* To be implemented: */ -/* Shell short: http://en.wikipedia.org/wiki/Shell_sort */ #include "SKP_Silk_typedef.h" #include "SKP_Silk_SigProc_FLP.h" diff --git a/src_common/SKP_Silk_NLSF2A_stable.c b/src_common/SKP_Silk_NLSF2A_stable.c index 05be911bc9022b2bd3b1224c1ce6e5a4e0a07cea..db06ab3208293316a728508b965cffde83df2911 100644 --- a/src_common/SKP_Silk_NLSF2A_stable.c +++ b/src_common/SKP_Silk_NLSF2A_stable.c @@ -42,7 +42,7 @@ void SKP_Silk_NLSF2A_stable( /* Ensure stable LPCs */ for( i = 0; i < MAX_LPC_STABILIZE_ITERATIONS; i++ ) { if( SKP_Silk_LPC_inverse_pred_gain( &invGain_Q30, pAR_Q12, LPC_order ) == 1 ) { - SKP_Silk_bwexpander( pAR_Q12, LPC_order, 65536 - SKP_SMULBB( 66, i ) ); /* 66_Q16 = 0.001 */ + SKP_Silk_bwexpander( pAR_Q12, LPC_order, 65536 - SKP_SMULBB( 10 + i, i ) ); /* 10_Q16 = 0.00015 */ } else { break; } diff --git a/src_common/SKP_Silk_NLSF_MSVQ_decode.c b/src_common/SKP_Silk_NLSF_MSVQ_decode.c index d5be46e99eab1f85257ba134998f4c23c6e8823e..5655e497d38c1dc0d4638ab619c7bb8860a3954a 100644 --- a/src_common/SKP_Silk_NLSF_MSVQ_decode.c +++ b/src_common/SKP_Silk_NLSF_MSVQ_decode.c @@ -35,19 +35,20 @@ void SKP_Silk_NLSF_MSVQ_decode( const SKP_int LPC_order /* I LPC order used */ ) { - const SKP_int16 *pCB_element; - SKP_int s; - SKP_int i; + const SKP_int8 *pCB_element; + SKP_int s; + SKP_int i; + SKP_int pNLSF_Q8[ MAX_LPC_ORDER ]; /* Check that each index is within valid range */ SKP_assert( 0 <= NLSFIndices[ 0 ] && NLSFIndices[ 0 ] < psNLSF_CB->CBStages[ 0 ].nVectors ); /* Point to the first vector element */ - pCB_element = &psNLSF_CB->CBStages[ 0 ].CB_NLSF_Q15[ SKP_MUL( NLSFIndices[ 0 ], LPC_order ) ]; + pCB_element = &psNLSF_CB->CBStages[ 0 ].CB_NLSF_Q8[ SKP_MUL( NLSFIndices[ 0 ], LPC_order ) ]; /* Initialize with the codebook vector from stage 0 */ for( i = 0; i < LPC_order; i++ ) { - pNLSF_Q15[ i ] = ( SKP_int )pCB_element[ i ]; + pNLSF_Q8[ i ] = ( SKP_int )pCB_element[ i ]; } for( s = 1; s < psNLSF_CB->nStages; s++ ) { @@ -56,36 +57,41 @@ void SKP_Silk_NLSF_MSVQ_decode( if( LPC_order == 16 ) { /* Point to the first vector element */ - pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q15[ SKP_LSHIFT( NLSFIndices[ s ], 4 ) ]; + pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q8[ SKP_LSHIFT( NLSFIndices[ s ], 4 ) ]; /* Add the codebook vector from the current stage */ - pNLSF_Q15[ 0 ] += pCB_element[ 0 ]; - pNLSF_Q15[ 1 ] += pCB_element[ 1 ]; - pNLSF_Q15[ 2 ] += pCB_element[ 2 ]; - pNLSF_Q15[ 3 ] += pCB_element[ 3 ]; - pNLSF_Q15[ 4 ] += pCB_element[ 4 ]; - pNLSF_Q15[ 5 ] += pCB_element[ 5 ]; - pNLSF_Q15[ 6 ] += pCB_element[ 6 ]; - pNLSF_Q15[ 7 ] += pCB_element[ 7 ]; - pNLSF_Q15[ 8 ] += pCB_element[ 8 ]; - pNLSF_Q15[ 9 ] += pCB_element[ 9 ]; - pNLSF_Q15[ 10 ] += pCB_element[ 10 ]; - pNLSF_Q15[ 11 ] += pCB_element[ 11 ]; - pNLSF_Q15[ 12 ] += pCB_element[ 12 ]; - pNLSF_Q15[ 13 ] += pCB_element[ 13 ]; - pNLSF_Q15[ 14 ] += pCB_element[ 14 ]; - pNLSF_Q15[ 15 ] += pCB_element[ 15 ]; + pNLSF_Q8[ 0 ] += ( SKP_int )pCB_element[ 0 ]; + pNLSF_Q8[ 1 ] += ( SKP_int )pCB_element[ 1 ]; + pNLSF_Q8[ 2 ] += ( SKP_int )pCB_element[ 2 ]; + pNLSF_Q8[ 3 ] += ( SKP_int )pCB_element[ 3 ]; + pNLSF_Q8[ 4 ] += ( SKP_int )pCB_element[ 4 ]; + pNLSF_Q8[ 5 ] += ( SKP_int )pCB_element[ 5 ]; + pNLSF_Q8[ 6 ] += ( SKP_int )pCB_element[ 6 ]; + pNLSF_Q8[ 7 ] += ( SKP_int )pCB_element[ 7 ]; + pNLSF_Q8[ 8 ] += ( SKP_int )pCB_element[ 8 ]; + pNLSF_Q8[ 9 ] += ( SKP_int )pCB_element[ 9 ]; + pNLSF_Q8[ 10 ] += ( SKP_int )pCB_element[ 10 ]; + pNLSF_Q8[ 11 ] += ( SKP_int )pCB_element[ 11 ]; + pNLSF_Q8[ 12 ] += ( SKP_int )pCB_element[ 12 ]; + pNLSF_Q8[ 13 ] += ( SKP_int )pCB_element[ 13 ]; + pNLSF_Q8[ 14 ] += ( SKP_int )pCB_element[ 14 ]; + pNLSF_Q8[ 15 ] += ( SKP_int )pCB_element[ 15 ]; } else { /* Point to the first vector element */ - pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q15[ SKP_SMULBB( NLSFIndices[ s ], LPC_order ) ]; + pCB_element = &psNLSF_CB->CBStages[ s ].CB_NLSF_Q8[ SKP_SMULBB( NLSFIndices[ s ], LPC_order ) ]; /* Add the codebook vector from the current stage */ for( i = 0; i < LPC_order; i++ ) { - pNLSF_Q15[ i ] += pCB_element[ i ]; + pNLSF_Q8[ i ] += ( SKP_int )pCB_element[ i ]; } } } + /* Add 1/2 in Q15 */ + for( i = 0; i < LPC_order; i++ ) { + pNLSF_Q15[ i ] = SKP_LSHIFT16( pNLSF_Q8[ i ], 7 ) + SKP_FIX_CONST( 0.5f, 15 ); + } + /* NLSF stabilization */ SKP_Silk_NLSF_stabilize( pNLSF_Q15, psNLSF_CB->NDeltaMin_Q15, LPC_order ); } diff --git a/src_common/SKP_Silk_NSQ.c b/src_common/SKP_Silk_NSQ.c index 12dd887e8b75cba9a4036ee46a89b42c5435a561..4235687ac24f8fdd2be0874aff0fc9d066fbef00 100644 --- a/src_common/SKP_Silk_NSQ.c +++ b/src_common/SKP_Silk_NSQ.c @@ -28,11 +28,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_main.h" SKP_INLINE void SKP_Silk_nsq_scale_states( + SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ const SKP_int16 x[], /* I input in Q0 */ SKP_int32 x_sc_Q10[], /* O input scaled with 1/Gain */ - SKP_int length, /* I length of input */ - SKP_int16 sLTP[], /* I re-whitened LTP state in Q0 */ + SKP_int subfr_length, /* I length of input */ + const SKP_int16 sLTP[], /* I re-whitened LTP state in Q0 */ SKP_int32 sLTP_Q16[], /* O LTP state matching scaled input */ SKP_int subfr, /* I subframe number */ const SKP_int LTP_scale_Q14, /* I */ @@ -59,8 +60,7 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer( SKP_int offset_Q10, /* I */ SKP_int length, /* I Input length */ SKP_int shapingLPCOrder, /* I Noise shaping AR filter order */ - SKP_int predictLPCOrder, /* I Prediction filter order */ - SKP_int32 warping_Q16 /* I */ + SKP_int predictLPCOrder /* I Prediction filter order */ #ifdef SAVE_ALL_INTERNAL_DATA ,SKP_float q_in_env[], /* O */ SKP_float q_exc[], /* O */ @@ -116,6 +116,8 @@ void SKP_Silk_NSQ( /* Set unvoiced lag to the previous one, overwrite later for voiced */ lag = NSQ->lagPrev; + SKP_assert( NSQ->prev_inv_gain_Q16 != 0 ); + offset_Q10 = SKP_Silk_Quantization_Offsets_Q10[ psEncCtrlC->sigtype ][ psEncCtrlC->QuantOffsetType ]; if( LSFInterpFactor_Q2 == ( 1 << 2 ) ) { @@ -135,20 +137,20 @@ void SKP_Silk_NSQ( /* Noise shape parameters */ SKP_assert( HarmShapeGain_Q14[ k ] >= 0 ); - HarmShapeFIRPacked_Q14 = SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 ); + HarmShapeFIRPacked_Q14 = SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 ); HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 ); + NSQ->rewhite_flag = 0; if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) { /* Voiced */ lag = psEncCtrlC->pitchL[ k ]; - NSQ->rewhite_flag = 0; /* Re-whitening */ if( ( k & ( 3 - SKP_LSHIFT( LSF_interpolation_flag, 1 ) ) ) == 0 ) { + /* Rewhiten with new A coefs */ - start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2; - start_idx = SKP_LIMIT_int( start_idx, 0, psEncC->ltp_mem_length - psEncC->predictLPCOrder ); /* Limit */ + SKP_assert( start_idx > 0 ); SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) ); SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * psEncC->subfr_length ], @@ -159,12 +161,12 @@ void SKP_Silk_NSQ( } } - SKP_Silk_nsq_scale_states( NSQ, x, x_sc_Q10, psEncC->subfr_length, sLTP, + SKP_Silk_nsq_scale_states( psEncC, NSQ, x, x_sc_Q10, psEncC->subfr_length, sLTP, sLTP_Q16, k, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL ); SKP_Silk_noise_shape_quantizer( NSQ, psEncCtrlC->sigtype, x_sc_Q10, q, pxq, sLTP_Q16, A_Q12, B_Q14, AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], Lambda_Q10, - offset_Q10, psEncC->subfr_length, psEncC->shapingLPCOrder, psEncC->predictLPCOrder, psEncCtrlC->warping_Q16 + offset_Q10, psEncC->subfr_length, psEncC->shapingLPCOrder, psEncC->predictLPCOrder #ifdef SAVE_ALL_INTERNAL_DATA , q_in_env, q_exc, q_LPC_exc, q_exc_prev #endif @@ -183,6 +185,7 @@ void SKP_Silk_NSQ( /* Update lagPrev for next frame */ NSQ->lagPrev = psEncCtrlC->pitchL[ psEncC->nb_subfr - 1 ]; + /* Save quantized speech and noise shaping signals */ SKP_memcpy( NSQ->xq, &NSQ->xq[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int16 ) ); SKP_memcpy( NSQ->sLTP_shp_Q10, &NSQ->sLTP_shp_Q10[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int32 ) ); @@ -191,7 +194,7 @@ void SKP_Silk_NSQ( DEBUG_STORE_DATA( q_in_env.dat, q_in_env_buf, psEncC->frame_length * sizeof( SKP_float ) ); DEBUG_STORE_DATA( q_exc.dat, q_exc_buf, psEncC->frame_length * sizeof( SKP_float ) ); DEBUG_STORE_DATA( q_lpc_exc.dat, q_LPC_exc_buf, psEncC->frame_length * sizeof( SKP_float ) ); - DEBUG_STORE_DATA( xq.dat, &NSQ->xq[ psEncC->ltp_mem_length - psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int16 ) ); + DEBUG_STORE_DATA( xq.dat, NSQ->xq, psEncC->frame_length * sizeof( SKP_int16 ) ); DEBUG_STORE_DATA( q.dat, &q[ -psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int8 ) ); #endif } @@ -218,8 +221,7 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer( SKP_int offset_Q10, /* I */ SKP_int length, /* I Input length */ SKP_int shapingLPCOrder, /* I Noise shaping AR filter order */ - SKP_int predictLPCOrder, /* I Prediction filter order */ - SKP_int warping_Q16 /* I */ + SKP_int predictLPCOrder /* I Prediction filter order */ #ifdef SAVE_ALL_INTERNAL_DATA ,SKP_float q_in_env[], /* O */ SKP_float q_exc[], /* O */ @@ -240,13 +242,13 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer( pred_lag_ptr = &sLTP_Q16[ NSQ->sLTP_buf_idx - lag + LTP_ORDER / 2 ]; /* Setup short term AR state */ - psLPC_Q14 = &NSQ->sLPC_Q14[ MAX_LPC_ORDER - 1 ]; + psLPC_Q14 = &NSQ->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - 1 ]; /* Quantization thresholds */ - thr1_Q10 = SKP_SUB_RSHIFT32( -1536, Lambda_Q10, 1); - thr2_Q10 = SKP_SUB_RSHIFT32( -512, Lambda_Q10, 1); + thr1_Q10 = SKP_SUB_RSHIFT32( -1536, Lambda_Q10, 1 ); + thr2_Q10 = SKP_SUB_RSHIFT32( -512, Lambda_Q10, 1 ); thr2_Q10 = SKP_ADD_RSHIFT32( thr2_Q10, SKP_SMULBB( offset_Q10, Lambda_Q10 ), 10 ); - thr3_Q10 = SKP_ADD_RSHIFT32( 512, Lambda_Q10, 1); + thr3_Q10 = SKP_ADD_RSHIFT32( 512, Lambda_Q10, 1 ); for( i = 0; i < length; i++ ) { /* Generate dither */ @@ -271,7 +273,6 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer( LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -7 ], a_Q12[ 7 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -8 ], a_Q12[ 8 ] ); LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -9 ], a_Q12[ 9 ] ); - for( j = 10; j < predictLPCOrder; j ++ ) { LPC_pred_Q10 = SKP_SMLAWB( LPC_pred_Q10, psLPC_Q14[ -j ], a_Q12[ j ] ); } @@ -291,20 +292,15 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer( /* Noise shape feedback */ SKP_assert( ( shapingLPCOrder & 1 ) == 0 ); /* check that order is even */ - /* Output of lowpass section */ - tmp2 = SKP_SMLAWB( psLPC_Q14[ 0 ], NSQ->sAR2_Q14[ 0 ], warping_Q16 ); - /* Output of allpass section */ - tmp1 = SKP_SMLAWB( NSQ->sAR2_Q14[ 0 ], NSQ->sAR2_Q14[ 1 ] - tmp2, warping_Q16 ); + tmp2 = psLPC_Q14[ 0 ]; + tmp1 = NSQ->sAR2_Q14[ 0 ]; NSQ->sAR2_Q14[ 0 ] = tmp2; n_AR_Q10 = SKP_SMULWB( tmp2, AR_shp_Q13[ 0 ] ); - /* Loop over allpass sections */ for( j = 2; j < shapingLPCOrder; j += 2 ) { - /* Output of allpass section */ - tmp2 = SKP_SMLAWB( NSQ->sAR2_Q14[ j - 1 ], NSQ->sAR2_Q14[ j + 0 ] - tmp1, warping_Q16 ); + tmp2 = NSQ->sAR2_Q14[ j - 1 ]; NSQ->sAR2_Q14[ j - 1 ] = tmp1; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, tmp1, AR_shp_Q13[ j - 1 ] ); - /* Output of allpass section */ - tmp1 = SKP_SMLAWB( NSQ->sAR2_Q14[ j + 0 ], NSQ->sAR2_Q14[ j + 1 ] - tmp2, warping_Q16 ); + tmp1 = NSQ->sAR2_Q14[ j + 0 ]; NSQ->sAR2_Q14[ j + 0 ] = tmp2; n_AR_Q10 = SKP_SMLAWB( n_AR_Q10, tmp2, AR_shp_Q13[ j ] ); } @@ -324,8 +320,8 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer( /* Symmetric, packed FIR coefficients */ n_LTP_Q14 = SKP_SMULWB( SKP_ADD32( shp_lag_ptr[ 0 ], shp_lag_ptr[ -2 ] ), HarmShapeFIRPacked_Q14 ); n_LTP_Q14 = SKP_SMLAWT( n_LTP_Q14, shp_lag_ptr[ -1 ], HarmShapeFIRPacked_Q14 ); - shp_lag_ptr++; n_LTP_Q14 = SKP_LSHIFT( n_LTP_Q14, 6 ); + shp_lag_ptr++; } else { n_LTP_Q14 = 0; } @@ -345,18 +341,21 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer( r_Q10 = SKP_LIMIT_32( r_Q10, -64 << 10, 64 << 10 ); /* Quantize */ - if( r_Q10 < thr1_Q10 ) { - q_Q0 = SKP_RSHIFT_ROUND( SKP_ADD_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 ); - q_Q10 = SKP_LSHIFT( q_Q0, 10 ); - } else if( r_Q10 < thr2_Q10 ) { - q_Q0 = -1; - q_Q10 = -1024; - } else if( r_Q10 > thr3_Q10 ) { - q_Q0 = SKP_RSHIFT_ROUND( SKP_SUB_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 ); - q_Q10 = SKP_LSHIFT( q_Q0, 10 ); + q_Q0 = 0; + q_Q10 = 0; + if( r_Q10 < thr2_Q10 ) { + if( r_Q10 < thr1_Q10 ) { + q_Q0 = SKP_RSHIFT_ROUND( SKP_ADD_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 ); + q_Q10 = SKP_LSHIFT( q_Q0, 10 ); + } else { + q_Q0 = -1; + q_Q10 = -1024; + } } else { - q_Q0 = 0; - q_Q10 = 0; + if( r_Q10 > thr3_Q10 ) { + q_Q0 = SKP_RSHIFT_ROUND( SKP_SUB_RSHIFT32( r_Q10, Lambda_Q10, 1 ), 10 ); + q_Q10 = SKP_LSHIFT( q_Q0, 10 ); + } } q[ i ] = ( SKP_int8 )q_Q0; /* No saturation needed because max is 64 */ @@ -391,31 +390,33 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer( /* Make dither dependent on quantized signal */ NSQ->rand_seed += q[ i ]; } + /* Update LPC synth buffer */ - SKP_memcpy( NSQ->sLPC_Q14, &NSQ->sLPC_Q14[ length ], MAX_LPC_ORDER * sizeof( SKP_int32 ) ); + SKP_memcpy( NSQ->sLPC_Q14, &NSQ->sLPC_Q14[ length ], NSQ_LPC_BUF_LENGTH * sizeof( SKP_int32 ) ); } SKP_INLINE void SKP_Silk_nsq_scale_states( + SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ const SKP_int16 x[], /* I input in Q0 */ SKP_int32 x_sc_Q10[], /* O input scaled with 1/Gain */ - SKP_int length, /* I length of input */ - SKP_int16 sLTP[], /* I re-whitened LTP state in Q0 */ + SKP_int subfr_length, /* I length of input */ + const SKP_int16 sLTP[], /* I re-whitened LTP state in Q0 */ SKP_int32 sLTP_Q16[], /* O LTP state matching scaled input */ SKP_int subfr, /* I subframe number */ const SKP_int LTP_scale_Q14, /* I */ - const SKP_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */ - const SKP_int pitchL[ MAX_NB_SUBFR ] /* I */ + const SKP_int32 Gains_Q16[ MAX_NB_SUBFR ], /* I */ + const SKP_int pitchL[ MAX_NB_SUBFR ] /* I */ ) { - SKP_int i, scale_length, lag; + SKP_int i, lag; SKP_int32 inv_gain_Q16, gain_adj_Q16, inv_gain_Q32; inv_gain_Q16 = SKP_INVERSE32_varQ( SKP_max( Gains_Q16[ subfr ], 1 ), 32 ); inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX ); lag = pitchL[ subfr ]; - /* After rewhitening the LTP state is un-scaled */ + /* After rewhitening the LTP state is un-scaled, so scale with inv_gain_Q16 */ if( NSQ->rewhite_flag ) { inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 ); if( subfr == 0 ) { @@ -423,33 +424,31 @@ SKP_INLINE void SKP_Silk_nsq_scale_states( inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, LTP_scale_Q14 ), 2 ); } for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) { + SKP_assert( i < MAX_FRAME_LENGTH ); sLTP_Q16[ i ] = SKP_SMULWB( inv_gain_Q32, sLTP[ i ] ); } } - /* Prepare for Worst case. Next frame starts with max lag voiced */ - scale_length = length * MAX_NB_SUBFR; /* approx max lag */ - scale_length = scale_length - SKP_SMULBB( MAX_NB_SUBFR - (subfr + 1), length ); /* subtract samples that will be too old in next frame */ - scale_length = SKP_max_int( scale_length, lag + LTP_ORDER ); /* make sure to scale whole pitch period if voiced */ - /* Adjust for changing gain */ if( inv_gain_Q16 != NSQ->prev_inv_gain_Q16 ) { - gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 ); + gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 ); - for( i = NSQ->sLTP_shp_buf_idx - scale_length; i < NSQ->sLTP_shp_buf_idx; i++ ) { + /* Scale long-term shaping state */ + for( i = NSQ->sLTP_shp_buf_idx - subfr_length * psEncC->nb_subfr; i < NSQ->sLTP_shp_buf_idx; i++ ) { NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] ); } - /* Scale LTP predict state */ + /* Scale long-term prediction state */ if( NSQ->rewhite_flag == 0 ) { for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) { sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] ); } } + NSQ->sLF_AR_shp_Q12 = SKP_SMULWW( gain_adj_Q16, NSQ->sLF_AR_shp_Q12 ); - /* scale short term state */ - for( i = 0; i < MAX_LPC_ORDER; i++ ) { + /* Scale short-term prediction and shaping states */ + for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) { NSQ->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLPC_Q14[ i ] ); } for( i = 0; i < MAX_SHAPE_LPC_ORDER; i++ ) { @@ -458,11 +457,11 @@ SKP_INLINE void SKP_Silk_nsq_scale_states( } /* Scale input */ - for( i = 0; i < length; i++ ) { + for( i = 0; i < subfr_length; i++ ) { x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 ); } /* save inv_gain */ SKP_assert( inv_gain_Q16 != 0 ); NSQ->prev_inv_gain_Q16 = inv_gain_Q16; -} \ No newline at end of file +} diff --git a/src_common/SKP_Silk_NSQ_del_dec.c b/src_common/SKP_Silk_NSQ_del_dec.c index f81ad682285718a3d7b2d50fa4215d4cc6d87df3..3138c1e704ec88738ffbee270162fb743fde5893 100644 --- a/src_common/SKP_Silk_NSQ_del_dec.c +++ b/src_common/SKP_Silk_NSQ_del_dec.c @@ -58,12 +58,13 @@ SKP_INLINE void SKP_Silk_copy_del_dec_state( ); SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states( + SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */ const SKP_int16 x[], /* I Input in Q0 */ SKP_int32 x_sc_Q10[], /* O Input scaled with 1/Gain in Q10 */ - SKP_int length, /* I Length of input */ - SKP_int16 sLTP[], /* I Re-whitened LTP state in Q0 */ + SKP_int subfr_length, /* I Length of input */ + const SKP_int16 sLTP[], /* I Re-whitened LTP state in Q0 */ SKP_int32 sLTP_Q16[], /* O LTP state matching scaled input */ SKP_int subfr, /* I Subframe number */ SKP_int nStatesDelayedDecision, /* I Number of del dec states */ @@ -159,11 +160,16 @@ void SKP_Silk_NSQ_del_dec( smpl_buf_idx = 0; /* index of oldest samples */ decisionDelay = SKP_min_int( DECISION_DELAY, subfr_length ); + /* For voiced frames limit the decision delay to lower than the pitch lag */ if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) { for( k = 0; k < psEncC->nb_subfr; k++ ) { decisionDelay = SKP_min_int( decisionDelay, psEncCtrlC->pitchL[ k ] - LTP_ORDER / 2 - 1 ); } + } else { + if( lag > 0 ) { + decisionDelay = SKP_min_int( decisionDelay, lag - LTP_ORDER / 2 - 1 ); + } } if( LSFInterpFactor_Q2 == ( 1 << 2 ) ) { @@ -182,6 +188,11 @@ void SKP_Silk_NSQ_del_dec( B_Q14 = <PCoef_Q14[ k * LTP_ORDER ]; AR_shp_Q13 = &AR2_Q13[ k * MAX_SHAPE_LPC_ORDER ]; + /* Noise shape parameters */ + SKP_assert( HarmShapeGain_Q14[ k ] >= 0 ); + HarmShapeFIRPacked_Q14 = SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 ); + HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 ); + NSQ->rewhite_flag = 0; if( psEncCtrlC->sigtype == SIG_TYPE_VOICED ) { /* Voiced */ @@ -212,7 +223,7 @@ void SKP_Silk_NSQ_del_dec( last_smple_idx = smpl_buf_idx + decisionDelay; for( i = 0; i < decisionDelay; i++ ) { last_smple_idx = ( last_smple_idx - 1 ) & DECISION_DELAY_MASK; - q[ i - decisionDelay ] = ( SKP_int )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 ); + q[ i - decisionDelay ] = ( SKP_int8 )SKP_RSHIFT( psDD->Q_Q10[ last_smple_idx ], 10 ); pxq[ i - decisionDelay ] = ( SKP_int16 )SKP_SAT16( SKP_RSHIFT_ROUND( SKP_SMULWW( psDD->Xq_Q10[ last_smple_idx ], psDD->Gain_Q16[ last_smple_idx ] ), 10 ) ); @@ -224,7 +235,7 @@ void SKP_Silk_NSQ_del_dec( /* Rewhiten with new A coefs */ start_idx = psEncC->ltp_mem_length - lag - psEncC->predictLPCOrder - LTP_ORDER / 2; - start_idx = SKP_LIMIT_int( start_idx, 0, psEncC->ltp_mem_length - psEncC->predictLPCOrder ); + SKP_assert( start_idx > 0 ); SKP_memset( FiltState, 0, psEncC->predictLPCOrder * sizeof( SKP_int32 ) ); SKP_Silk_MA_Prediction( &NSQ->xq[ start_idx + k * psEncC->subfr_length ], @@ -235,19 +246,14 @@ void SKP_Silk_NSQ_del_dec( } } - /* Noise shape parameters */ - SKP_assert( HarmShapeGain_Q14[ k ] >= 0 ); - HarmShapeFIRPacked_Q14 = SKP_RSHIFT( HarmShapeGain_Q14[ k ], 2 ); - HarmShapeFIRPacked_Q14 |= SKP_LSHIFT( ( SKP_int32 )SKP_RSHIFT( HarmShapeGain_Q14[ k ], 1 ), 16 ); - - SKP_Silk_nsq_del_dec_scale_states( NSQ, psDelDec, x, x_sc_Q10, + SKP_Silk_nsq_del_dec_scale_states( psEncC, NSQ, psDelDec, x, x_sc_Q10, subfr_length, sLTP, sLTP_Q16, k, psEncC->nStatesDelayedDecision, smpl_buf_idx, LTP_scale_Q14, Gains_Q16, psEncCtrlC->pitchL ); SKP_Silk_noise_shape_quantizer_del_dec( NSQ, psDelDec, psEncCtrlC->sigtype, x_sc_Q10, q, pxq, sLTP_Q16, A_Q12, B_Q14, AR_shp_Q13, lag, HarmShapeFIRPacked_Q14, Tilt_Q14[ k ], LF_shp_Q14[ k ], Gains_Q16[ k ], Lambda_Q10, offset_Q10, psEncC->subfr_length, subfr++, psEncC->shapingLPCOrder, psEncC->predictLPCOrder, - psEncCtrlC->warping_Q16, psEncC->nStatesDelayedDecision, &smpl_buf_idx, decisionDelay ); + psEncC->warping_Q16, psEncC->nStatesDelayedDecision, &smpl_buf_idx, decisionDelay ); x += psEncC->subfr_length; q += psEncC->subfr_length; @@ -280,8 +286,8 @@ void SKP_Silk_NSQ_del_dec( SKP_memcpy( NSQ->sAR2_Q14, psDD->sAR2_Q14, sizeof( psDD->sAR2_Q14 ) ); /* Update states */ - NSQ->sLF_AR_shp_Q12 = psDD->LF_AR_Q12; - NSQ->lagPrev = psEncCtrlC->pitchL[ psEncC->nb_subfr - 1 ]; + NSQ->sLF_AR_shp_Q12 = psDD->LF_AR_Q12; + NSQ->lagPrev = psEncCtrlC->pitchL[ psEncC->nb_subfr - 1 ]; /* Save quantized speech and noise shaping signals */ SKP_memmove( NSQ->xq, &NSQ->xq[ psEncC->frame_length ], psEncC->ltp_mem_length * sizeof( SKP_int16 ) ); @@ -289,7 +295,7 @@ void SKP_Silk_NSQ_del_dec( #ifdef SAVE_ALL_INTERNAL_DATA DEBUG_STORE_DATA( sLTP_Q16, &sLTP_Q16[ psEncC->frame_length ], psEncC->frame_length * sizeof( SKP_int32 ) ); - DEBUG_STORE_DATA( xq.dat, &NSQ->xq[ psEncC->ltp_mem_length - psEncC->frame_length], psEncC->frame_length * sizeof( SKP_int16 ) ); + DEBUG_STORE_DATA( xq.dat, NSQ->xq, psEncC->frame_length * sizeof( SKP_int16 ) ); #endif } @@ -595,12 +601,13 @@ SKP_INLINE void SKP_Silk_noise_shape_quantizer_del_dec( } SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states( + SKP_Silk_encoder_state *psEncC, /* I/O Encoder State */ SKP_Silk_nsq_state *NSQ, /* I/O NSQ state */ NSQ_del_dec_struct psDelDec[], /* I/O Delayed decision states */ const SKP_int16 x[], /* I Input in Q0 */ SKP_int32 x_sc_Q10[], /* O Input scaled with 1/Gain in Q10 */ - SKP_int length, /* I Length of input */ - SKP_int16 sLTP[], /* I Re-whitened LTP state in Q0 */ + SKP_int subfr_length, /* I Length of input */ + const SKP_int16 sLTP[], /* I Re-whitened LTP state in Q0 */ SKP_int32 sLTP_Q16[], /* O LTP state matching scaled input */ SKP_int subfr, /* I Subframe number */ SKP_int nStatesDelayedDecision, /* I Number of del dec states */ @@ -610,14 +617,15 @@ SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states( const SKP_int pitchL[ MAX_NB_SUBFR ] /* I Pitch lag */ ) { - SKP_int i, k, scale_length, lag; + SKP_int i, k, lag; SKP_int32 inv_gain_Q16, gain_adj_Q16, inv_gain_Q32; NSQ_del_dec_struct *psDD; inv_gain_Q16 = SKP_INVERSE32_varQ( SKP_max( Gains_Q16[ subfr ], 1 ), 32 ); inv_gain_Q16 = SKP_min( inv_gain_Q16, SKP_int16_MAX ); lag = pitchL[ subfr ]; - /* After rewhitening the LTP state is un-scaled. So scale with inv_gain_Q16 */ + + /* After rewhitening the LTP state is un-scaled, so scale with inv_gain_Q16 */ if( NSQ->rewhite_flag ) { inv_gain_Q32 = SKP_LSHIFT( inv_gain_Q16, 16 ); if( subfr == 0 ) { @@ -634,15 +642,27 @@ SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states( if( inv_gain_Q16 != NSQ->prev_inv_gain_Q16 ) { gain_adj_Q16 = SKP_DIV32_varQ( inv_gain_Q16, NSQ->prev_inv_gain_Q16, 16 ); + /* Scale long-term shaping state */ + for( i = NSQ->sLTP_shp_buf_idx - subfr_length * psEncC->nb_subfr; i < NSQ->sLTP_shp_buf_idx; i++ ) { + NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] ); + } + + /* Scale long-term prediction state */ + if( NSQ->rewhite_flag == 0 ) { + for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) { + sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] ); + } + } + for( k = 0; k < nStatesDelayedDecision; k++ ) { psDD = &psDelDec[ k ]; /* Scale scalar states */ psDD->LF_AR_Q12 = SKP_SMULWW( gain_adj_Q16, psDD->LF_AR_Q12 ); - /* scale short term state */ + /* Scale short-term prediction and shaping states */ for( i = 0; i < NSQ_LPC_BUF_LENGTH; i++ ) { - psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDD->sLPC_Q14[ NSQ_LPC_BUF_LENGTH - i - 1 ] ); + psDD->sLPC_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, psDD->sLPC_Q14[ i ] ); } for( i = 0; i < MAX_SHAPE_LPC_ORDER; i++ ) { psDD->sAR2_Q14[ i ] = SKP_SMULWW( gain_adj_Q16, psDD->sAR2_Q14[ i ] ); @@ -652,28 +672,10 @@ SKP_INLINE void SKP_Silk_nsq_del_dec_scale_states( psDD->Shape_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, psDD->Shape_Q10[ i ] ); } } - - /* Scale long term shaping state */ - - /* Calculate length to be scaled, Worst case: Next frame is voiced with max lag */ - scale_length = length * MAX_NB_SUBFR; /* aprox max lag */ - scale_length = scale_length - SKP_SMULBB( MAX_NB_SUBFR - ( subfr + 1 ), length ); /* subtract samples that will be too old in next frame */ - scale_length = SKP_max_int( scale_length, lag + LTP_ORDER ); /* make sure to scale whole pitch period if voiced */ - - for( i = NSQ->sLTP_shp_buf_idx - scale_length; i < NSQ->sLTP_shp_buf_idx; i++ ) { - NSQ->sLTP_shp_Q10[ i ] = SKP_SMULWW( gain_adj_Q16, NSQ->sLTP_shp_Q10[ i ] ); - } - - /* Scale LTP predict state */ - if( NSQ->rewhite_flag == 0 ) { - for( i = NSQ->sLTP_buf_idx - lag - LTP_ORDER / 2; i < NSQ->sLTP_buf_idx; i++ ) { - sLTP_Q16[ i ] = SKP_SMULWW( gain_adj_Q16, sLTP_Q16[ i ] ); - } - } } /* Scale input */ - for( i = 0; i < length; i++ ) { + for( i = 0; i < subfr_length; i++ ) { x_sc_Q10[ i ] = SKP_RSHIFT( SKP_SMULBB( x[ i ], ( SKP_int16 )inv_gain_Q16 ), 6 ); } diff --git a/src_common/SKP_Silk_PLC.c b/src_common/SKP_Silk_PLC.c index 0129d832a05a6952cf6ca8251d92cb53b53310c5..5807ef50bf7907e9840d5d8e0e46c443dbe0d569 100644 --- a/src_common/SKP_Silk_PLC.c +++ b/src_common/SKP_Silk_PLC.c @@ -157,7 +157,7 @@ void SKP_Silk_PLC_conceal( SKP_int16 *B_Q14, exc_buf[ MAX_FRAME_LENGTH ], *exc_buf_ptr; SKP_int16 rand_scale_Q14, A_Q12_tmp[ MAX_LPC_ORDER ]; SKP_int32 rand_seed, harm_Gain_Q15, rand_Gain_Q15; - SKP_int lag, idx, shift1, shift2; + SKP_int lag, idx, sLTP_buf_idx, shift1, shift2; SKP_int32 energy1, energy2, *rand_ptr, *pred_lag_ptr; SKP_int32 sig_Q10[ MAX_FRAME_LENGTH ], *sig_Q10_ptr, LPC_exc_Q10, LPC_pred_Q10, LTP_pred_Q14; SKP_Silk_PLC_struct *psPLC; @@ -183,7 +183,7 @@ void SKP_Silk_PLC_conceal( SKP_Silk_sum_sqr_shift( &energy1, &shift1, exc_buf, psDec->subfr_length ); SKP_Silk_sum_sqr_shift( &energy2, &shift2, &exc_buf[ psDec->subfr_length ], psDec->subfr_length ); - if( SKP_RSHIFT( energy1, shift2 ) < SKP_RSHIFT( energy1, shift2 ) ) { + if( SKP_RSHIFT( energy1, shift2 ) < SKP_RSHIFT( energy2, shift1 ) ) { /* First sub-frame has lowest energy */ rand_ptr = &psDec->exc_Q10[ SKP_max_int( 0, 3 * psDec->subfr_length - RAND_BUF_SIZE ) ]; } else { @@ -230,9 +230,9 @@ void SKP_Silk_PLC_conceal( } } - rand_seed = psPLC->rand_seed; - lag = SKP_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 ); - psDec->sLTP_buf_idx = psDec->ltp_mem_length; + rand_seed = psPLC->rand_seed; + lag = SKP_RSHIFT_ROUND( psPLC->pitchL_Q8, 8 ); + sLTP_buf_idx = psDec->ltp_mem_length; /***************************/ /* LTP synthesis filtering */ @@ -240,7 +240,7 @@ void SKP_Silk_PLC_conceal( sig_Q10_ptr = sig_Q10; for( k = 0; k < psDec->nb_subfr; k++ ) { /* Setup pointer */ - pred_lag_ptr = &psDec->sLTP_Q16[ psDec->sLTP_buf_idx - lag + LTP_ORDER / 2 ]; + pred_lag_ptr = &psDec->sLTP_Q16[ sLTP_buf_idx - lag + LTP_ORDER / 2 ]; for( i = 0; i < psDec->subfr_length; i++ ) { rand_seed = SKP_RAND( rand_seed ); idx = SKP_RSHIFT( rand_seed, 25 ) & RAND_BUF_MASK; @@ -258,8 +258,8 @@ void SKP_Silk_PLC_conceal( LPC_exc_Q10 = SKP_ADD32( LPC_exc_Q10, SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) ); /* Harmonic part */ /* Update states */ - psDec->sLTP_Q16[ psDec->sLTP_buf_idx ] = SKP_LSHIFT( LPC_exc_Q10, 6 ); - psDec->sLTP_buf_idx++; + psDec->sLTP_Q16[ sLTP_buf_idx ] = SKP_LSHIFT( LPC_exc_Q10, 6 ); + sLTP_buf_idx++; /* Save LPC residual */ sig_Q10_ptr[ i ] = LPC_exc_Q10; diff --git a/src_common/SKP_Silk_VAD.c b/src_common/SKP_Silk_VAD.c index 40091cc590f6c80fdc94bf31d324ccb3c30bf0ea..703b2fc42e0de0a7b2fe8f81347c61d4af51a572 100644 --- a/src_common/SKP_Silk_VAD.c +++ b/src_common/SKP_Silk_VAD.c @@ -25,11 +25,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ -/* - * File Name: SKP_Silk_VAD.c - * Description: Silk VAD. - */ - #include <stdlib.h> #include "SKP_Silk_main.h" @@ -77,6 +72,7 @@ const static SKP_int32 tiltWeights[ VAD_N_BANDS ] = { 30000, 6000, -12000, -1200 SKP_int SKP_Silk_VAD_GetSA_Q8( /* O Return value, 0 if success */ SKP_Silk_VAD_state *psSilk_VAD, /* I/O Silk VAD state */ SKP_int *pSA_Q8, /* O Speech activity level in Q8 */ + SKP_int *pSNR_dB_Q7, /* O SNR for current frame in Q7 */ SKP_int pQuality_Q15[ VAD_N_BANDS ], /* O Smoothed SNR for each band */ SKP_int *pTilt_Q15, /* O current frame's frequency tilt */ const SKP_int16 pIn[], /* I PCM input [framelength] */ @@ -88,7 +84,7 @@ SKP_int SKP_Silk_VAD_GetSA_Q8( /* O Return v SKP_int32 scratch[ 3 * MAX_FRAME_LENGTH / 2 ]; SKP_int decimated_framelength, dec_subframe_length, dec_subframe_offset, SNR_Q7, i, b, s; SKP_int32 sumSquared, smooth_coef_Q16; - SKP_int16 HPstateTmp, SNR_dB_Q7; + SKP_int16 HPstateTmp; SKP_int16 X[ VAD_N_BANDS ][ MAX_FRAME_LENGTH / 2 ]; SKP_int32 Xnrg[ VAD_N_BANDS ]; @@ -121,7 +117,6 @@ SKP_int SKP_Silk_VAD_GetSA_Q8( /* O Return v /*********************************************/ /* HP filter on lowest band (differentiator) */ /*********************************************/ - // y( n ) = 0.5 * x( n ) - 0.5 * x( n - 1 ) decimated_framelength = SKP_RSHIFT( framelength, 3 ); X[ 0 ][ decimated_framelength - 1 ] = SKP_RSHIFT( X[ 0 ][ decimated_framelength - 1 ], 1 ); HPstateTmp = X[ 0 ][ decimated_framelength - 1 ]; @@ -212,12 +207,12 @@ SKP_int SKP_Silk_VAD_GetSA_Q8( /* O Return v sumSquared = SKP_DIV32_16( sumSquared, VAD_N_BANDS ); /* Q14 */ /* Root-mean-square approximation, scale to dBs, and write to output pointer */ - SNR_dB_Q7 = ( SKP_int16 )( 3 * SKP_Silk_SQRT_APPROX( sumSquared ) ); /* Q7 */ + *pSNR_dB_Q7 = ( SKP_int16 )( 3 * SKP_Silk_SQRT_APPROX( sumSquared ) ); /* Q7 */ /*********************************/ /* Speech Probability Estimation */ /*********************************/ - SA_Q15 = SKP_Silk_sigm_Q15( SKP_SMULWB( VAD_SNR_FACTOR_Q16, SNR_dB_Q7 ) - VAD_NEGATIVE_OFFSET_Q5 ); + SA_Q15 = SKP_Silk_sigm_Q15( SKP_SMULWB( VAD_SNR_FACTOR_Q16, *pSNR_dB_Q7 ) - VAD_NEGATIVE_OFFSET_Q5 ); /**************************/ /* Frequency Tilt Measure */ diff --git a/src_common/SKP_Silk_code_signs.c b/src_common/SKP_Silk_code_signs.c index 4bcd82a98997f4acc60411bc4dda960d7c93ba2f..ed51eb91cc04a15de7791ce73bf6b42c15a78ec1 100644 --- a/src_common/SKP_Silk_code_signs.c +++ b/src_common/SKP_Silk_code_signs.c @@ -36,11 +36,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Encodes signs of excitation */ void SKP_Silk_encode_signs( ec_enc *psRangeEnc, /* I/O Compressor data structure */ - const SKP_int8 q[], /* I pulse signal */ - const SKP_int length, /* I length of input */ + const SKP_int8 q[], /* I Pulse signal */ + const SKP_int length, /* I Length of input */ const SKP_int sigtype, /* I Signal type */ const SKP_int QuantOffsetType, /* I Quantization offset type */ - const SKP_int RateLevelIndex /* I Rate Level Index */ + const SKP_int RateLevelIndex /* I Rate level index */ ) { SKP_int i; diff --git a/src_common/SKP_Silk_control_audio_bandwidth.c b/src_common/SKP_Silk_control_audio_bandwidth.c new file mode 100644 index 0000000000000000000000000000000000000000..7e4c5f77522dcefed55a0c299cc62eff79b9658b --- /dev/null +++ b/src_common/SKP_Silk_control_audio_bandwidth.c @@ -0,0 +1,137 @@ +/*********************************************************************** +Copyright (c) 2006-2010, Skype Limited. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, (subject to the limitations in the disclaimer below) +are permitted provided that the following conditions are met: +- Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +- Neither the name of Skype Limited, nor the names of specific +contributors, may be used to endorse or promote products derived from +this software without specific prior written permission. +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED +BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +***********************************************************************/ + +#include "SKP_Silk_main.h" + +/* Control internal sampling rate */ +SKP_int SKP_Silk_control_audio_bandwidth( + SKP_Silk_encoder_state *psEncC, /* I/O Pointer to Silk encoder state */ + const SKP_int32 TargetRate_bps /* I Target max bitrate (bps) */ +) +{ + SKP_int fs_kHz; + + fs_kHz = psEncC->fs_kHz; + if( fs_kHz == 0 ) { + /* Encoder has just been initialized */ + if( TargetRate_bps >= SWB2WB_BITRATE_BPS ) { + fs_kHz = 24; + } else if( TargetRate_bps >= WB2MB_BITRATE_BPS ) { + fs_kHz = 16; + } else if( TargetRate_bps >= MB2NB_BITRATE_BPS ) { + fs_kHz = 12; + } else { + fs_kHz = 8; + } + /* Make sure internal rate is not higher than external rate or maximum allowed, or lower than minimum allowed */ + fs_kHz = SKP_min( fs_kHz, SKP_DIV32_16( psEncC->API_fs_Hz, 1000 ) ); + fs_kHz = SKP_min( fs_kHz, psEncC->maxInternal_fs_kHz ); + fs_kHz = SKP_max( fs_kHz, psEncC->minInternal_fs_kHz ); + } else if( SKP_SMULBB( fs_kHz, 1000 ) > psEncC->API_fs_Hz || fs_kHz > psEncC->maxInternal_fs_kHz || fs_kHz < psEncC->minInternal_fs_kHz ) { + /* Make sure internal rate is not higher than external rate or maximum allowed, or lower than minimum allowed */ + fs_kHz = SKP_DIV32_16( psEncC->API_fs_Hz, 1000 ); + fs_kHz = SKP_min( fs_kHz, psEncC->maxInternal_fs_kHz ); + fs_kHz = SKP_max( fs_kHz, psEncC->minInternal_fs_kHz ); + } else { + /* State machine for the internal sampling rate switching */ + if( psEncC->API_fs_Hz > 8000 ) { + /* Accumulate the difference between the target rate and limit for switching down */ + psEncC->bitrateDiff += SKP_MUL( psEncC->PacketSize_ms, psEncC->TargetRate_bps - psEncC->bitrate_threshold_down ); + psEncC->bitrateDiff = SKP_min( psEncC->bitrateDiff, 0 ); + + if( psEncC->vadFlag == NO_VOICE_ACTIVITY ) { /* Low speech activity */ + /* Check if we should switch down */ +#if SWITCH_TRANSITION_FILTERING + if( ( psEncC->sLP.transition_frame_no == 0 ) && /* Transition phase not active */ + ( psEncC->bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD || /* Bitrate threshold is met */ + ( psEncC->sSWBdetect.WB_detected * psEncC->fs_kHz == 24 ) ) ) { /* Forced down-switching due to WB input */ + psEncC->sLP.transition_frame_no = 1; /* Begin transition phase */ + psEncC->sLP.mode = 0; /* Switch down */ + } else if( + ( psEncC->sLP.transition_frame_no >= TRANSITION_FRAMES_DOWN ) && /* Transition phase complete */ + ( psEncC->sLP.mode == 0 ) ) { /* Ready to switch down */ + psEncC->sLP.transition_frame_no = 0; /* Ready for new transition phase */ +#else + if( psEncC->bitrateDiff <= -ACCUM_BITS_DIFF_THRESHOLD ) { /* Bitrate threshold is met */ +#endif + psEncC->bitrateDiff = 0; + + /* Switch to a lower sample frequency */ + if( psEncC->fs_kHz == 24 ) { + fs_kHz = 16; + } else if( psEncC->fs_kHz == 16 ) { + fs_kHz = 12; + } else { + SKP_assert( psEncC->fs_kHz == 12 ); + fs_kHz = 8; + } + } + + /* Check if we should switch up */ + if( ( ( psEncC->fs_kHz * 1000 < psEncC->API_fs_Hz ) && + ( psEncC->TargetRate_bps >= psEncC->bitrate_threshold_up ) && + ( psEncC->sSWBdetect.WB_detected * psEncC->fs_kHz < 16 ) ) && + ( ( psEncC->fs_kHz == 16 ) && ( psEncC->maxInternal_fs_kHz >= 24 ) || + ( psEncC->fs_kHz == 12 ) && ( psEncC->maxInternal_fs_kHz >= 16 ) || + ( psEncC->fs_kHz == 8 ) && ( psEncC->maxInternal_fs_kHz >= 12 ) ) +#if SWITCH_TRANSITION_FILTERING + && ( psEncC->sLP.transition_frame_no == 0 ) ) { /* No transition phase running, ready to switch */ + psEncC->sLP.mode = 1; /* Switch up */ +#else + ) { +#endif + psEncC->bitrateDiff = 0; + + /* Switch to a higher sample frequency */ + if( psEncC->fs_kHz == 8 ) { + fs_kHz = 12; + } else if( psEncC->fs_kHz == 12 ) { + fs_kHz = 16; + } else { + SKP_assert( psEncC->fs_kHz == 16 ); + fs_kHz = 24; + } + } + } + } + +#if SWITCH_TRANSITION_FILTERING + /* After switching up, stop transition filter during speech inactivity */ + if( ( psEncC->sLP.mode == 1 ) && + ( psEncC->sLP.transition_frame_no >= TRANSITION_FRAMES_UP ) && + ( psEncC->vadFlag == NO_VOICE_ACTIVITY ) ) { + + psEncC->sLP.transition_frame_no = 0; + + /* Reset transition filter state */ + SKP_memset( psEncC->sLP.In_LP_State, 0, 2 * sizeof( SKP_int32 ) ); + } +#endif + } + + return fs_kHz; +} diff --git a/src_common/SKP_Silk_create_init_destroy.c b/src_common/SKP_Silk_create_init_destroy.c index 2fcd4cba60729dae4dc771b0070260c32167dc76..dcc512faf29019db02ef17a2e6d6f0e33f0aa9ee 100644 --- a/src_common/SKP_Silk_create_init_destroy.c +++ b/src_common/SKP_Silk_create_init_destroy.c @@ -39,7 +39,8 @@ SKP_int SKP_Silk_init_decoder( SKP_memset( psDec, 0, sizeof( SKP_Silk_decoder_state ) ); /* Set sampling rate to 24 kHz, and init non-zero values */ - SKP_Silk_decoder_set_fs( psDec, 24, MAX_NB_SUBFR ); + psDec->nb_subfr = MAX_NB_SUBFR; + SKP_Silk_decoder_set_fs( psDec, 24 ); /* Used to deactivate e.g. LSF interpolation and fluctuation reduction */ psDec->first_frame_after_reset = 1; diff --git a/src_common/SKP_Silk_dec_SDK_API.c b/src_common/SKP_Silk_dec_API.c similarity index 71% rename from src_common/SKP_Silk_dec_SDK_API.c rename to src_common/SKP_Silk_dec_API.c index 9d3a1f7c05fa021e091c6c8ec278895bbd5029a1..46b6ae12f183797fb0485f878ef066932a956a55 100644 --- a/src_common/SKP_Silk_dec_SDK_API.c +++ b/src_common/SKP_Silk_dec_API.c @@ -1,3 +1,30 @@ +/*********************************************************************** +Copyright (c) 2006-2010, Skype Limited. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, (subject to the limitations in the disclaimer below) +are permitted provided that the following conditions are met: +- Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +- Neither the name of Skype Limited, nor the names of specific +contributors, may be used to endorse or promote products derived from +this software without specific prior written permission. +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED +BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +***********************************************************************/ + #include "SKP_Silk_SDK_API.h" #include "SKP_Silk_main.h" @@ -37,7 +64,7 @@ SKP_int SKP_Silk_SDK_Decode( ec_dec *psRangeDec, /* I/O Compressor data structure */ const SKP_int nBytesIn, /* I: Number of input bytes */ SKP_int16 *samplesOut, /* O: Decoded output speech vector */ - SKP_int16 *nSamplesOut /* I/O: Number of samples (vector/decoded) */ + SKP_int32 *nSamplesOut /* I/O: Number of samples (vector/decoded) */ ) { SKP_int ret = SKP_SILK_NO_ERROR, used_bytes, prev_fs_kHz; @@ -58,37 +85,57 @@ SKP_int SKP_Silk_SDK_Decode( nBytesIn > MAX_ARITHM_BYTES ) { /* Too long payload */ /* Avoid trying to decode a too large packet */ lostFlag = 1; - ret = SKP_SILK_DEC_PAYLOAD_TOO_LARGE; + return SKP_SILK_DEC_PAYLOAD_TOO_LARGE; } /* Save previous sample frequency */ prev_fs_kHz = psDec->fs_kHz; + + if( psDec->nFramesDecoded == 0 ) { + SKP_int fs_kHz_dec; + if( decControl->payloadSize_ms == 10 ) { + psDec->nFramesInPacket = 1; + psDec->nb_subfr = 2; + } else if( decControl->payloadSize_ms == 20 ) { + psDec->nFramesInPacket = 1; + psDec->nb_subfr = 4; + } else if( decControl->payloadSize_ms == 40 ) { + psDec->nFramesInPacket = 2; + psDec->nb_subfr = 4; + } else if( decControl->payloadSize_ms == 60 ) { + psDec->nFramesInPacket = 3; + psDec->nb_subfr = 4; + } else { + SKP_assert( 0 ); + return SKP_SILK_DEC_INVALID_FRAME_SIZE; + } + fs_kHz_dec = ( decControl->internalSampleRate >> 10 ) + 1; + if( fs_kHz_dec != 8 && fs_kHz_dec != 12 && fs_kHz_dec != 16 && fs_kHz_dec != 24 ) { + SKP_assert( 0 ); + return SKP_SILK_DEC_INVALID_SAMPLING_FREQUENCY; + } + SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec ); + } /* Call decoder for one frame */ ret += SKP_Silk_decode_frame( psDec, psRangeDec, samplesOut, nSamplesOut, nBytesIn, lostFlag, &used_bytes ); if( used_bytes ) { /* Only Call if not a packet loss */ - if( psDec->nBytesLeft > 0 && psDec->FrameTermination == SKP_SILK_MORE_FRAMES && psDec->nFramesDecoded < 5 ) { - /* We have more frames in the Payload */ - psDec->moreInternalDecoderFrames = 1; - } else { + + psDec->moreInternalDecoderFrames = psDec->nFramesInPacket - psDec->nFramesDecoded; + if( psDec->nBytesLeft <= 0 || psDec->moreInternalDecoderFrames <= 0 ) { /* Last frame in Payload */ - psDec->moreInternalDecoderFrames = 0; - psDec->nFramesInPacket = psDec->nFramesDecoded; /* Track inband FEC usage */ if( psDec->vadFlag == VOICE_ACTIVITY ) { - if( psDec->FrameTermination == SKP_SILK_LAST_FRAME ) { + if( psDec->FrameTermination == SKP_SILK_NO_LBRR ) { psDec->no_FEC_counter++; if( psDec->no_FEC_counter > NO_LBRR_THRES ) { psDec->inband_FEC_offset = 0; } - } else if( psDec->FrameTermination == SKP_SILK_LBRR_VER1 ) { + } else if( psDec->FrameTermination == SKP_SILK_LBRR ) { psDec->inband_FEC_offset = 1; /* FEC info with 1 packet delay */ psDec->no_FEC_counter = 0; - } else if( psDec->FrameTermination == SKP_SILK_LBRR_VER2 ) { - psDec->inband_FEC_offset = 2; /* FEC info with 2 packets delay */ - psDec->no_FEC_counter = 0; } } } @@ -124,7 +171,7 @@ SKP_int SKP_Silk_SDK_Decode( /* Copy all parameters that are needed out of internal structure to the control stucture */ decControl->frameSize = ( SKP_int )psDec->frame_length; - decControl->framesPerPacket = ( SKP_int )psDec->nFramesInPacket; + decControl->framesPerPayload = ( SKP_int )psDec->nFramesInPacket; decControl->inBandFECOffset = ( SKP_int )psDec->inband_FEC_offset; decControl->moreInternalDecoderFrames = ( SKP_int )psDec->moreInternalDecoderFrames; @@ -202,7 +249,7 @@ void SKP_Silk_SDK_get_TOC( /* Decode all parameter indices for the whole packet*/ SKP_Silk_decode_indices( &sDec ); - if( sDec.nFramesInPacket > SILK_MAX_FRAMES_PER_PACKET || sDec.sRC.error ) { + if( sDec.sRC.error ) { /* Corrupt packet */ SKP_memset( Silk_TOC, 0, sizeof( SKP_Silk_TOC_struct ) ); Silk_TOC->corrupt = 1; diff --git a/src_common/SKP_Silk_decode_core.c b/src_common/SKP_Silk_decode_core.c index 36016a252bb777cad7ed9f73d6f1b1ace7da8c96..0c3efddb9c56579046be7e0d4b688523ba5d8bec 100644 --- a/src_common/SKP_Silk_decode_core.c +++ b/src_common/SKP_Silk_decode_core.c @@ -37,14 +37,14 @@ void SKP_Silk_decode_core( const SKP_int q[ MAX_FRAME_LENGTH ] /* I Pulse signal */ ) { - SKP_int i, k, lag = 0, start_idx, NLSF_interpolation_flag, sigtype, LTP_scale_Q14; - SKP_int16 *A_Q12, *B_Q14, *pxq, A_Q12_tmp[ MAX_LPC_ORDER ]; - SKP_int16 sLTP[ MAX_FRAME_LENGTH ]; - SKP_int32 Gain_Q16, *pred_lag_ptr, *pexc_Q10, *pres_Q10, LTP_pred_Q14, LPC_pred_Q10; - SKP_int32 rand_seed, offset_Q10, dither; - SKP_int32 vec_Q10[ MAX_SUB_FRAME_LENGTH ]; - SKP_int32 inv_gain_Q16, inv_gain_Q32, gain_adj_Q16, FiltState[ MAX_LPC_ORDER ]; - SKP_int j; + SKP_int i, k, lag = 0, start_idx, sLTP_buf_idx, NLSF_interpolation_flag, sigtype, LTP_scale_Q14; + SKP_int16 *A_Q12, *B_Q14, *pxq, A_Q12_tmp[ MAX_LPC_ORDER ]; + SKP_int16 sLTP[ MAX_FRAME_LENGTH ]; + SKP_int32 LTP_pred_Q14, LPC_pred_Q10, Gain_Q16, inv_gain_Q16, inv_gain_Q32, gain_adj_Q16, rand_seed, offset_Q10, dither; + SKP_int32 *pred_lag_ptr, *pexc_Q10, *pres_Q10; + SKP_int32 vec_Q10[ MAX_SUB_FRAME_LENGTH ]; + SKP_int32 FiltState[ MAX_LPC_ORDER ]; + SKP_int j; SKP_assert( psDec->prev_inv_gain_Q16 != 0 ); @@ -57,7 +57,7 @@ void SKP_Silk_decode_core( } #ifdef SAVE_ALL_INTERNAL_DATA - DEBUG_STORE_DATA( q_dec.dat, q, psDec->frame_length * sizeof( SKP_int )); + DEBUG_STORE_DATA( q_dec.dat, q, psDec->frame_length * sizeof( SKP_int ) ); #endif /* Decode excitation */ @@ -82,7 +82,7 @@ void SKP_Silk_decode_core( pexc_Q10 = psDec->exc_Q10; pres_Q10 = psDec->res_Q10; pxq = &psDec->outBuf[ psDec->ltp_mem_length ]; - psDec->sLTP_buf_idx = psDec->ltp_mem_length; + sLTP_buf_idx = psDec->ltp_mem_length; /* Loop over subframes */ for( k = 0; k < psDec->nb_subfr; k++ ) { A_Q12 = psDecCtrl->PredCoef_Q12[ k >> 1 ]; @@ -123,7 +123,7 @@ void SKP_Silk_decode_core( if( ( k & ( 3 - SKP_LSHIFT( NLSF_interpolation_flag, 1 ) ) ) == 0 ) { /* Rewhiten with new A coefs */ start_idx = psDec->ltp_mem_length - lag - psDec->LPC_order - LTP_ORDER / 2; - start_idx = SKP_LIMIT_int( start_idx, 0, psDec->ltp_mem_length - psDec->LPC_order ); + SKP_assert( start_idx > 0 ); SKP_memset( FiltState, 0, psDec->LPC_order * sizeof( SKP_int32 ) ); /* Not really necessary, but Valgrind and Coverity will complain otherwise */ SKP_Silk_MA_Prediction( &psDec->outBuf[ start_idx + k * psDec->subfr_length ], @@ -136,13 +136,13 @@ void SKP_Silk_decode_core( inv_gain_Q32 = SKP_LSHIFT( SKP_SMULWB( inv_gain_Q32, psDecCtrl->LTP_scale_Q14 ), 2 ); } for( i = 0; i < (lag + LTP_ORDER/2); i++ ) { - psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] = SKP_SMULWB( inv_gain_Q32, sLTP[ psDec->ltp_mem_length - i - 1 ] ); + psDec->sLTP_Q16[ sLTP_buf_idx - i - 1 ] = SKP_SMULWB( inv_gain_Q32, sLTP[ psDec->ltp_mem_length - i - 1 ] ); } } else { /* Update LTP state when Gain changes */ if( gain_adj_Q16 != ( SKP_int32 )1 << 16 ) { for( i = 0; i < ( lag + LTP_ORDER / 2 ); i++ ) { - psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDec->sLTP_Q16[ psDec->sLTP_buf_idx - i - 1 ] ); + psDec->sLTP_Q16[ sLTP_buf_idx - i - 1 ] = SKP_SMULWW( gain_adj_Q16, psDec->sLTP_Q16[ sLTP_buf_idx - i - 1 ] ); } } } @@ -160,7 +160,7 @@ void SKP_Silk_decode_core( /* Long-term prediction */ if( sigtype == SIG_TYPE_VOICED ) { /* Setup pointer */ - pred_lag_ptr = &psDec->sLTP_Q16[ psDec->sLTP_buf_idx - lag + LTP_ORDER / 2 ]; + pred_lag_ptr = &psDec->sLTP_Q16[ sLTP_buf_idx - lag + LTP_ORDER / 2 ]; for( i = 0; i < psDec->subfr_length; i++ ) { /* Unrolled loop */ LTP_pred_Q14 = SKP_SMULWB( pred_lag_ptr[ 0 ], B_Q14[ 0 ] ); @@ -174,8 +174,8 @@ void SKP_Silk_decode_core( pres_Q10[ i ] = SKP_ADD32( pexc_Q10[ i ], SKP_RSHIFT_ROUND( LTP_pred_Q14, 4 ) ); /* Update states */ - psDec->sLTP_Q16[ psDec->sLTP_buf_idx ] = SKP_LSHIFT( pres_Q10[ i ], 6 ); - psDec->sLTP_buf_idx++; + psDec->sLTP_Q16[ sLTP_buf_idx ] = SKP_LSHIFT( pres_Q10[ i ], 6 ); + sLTP_buf_idx++; } } else { SKP_memcpy( pres_Q10, pexc_Q10, psDec->subfr_length * sizeof( SKP_int32 ) ); diff --git a/src_common/SKP_Silk_decode_frame.c b/src_common/SKP_Silk_decode_frame.c index c38a806df4058900b74bddfd824512a0ea3fcdba..16849ed4a4e5d71fc430e7f0f3529988f9d7d88e 100644 --- a/src_common/SKP_Silk_decode_frame.c +++ b/src_common/SKP_Silk_decode_frame.c @@ -25,7 +25,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ***********************************************************************/ - #include "SKP_Silk_main.h" #include "SKP_Silk_PLC.h" @@ -36,7 +35,7 @@ SKP_int SKP_Silk_decode_frame( SKP_Silk_decoder_state *psDec, /* I/O Pointer to Silk decoder state */ ec_dec *psRangeDec, /* I/O Compressor data structure */ SKP_int16 pOut[], /* O Pointer to output speech frame */ - SKP_int16 *pN, /* O Pointer to size of output frame */ + SKP_int32 *pN, /* O Pointer to size of output frame */ const SKP_int nBytes, /* I Payload length */ SKP_int action, /* I Action from Jitter Buffer */ SKP_int *decBytes /* O Used bytes to decode this frame */ @@ -78,8 +77,9 @@ TOC(decode_params) if( 0 ) { //psDec->sRC.error ) { psDec->nBytesLeft = 0; - action = 1; /* PLC operation */ - SKP_Silk_decoder_set_fs( psDec, fs_Khz_old, nb_subfr_old ); + action = 1; /* PLC operation */ + psDec->nb_subfr = nb_subfr_old; + SKP_Silk_decoder_set_fs( psDec, fs_Khz_old ); /* Avoid crashing */ *decBytes = psRangeDec->buf->storage; @@ -122,7 +122,6 @@ TOC(decode_core) if( action == 1 ) { /* Handle packet loss by extrapolation */ SKP_Silk_PLC( psDec, &sDecCtrl, pOut, L, action ); - psDec->lossCnt++; } /*************************/ @@ -161,6 +160,7 @@ TOC(HP_out) /* Update some decoder state variables */ psDec->lagPrev = sDecCtrl.pitchL[ MAX_NB_SUBFR - 1 ]; + TOC(decode_frame) return ret; diff --git a/src_common/SKP_Silk_decode_indices.c b/src_common/SKP_Silk_decode_indices.c index 3ba8a77cbc066ebb9da8f90c9fd869da79a2f55b..53495df47465b9197238fce6d1eea9a0a343143c 100644 --- a/src_common/SKP_Silk_decode_indices.c +++ b/src_common/SKP_Silk_decode_indices.c @@ -33,31 +33,12 @@ void SKP_Silk_decode_indices( ec_dec *psRangeDec /* I/O Compressor data structure */ ) { - SKP_int i, k, Ix, fs_kHz_dec, nb_subfr, FrameIndex = 0, FrameTermination; + SKP_int i, k, Ix, FrameIndex; SKP_int sigtype, QuantOffsetType, seed_int, nBytesUsed; SKP_int decode_absolute_lagIndex, delta_lagIndex, prev_lagIndex = 0; const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL; - /************************/ - /* Decode sampling rate */ - /************************/ - /* only done for first frame of packet */ - if( psDec->nFramesDecoded == 0 ) { - SKP_Silk_range_decoder( &Ix, psRangeDec, SKP_Silk_SamplingRates_CDF, SKP_Silk_SamplingRates_offset ); - fs_kHz_dec = SKP_Silk_SamplingRates_table[ Ix ]; - - /* Convert number of subframes to index */ - SKP_Silk_range_decoder( &Ix, psRangeDec, SKP_Silk_NbSubframes_CDF, SKP_Silk_NbSubframes_offset ); - nb_subfr = (Ix + 1) << 1; - SKP_assert( nb_subfr == MAX_NB_SUBFR >> 1 || nb_subfr == MAX_NB_SUBFR ); - - SKP_Silk_decoder_set_fs( psDec, fs_kHz_dec, nb_subfr ); - - FrameIndex = 0; - FrameTermination = SKP_SILK_MORE_FRAMES; - } - - while( FrameTermination == SKP_SILK_MORE_FRAMES ) { + for( FrameIndex = 0; FrameIndex < psDec->nFramesInPacket; FrameIndex++ ) { /*******************/ /* Decode VAD flag */ /*******************/ @@ -173,23 +154,19 @@ void SKP_Silk_decode_indices( /***************/ SKP_Silk_range_decoder( &seed_int, psRangeDec, SKP_Silk_Seed_CDF, SKP_Silk_Seed_offset ); psDec->Seed[ FrameIndex ] = ( SKP_int32 )seed_int; - /**************************************/ - /* Decode Frame termination indicator */ - /**************************************/ - SKP_Silk_range_decoder( &FrameTermination, psRangeDec, SKP_Silk_FrameTermination_CDF, SKP_Silk_FrameTermination_offset ); psDec->sigtype[ FrameIndex ] = sigtype; psDec->QuantOffsetType[ FrameIndex ] = QuantOffsetType; - - FrameIndex++; } + /**************************************/ + /* Decode Frame termination indicator */ + /**************************************/ + SKP_Silk_range_decoder( &psDec->FrameTermination, psRangeDec, SKP_Silk_FrameTermination_CDF, SKP_Silk_FrameTermination_offset ); + /****************************************/ /* get number of bytes used so far */ /****************************************/ nBytesUsed = SKP_RSHIFT( ec_dec_tell( psRangeDec, 0 ) + 7, 3 ); psDec->nBytesLeft = psRangeDec->buf->storage - nBytesUsed; - - psDec->nFramesInPacket = FrameIndex; - psDec->FrameTermination = FrameTermination; } diff --git a/src_common/SKP_Silk_decode_parameters.c b/src_common/SKP_Silk_decode_parameters.c index eb9077bcce66ba9ed79a4e09ea92a2cca8db2cd1..2628545a9b0b7f86110383148cab7b688b437044 100644 --- a/src_common/SKP_Silk_decode_parameters.c +++ b/src_common/SKP_Silk_decode_parameters.c @@ -41,7 +41,6 @@ void SKP_Silk_decode_parameters( const SKP_int16 *cbk_ptr_Q14; const SKP_Silk_NLSF_CB_struct *psNLSF_CB = NULL; - psDec->FrameTermination = SKP_SILK_MORE_FRAMES; psDecCtrl->sigtype = psDec->sigtype[ psDec->nFramesDecoded ]; psDecCtrl->QuantOffsetType = psDec->QuantOffsetType[ psDec->nFramesDecoded ]; psDec->vadFlag = psDec->vadFlagBuf[ psDec->nFramesDecoded ]; @@ -51,10 +50,10 @@ void SKP_Silk_decode_parameters( /* Dequant Gains */ SKP_Silk_gains_dequant( psDecCtrl->Gains_Q16, psDec->GainsIndices[ psDec->nFramesDecoded ], &psDec->LastGainIndex, psDec->nFramesDecoded, psDec->nb_subfr ); + /****************/ /* Decode NLSFs */ /****************/ - /* Set pointer to NLSF VQ CB for the current signal type */ psNLSF_CB = psDec->psNLSF_CB[ psDecCtrl->sigtype ]; @@ -107,14 +106,14 @@ void SKP_Silk_decode_parameters( /* Decode LTP gains */ /********************/ psDecCtrl->PERIndex = psDec->PERIndex[ psDec->nFramesDecoded ]; - + /* Decode Codebook Index */ cbk_ptr_Q14 = SKP_Silk_LTP_vq_ptrs_Q14[ psDecCtrl->PERIndex ]; /* set pointer to start of codebook */ for( k = 0; k < psDec->nb_subfr; k++ ) { Ix = psDec->LTPIndex[ psDec->nFramesDecoded ][ k ]; for( i = 0; i < LTP_ORDER; i++ ) { - psDecCtrl->LTPCoef_Q14[ SKP_SMULBB( k, LTP_ORDER ) + i ] = cbk_ptr_Q14[ SKP_SMULBB( Ix, LTP_ORDER ) + i ]; + psDecCtrl->LTPCoef_Q14[ k * LTP_ORDER + i ] = cbk_ptr_Q14[ Ix * LTP_ORDER + i ]; } } @@ -125,8 +124,8 @@ void SKP_Silk_decode_parameters( psDecCtrl->LTP_scale_Q14 = SKP_Silk_LTPScales_table_Q14[ Ix ]; } else { SKP_assert( psDecCtrl->sigtype == SIG_TYPE_UNVOICED ); - SKP_memset( psDecCtrl->pitchL, 0, psDec->nb_subfr * sizeof( SKP_int ) ); - SKP_memset( psDecCtrl->LTPCoef_Q14, 0, psDec->nb_subfr * LTP_ORDER * sizeof( SKP_int16 ) ); + SKP_memset( psDecCtrl->pitchL, 0, psDec->nb_subfr * sizeof( SKP_int ) ); + SKP_memset( psDecCtrl->LTPCoef_Q14, 0, LTP_ORDER * psDec->nb_subfr * sizeof( SKP_int16 ) ); psDecCtrl->PERIndex = 0; psDecCtrl->LTP_scale_Q14 = 0; } @@ -143,9 +142,4 @@ TOC(decode_pulses) /****************************************/ nBytesUsed = SKP_RSHIFT( ec_dec_tell( psRangeDec, 0 ) + 7, 3 ); psDec->nBytesLeft = psRangeDec->buf->storage - nBytesUsed; - - if( psDec->nFramesInPacket == (psDec->nFramesDecoded + 1)) { - /* To indicate the packet has been fully decoded */ - psDec->FrameTermination = SKP_SILK_LAST_FRAME; - } } diff --git a/src_common/SKP_Silk_decoder_set_fs.c b/src_common/SKP_Silk_decoder_set_fs.c index b0a94f44c274d6987d8d91e68761fc4c7013c851..0a8edb62f27758bc4fdbd8c8def28fbb7ff427db 100644 --- a/src_common/SKP_Silk_decoder_set_fs.c +++ b/src_common/SKP_Silk_decoder_set_fs.c @@ -30,12 +30,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /* Set decoder sampling rate */ void SKP_Silk_decoder_set_fs( SKP_Silk_decoder_state *psDec, /* I/O Decoder state pointer */ - SKP_int fs_kHz, /* I Sampling frequency (kHz) */ - SKP_int nb_subfr /* I Number of subframes */ + SKP_int fs_kHz /* I Sampling frequency (kHz) */ ) { - psDec->nb_subfr = nb_subfr; - psDec->frame_length = SKP_SMULBB( psDec->nb_subfr, psDec->subfr_length ); + psDec->frame_length = SKP_SMULBB( psDec->nb_subfr, psDec->subfr_length ); if( psDec->fs_kHz != fs_kHz ) { psDec->fs_kHz = fs_kHz; psDec->subfr_length = SKP_SMULBB( SUB_FRAME_LENGTH_MS, fs_kHz ); @@ -55,7 +53,6 @@ void SKP_Silk_decoder_set_fs( SKP_memset( psDec->outBuf, 0, MAX_FRAME_LENGTH * sizeof( SKP_int16 ) ); SKP_memset( psDec->prevNLSF_Q15, 0, MAX_LPC_ORDER * sizeof( SKP_int ) ); - psDec->sLTP_buf_idx = 0; psDec->lagPrev = 100; psDec->LastGainIndex = 1; psDec->prev_sigtype = 0; diff --git a/src_common/SKP_Silk_define.h b/src_common/SKP_Silk_define.h index 9895c003e663a51193ca5ea06112dff5cdf828e2..79f20b039971610c6a976d2cb63715297e4c1b1d 100644 --- a/src_common/SKP_Silk_define.h +++ b/src_common/SKP_Silk_define.h @@ -31,6 +31,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SKP_Silk_errors.h" #include "SKP_Silk_typedef.h" +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #ifdef __cplusplus extern "C" { @@ -45,11 +49,9 @@ extern "C" /* MAX DELTA LAG used for multiframe packets */ #define MAX_DELTA_LAG 10 -/* Lower limit on bitrate for each mode */ -#define MIN_TARGET_RATE_NB_BPS 5000 -#define MIN_TARGET_RATE_MB_BPS 7000 -#define MIN_TARGET_RATE_WB_BPS 8000 -#define MIN_TARGET_RATE_SWB_BPS 20000 +/* Limits on bitrate */ +#define MIN_TARGET_RATE_BPS 5000 +#define MAX_TARGET_RATE_BPS 100000 /* Transition bitrates between modes */ #define SWB2WB_BITRATE_BPS 25000 @@ -80,17 +82,9 @@ extern "C" #define INBAND_FEC_MIN_RATE_BPS 18000 /* Dont use inband FEC below this total target rate */ #define LBRR_LOSS_THRES 2 /* Start adding LBRR at this loss rate (needs tuning) */ -/* LBRR usage defines */ -#define SKP_SILK_NO_LBRR 0 /* No LBRR information for this packet */ -#define SKP_SILK_ADD_LBRR_TO_PLUS1 1 /* Add LBRR for this packet to packet n + 1 */ -#define SKP_SILK_ADD_LBRR_TO_PLUS2 2 /* Add LBRR for this packet to packet n + 2 */ - /* Frame termination indicator defines */ -#define SKP_SILK_LAST_FRAME 0 /* Last frames in packet */ -#define SKP_SILK_MORE_FRAMES 1 /* More frames to follow this one */ -#define SKP_SILK_LBRR_VER1 2 /* LBRR information from packet n - 1 */ -#define SKP_SILK_LBRR_VER2 3 /* LBRR information from packet n - 2 */ -#define SKP_SILK_EXT_LAYER 4 /* Extension layers added */ +#define SKP_SILK_NO_LBRR 0 +#define SKP_SILK_LBRR 1 /* Number of Second order Sections for SWB detection HP filter */ #define NB_SOS 3 @@ -102,7 +96,7 @@ extern "C" #define LOW_COMPLEXITY_ONLY 0 /* Activate bandwidth transition filtering for mode switching */ -# define SWITCH_TRANSITION_FILTERING 1 +#define SWITCH_TRANSITION_FILTERING 1 /* Decoder Parameters */ #define DEC_HP_ORDER 2 @@ -122,46 +116,39 @@ extern "C" /* Number of subframes */ #define MAX_NB_SUBFR 4 -/* number of samples per frame */ +/* Number of samples per frame */ #define LTP_MEM_LENGTH_MS 20 #define SUB_FRAME_LENGTH_MS 5 #define MAX_SUB_FRAME_LENGTH ( SUB_FRAME_LENGTH_MS * MAX_FS_KHZ ) #define MAX_FRAME_LENGTH_MS ( SUB_FRAME_LENGTH_MS * MAX_NB_SUBFR ) #define MAX_FRAME_LENGTH ( MAX_FRAME_LENGTH_MS * MAX_FS_KHZ ) -/* number of lookahead samples for pitch analysis */ -#define LA_PITCH_MS 3 -#define LA_PITCH_MAX (LA_PITCH_MS * MAX_FS_KHZ) - -/* number of lookahead samples for noise shape analysis */ -#define LA_SHAPE_MS 5 -#define LA_SHAPE_MAX (LA_SHAPE_MS * MAX_FS_KHZ) +/* Milliseconds of lookahead for pitch analysis */ +#define LA_PITCH_MS 2 +#define LA_PITCH_MAX ( LA_PITCH_MS * MAX_FS_KHZ ) /* Order of LPC used in find pitch */ #define MAX_FIND_PITCH_LPC_ORDER 16 /* Length of LPC window used in find pitch */ -#define FIND_PITCH_LPC_WIN_MS (30 + (LA_PITCH_MS << 1)) -#define FIND_PITCH_LPC_WIN_MS_2_SF (15 + (LA_PITCH_MS << 1)) -#define FIND_PITCH_LPC_WIN_MAX (FIND_PITCH_LPC_WIN_MS * MAX_FS_KHZ) +#define FIND_PITCH_LPC_WIN_MS ( 20 + (LA_PITCH_MS << 1) ) +#define FIND_PITCH_LPC_WIN_MS_2_SF ( 10 + (LA_PITCH_MS << 1) ) +#define FIND_PITCH_LPC_WIN_MAX ( FIND_PITCH_LPC_WIN_MS * MAX_FS_KHZ ) #define PITCH_EST_COMPLEXITY_HC_MODE SKP_Silk_PE_MAX_COMPLEX #define PITCH_EST_COMPLEXITY_MC_MODE SKP_Silk_PE_MID_COMPLEX #define PITCH_EST_COMPLEXITY_LC_MODE SKP_Silk_PE_MIN_COMPLEX +/* Milliseconds of lookahead for noise shape analysis */ +#define LA_SHAPE_MS 5 +#define LA_SHAPE_MAX ( LA_SHAPE_MS * MAX_FS_KHZ ) + +/* Maximum length of LPC window used in noise shape analysis */ +#define SHAPE_LPC_WIN_MAX ( 15 * MAX_FS_KHZ ) /* Max number of bytes in payload output buffer (may contain multiple frames) */ #define MAX_ARITHM_BYTES 1024 -#define RANGE_CODER_WRITE_BEYOND_BUFFER -1 -#define RANGE_CODER_CDF_OUT_OF_RANGE -2 -#define RANGE_CODER_NORMALIZATION_FAILED -3 -#define RANGE_CODER_ZERO_INTERVAL_WIDTH -4 -#define RANGE_CODER_DECODER_CHECK_FAILED -5 -#define RANGE_CODER_READ_BEYOND_BUFFER -6 -#define RANGE_CODER_ILLEGAL_SAMPLING_RATE -7 -#define RANGE_CODER_DEC_PAYLOAD_TOO_LONG -8 - /* dB level of lowest gain quantization level */ #define MIN_QGAIN_DB 6 /* dB level of highest gain quantization level */ @@ -199,12 +186,6 @@ extern "C" #define HARM_SHAPE_FIR_TAPS 3 -/* Length of LPC window used in noise shape analysis */ -#define SHAPE_LPC_WIN_MS 15 -#define SHAPE_LPC_WIN_16_KHZ (SHAPE_LPC_WIN_MS * 16) -#define SHAPE_LPC_WIN_24_KHZ (SHAPE_LPC_WIN_MS * 24) -#define SHAPE_LPC_WIN_MAX (SHAPE_LPC_WIN_MS * MAX_FS_KHZ) - /* Maximum number of delayed decision states */ #define MAX_DEL_DEC_STATES 4 @@ -259,9 +240,9 @@ extern "C" /******************/ /* NLSF quantizer */ /******************/ -# define NLSF_MSVQ_MAX_CB_STAGES 10 /* Update manually when changing codebooks */ -# define NLSF_MSVQ_MAX_VECTORS_IN_STAGE 128 /* Update manually when changing codebooks */ -# define NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END 16 /* Update manually when changing codebooks */ +#define NLSF_MSVQ_MAX_CB_STAGES 10 /* Update manually when changing codebooks */ +#define NLSF_MSVQ_MAX_VECTORS_IN_STAGE 64 /* Update manually when changing codebooks */ +#define NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END 16 /* Update manually when changing codebooks */ #define NLSF_MSVQ_FLUCTUATION_REDUCTION 1 #define MAX_NLSF_MSVQ_SURVIVORS 16 @@ -281,7 +262,7 @@ extern "C" # define NLSF_MSVQ_TREE_SEARCH_MAX_VECTORS_EVALUATED MAX_NLSF_MSVQ_SURVIVORS * NLSF_MSVQ_MAX_VECTORS_IN_STAGE_TWO_TO_END #endif -#define NLSF_MSVQ_SURV_MAX_REL_RD 4 +#define NLSF_MSVQ_SURV_MAX_REL_RD 0.1f /* Must be < 0.5 */ /* Transition filtering for mode switching */ #if SWITCH_TRANSITION_FILTERING @@ -299,12 +280,6 @@ extern "C" /* BWE factors to apply after packet loss */ #define BWE_AFTER_LOSS_Q16 63570 -/*************************/ -/* Perceptual parameters */ -/*************************/ -/* Amount of warping to apply */ -#define WARPING_MULTIPLIER_Q16 SKP_FIX_CONST( 0.02, 16 ) - /* Defines for CN generation */ #define CNG_BUF_MASK_MAX 255 /* 2^floor(log2(MAX_FRAME_LENGTH))-1 */ #define CNG_GAIN_SMTH_Q16 4634 /* 0.25^(1/4) */ diff --git a/src_common/SKP_Silk_enc_API.c b/src_common/SKP_Silk_enc_API.c index fa740591bab5ad60077214c404eaf592aa1424f8..6f5a66d6ddbde705b42480060e7a9c4267c62609 100644 --- a/src_common/SKP_Silk_enc_API.c +++ b/src_common/SKP_Silk_enc_API.c @@ -44,7 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define SKP_Silk_control_encoder_Fxx SKP_Silk_control_encoder_FLP #define SKP_Silk_encode_frame_Fxx SKP_Silk_encode_frame_FLP #endif -#define SKP_Silk_EncodeControlStruct SKP_SILK_SDK_EncControlStruct +#define SKP_Silk_EncodeControlStruct SKP_SILK_SDK_EncControlStruct /****************************************/ @@ -70,18 +70,21 @@ SKP_int SKP_Silk_SDK_QueryEncoder( ) { SKP_Silk_encoder_state_Fxx *psEnc; - SKP_int ret = SKP_SILK_NO_ERROR; + SKP_int ret = SKP_SILK_NO_ERROR; psEnc = ( SKP_Silk_encoder_state_Fxx* )encState; encStatus->API_sampleRate = psEnc->sCmn.API_fs_Hz; encStatus->maxInternalSampleRate = SKP_SMULBB( psEnc->sCmn.maxInternal_fs_kHz, 1000 ); - encStatus->packetSize = ( SKP_int )SKP_DIV32_16( psEnc->sCmn.API_fs_Hz * psEnc->sCmn.PacketSize_ms, 1000 ); /* convert samples -> ms */ + encStatus->minInternalSampleRate = SKP_SMULBB( psEnc->sCmn.minInternal_fs_kHz, 1000 ); + encStatus->payloadSize_ms = psEnc->sCmn.PacketSize_ms; encStatus->bitRate = psEnc->sCmn.TargetRate_bps; encStatus->packetLossPercentage = psEnc->sCmn.PacketLoss_perc; encStatus->complexity = psEnc->sCmn.Complexity; encStatus->useInBandFEC = psEnc->sCmn.useInBandFEC; encStatus->useDTX = psEnc->sCmn.useDTX; + encStatus->useCBR = psEnc->sCmn.useCBR; + encStatus->internalSampleRate = SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ); return ret; } @@ -118,17 +121,16 @@ SKP_int SKP_Silk_SDK_InitEncoder( /**************************/ SKP_int SKP_Silk_SDK_Encode( void *encState, /* I/O: State */ - const SKP_Silk_EncodeControlStruct *encControl, /* I: Control structure */ + SKP_Silk_EncodeControlStruct *encControl, /* I: Control structure */ const SKP_int16 *samplesIn, /* I: Speech sample input vector */ SKP_int nSamplesIn, /* I: Number of samples in input vector */ ec_enc *psRangeEnc, /* I/O Compressor data structure */ - SKP_int16 *nBytesOut /* I/O: Number of bytes in payload (input: Max bytes) */ + SKP_int32 *nBytesOut /* I/O: Number of bytes in payload (input: Max bytes) */ ) { - SKP_int max_internal_fs_kHz, PacketSize_ms, PacketLoss_perc, UseInBandFEC, UseDTX, ret = SKP_SILK_NO_ERROR; - SKP_int nSamplesToBuffer, Complexity, input_ms, nSamplesFromInput = 0; - SKP_int32 TargetRate_bps, API_fs_Hz; - SKP_int16 MaxBytesOut; + SKP_int max_internal_fs_kHz, min_internal_fs_kHz, PacketSize_ms, PacketLoss_perc, UseInBandFEC, ret = SKP_SILK_NO_ERROR; + SKP_int nSamplesToBuffer, Complexity, input_10ms, nSamplesFromInput = 0; + SKP_int32 TargetRate_bps, API_fs_Hz, MaxBytesOut; SKP_Silk_encoder_state_Fxx *psEnc = ( SKP_Silk_encoder_state_Fxx* )encState; SKP_assert( encControl != NULL ); @@ -144,50 +146,74 @@ SKP_int SKP_Silk_SDK_Encode( ( ( encControl->maxInternalSampleRate != 8000 ) && ( encControl->maxInternalSampleRate != 12000 ) && ( encControl->maxInternalSampleRate != 16000 ) && - ( encControl->maxInternalSampleRate != 24000 ) ) ) { + ( encControl->maxInternalSampleRate != 24000 ) ) || + ( ( encControl->minInternalSampleRate != 8000 ) && + ( encControl->minInternalSampleRate != 12000 ) && + ( encControl->minInternalSampleRate != 16000 ) && + ( encControl->minInternalSampleRate != 24000 ) ) || + ( encControl->minInternalSampleRate > encControl->maxInternalSampleRate ) ) { ret = SKP_SILK_ENC_FS_NOT_SUPPORTED; SKP_assert( 0 ); return( ret ); } + if( encControl->useDTX < 0 || encControl->useDTX > 1 ) { + ret = SKP_SILK_ENC_INVALID_DTX_SETTING; + } + if( encControl->useCBR < 0 || encControl->useCBR > 1 ) { + ret = SKP_SILK_ENC_INVALID_DTX_SETTING; + } + /* Set encoder parameters from control structure */ - API_fs_Hz = encControl->API_sampleRate; - max_internal_fs_kHz = SKP_DIV32_16( ( SKP_int )encControl->maxInternalSampleRate, 1000 ); /* convert Hz -> kHz */ - PacketSize_ms = SKP_DIV32( 1000 * ( SKP_int )encControl->packetSize, API_fs_Hz ); - TargetRate_bps = ( SKP_int32 )encControl->bitRate; - PacketLoss_perc = ( SKP_int )encControl->packetLossPercentage; - UseInBandFEC = ( SKP_int )encControl->useInBandFEC; - Complexity = ( SKP_int )encControl->complexity; - UseDTX = ( SKP_int )encControl->useDTX; + API_fs_Hz = encControl->API_sampleRate; + max_internal_fs_kHz = (SKP_int)( encControl->maxInternalSampleRate >> 10 ) + 1; /* convert Hz -> kHz */ + min_internal_fs_kHz = (SKP_int)( encControl->minInternalSampleRate >> 10 ) + 1; /* convert Hz -> kHz */ + PacketSize_ms = encControl->payloadSize_ms; + TargetRate_bps = encControl->bitRate; + PacketLoss_perc = encControl->packetLossPercentage; + UseInBandFEC = encControl->useInBandFEC; + Complexity = encControl->complexity; + psEnc->sCmn.useDTX = encControl->useDTX; + psEnc->sCmn.useCBR = encControl->useCBR; + /* Save values in state */ psEnc->sCmn.API_fs_Hz = API_fs_Hz; psEnc->sCmn.maxInternal_fs_kHz = max_internal_fs_kHz; + psEnc->sCmn.minInternal_fs_kHz = min_internal_fs_kHz; psEnc->sCmn.useInBandFEC = UseInBandFEC; - /* Only accept input lengths that are a multiplum of 10 ms */ - input_ms = SKP_DIV32( 1000 * nSamplesIn, API_fs_Hz ); - if( ( input_ms % 10) != 0 || nSamplesIn < 0 ) { + /* Only accept input lengths that are a multiple of 10 ms */ + input_10ms = SKP_DIV32( 100 * nSamplesIn, API_fs_Hz ); + if( input_10ms * API_fs_Hz != 100 * nSamplesIn || nSamplesIn < 0 ) { ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES; SKP_assert( 0 ); return( ret ); } - /* Make sure no more than one packet can be produced */ - if( nSamplesIn > SKP_DIV32_16( psEnc->sCmn.PacketSize_ms * API_fs_Hz, 1000 ) ) { - ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES; + TargetRate_bps = SKP_LIMIT( TargetRate_bps, MIN_TARGET_RATE_BPS, MAX_TARGET_RATE_BPS ); + if( ( ret = SKP_Silk_control_encoder_Fxx( psEnc, PacketSize_ms, TargetRate_bps, + PacketLoss_perc, Complexity) ) != 0 ) { SKP_assert( 0 ); return( ret ); } - if( ( ret = SKP_Silk_control_encoder_Fxx( psEnc, API_fs_Hz, max_internal_fs_kHz, PacketSize_ms, TargetRate_bps, - PacketLoss_perc, UseInBandFEC, UseDTX, input_ms, Complexity) ) != 0 ) { + + encControl->internalSampleRate = SKP_SMULBB( psEnc->sCmn.fs_kHz, 1000 ); + + /* Make sure no more than one packet can be produced */ + if( 1000 * (SKP_int32)nSamplesIn > psEnc->sCmn.PacketSize_ms * API_fs_Hz ) { + ret = SKP_SILK_ENC_INPUT_INVALID_NO_OF_SAMPLES; SKP_assert( 0 ); return( ret ); } +#if MAX_FS_KHZ > 16 /* Detect energy above 8 kHz */ - if( SKP_min( API_fs_Hz, 1000 * max_internal_fs_kHz ) == 24000 && psEnc->sCmn.sSWBdetect.SWB_detected == 0 && psEnc->sCmn.sSWBdetect.WB_detected == 0 ) { + if( SKP_min( API_fs_Hz, 1000 * max_internal_fs_kHz ) == 24000 && + psEnc->sCmn.sSWBdetect.SWB_detected == 0 && + psEnc->sCmn.sSWBdetect.WB_detected == 0 ) { SKP_Silk_detect_SWB_input( &psEnc->sCmn.sSWBdetect, samplesIn, ( SKP_int )nSamplesIn ); } +#endif /* Input buffering/resampling and encoding */ MaxBytesOut = 0; /* return 0 output bytes if no encoder called */ @@ -199,7 +225,7 @@ SKP_int SKP_Silk_SDK_Encode( /* Copy to buffer */ SKP_memcpy( &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], samplesIn, nSamplesFromInput * sizeof( SKP_int16 ) ); } else { - nSamplesToBuffer = SKP_min( nSamplesToBuffer, SKP_DIV32( ( SKP_int32 )nSamplesIn * psEnc->sCmn.fs_kHz * 1000, API_fs_Hz ) ); + nSamplesToBuffer = SKP_min( nSamplesToBuffer, 10 * input_10ms * psEnc->sCmn.fs_kHz ); nSamplesFromInput = SKP_DIV32_16( nSamplesToBuffer * API_fs_Hz, psEnc->sCmn.fs_kHz * 1000 ); /* Resample and write to buffer */ ret += SKP_Silk_resampler( &psEnc->sCmn.resampler_state, &psEnc->sCmn.inputBuf[ psEnc->sCmn.inputBufIx ], samplesIn, nSamplesFromInput ); @@ -210,6 +236,8 @@ SKP_int SKP_Silk_SDK_Encode( /* Silk encoder */ if( psEnc->sCmn.inputBufIx >= psEnc->sCmn.frame_length ) { + SKP_assert( psEnc->sCmn.inputBufIx == psEnc->sCmn.frame_length ); + /* Enough data in input buffer, so encode */ if( MaxBytesOut == 0 ) { /* No payload obtained so far */ @@ -218,7 +246,7 @@ SKP_int SKP_Silk_SDK_Encode( SKP_assert( 0 ); } } else { - /* Already contains a payload */ + /* outData already contains a payload */ if( ( ret = SKP_Silk_encode_frame_Fxx( psEnc, nBytesOut, psRangeEnc, psEnc->sCmn.inputBuf ) ) != 0 ) { SKP_assert( 0 ); } @@ -226,6 +254,11 @@ SKP_int SKP_Silk_SDK_Encode( SKP_assert( *nBytesOut == 0 ); } psEnc->sCmn.inputBufIx = 0; + psEnc->sCmn.controlled_since_last_payload = 0; + + if( nSamplesIn == 0 ) { + break; + } } else { break; } diff --git a/src_common/SKP_Silk_encode_parameters.c b/src_common/SKP_Silk_encode_parameters.c index dd66154c3f01f95cd322f7bd86a9bc9217bb8844..cb876a345903a258a73c404122e92eb377a3a3ff 100644 --- a/src_common/SKP_Silk_encode_parameters.c +++ b/src_common/SKP_Silk_encode_parameters.c @@ -45,26 +45,6 @@ void SKP_Silk_encode_parameters( SKP_int nBytes_after, nBytes_before; #endif - /*************************************/ - /* Encode sampling rate and */ - /* number of subframes in each frame */ - /*************************************/ - /* only done for first frame in packet */ - if( psEncC->nFramesInPayloadBuf == 0 ) { - /* get sampling rate index */ - for( i = 0; i < 3; i++ ) { - if( SKP_Silk_SamplingRates_table[ i ] == psEncC->fs_kHz ) { - break; - } - } - ec_encode_bin( psRangeEnc, SKP_Silk_SamplingRates_CDF[ i ], SKP_Silk_SamplingRates_CDF[ i + 1 ], 16 ); - - /* Convert number of subframes to index */ - SKP_assert( psEncC->nb_subfr == MAX_NB_SUBFR >> 1 || psEncC->nb_subfr == MAX_NB_SUBFR ); - i = (psEncC->nb_subfr >> 1) - 1; - ec_enc_bit_prob( psRangeEnc, i, 65536 - SKP_Silk_NbSubframes_CDF[ 1 ] ); - } - /*********************************************/ /* Encode VAD flag */ /*********************************************/ @@ -208,6 +188,7 @@ void SKP_Silk_encode_parameters( #ifdef SAVE_ALL_INTERNAL_DATA nBytes_before = SKP_RSHIFT( ec_enc_tell( psRangeEnc, 0 ) + 7, 3 ); #endif + /* PERIndex value */ ec_encode_bin( psRangeEnc, SKP_Silk_LTP_per_index_CDF[ psEncCtrlC->PERIndex ], SKP_Silk_LTP_per_index_CDF[ psEncCtrlC->PERIndex + 1 ], 16 ); diff --git a/src_common/SKP_Silk_encode_pulses.c b/src_common/SKP_Silk_encode_pulses.c index a458ff42cec93e1011784bbbac2124494071b3f6..c04919eea2f46c7a21fc9aa553b5524a417d8436 100644 --- a/src_common/SKP_Silk_encode_pulses.c +++ b/src_common/SKP_Silk_encode_pulses.c @@ -88,7 +88,6 @@ void SKP_Silk_encode_pulses( const SKP_int8 *pulses_ptr; const SKP_uint16 *cdf_ptr; const SKP_int16 *nBits_ptr; - //extern SKP_int nbits_extra; SKP_memset( pulses_comb, 0, 8 * sizeof( SKP_int ) ); // Fixing Valgrind reported problem diff --git a/src_common/SKP_Silk_main.h b/src_common/SKP_Silk_main.h index f9610cfe12920147ec5b54002ad880a33391b67a..3f277bbb83ff18a65eeb2da1d0dc71db3a08cbd5 100644 --- a/src_common/SKP_Silk_main.h +++ b/src_common/SKP_Silk_main.h @@ -28,6 +28,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef SKP_SILK_MAIN_H #define SKP_SILK_MAIN_H +#ifdef __cplusplus +extern "C" +{ +#endif + #include "SKP_Silk_SigProc_FIX.h" #include "SKP_Silk_define.h" #include "SKP_Silk_structs.h" @@ -37,10 +42,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "entenc.h" #include "entdec.h" -#ifdef __cplusplus -extern "C" -{ -#endif /* Encodes signs of excitation */ void SKP_Silk_encode_signs( @@ -62,6 +63,12 @@ void SKP_Silk_decode_signs( const SKP_int RateLevelIndex /* I Rate Level Index */ ); +/* Control internal sampling rate */ +SKP_int SKP_Silk_control_audio_bandwidth( + SKP_Silk_encoder_state *psEncC, /* I/O Pointer to Silk encoder state */ + const SKP_int32 TargetRate_bps /* I Target max bitrate (bps) */ +); + /***************/ /* Shell coder */ /***************/ @@ -191,6 +198,7 @@ void SKP_Silk_VAD_GetNoiseLevels( SKP_int SKP_Silk_VAD_GetSA_Q8( /* O Return value, 0 if success */ SKP_Silk_VAD_state *psSilk_VAD, /* I/O Silk VAD state */ SKP_int *pSA_Q8, /* O Speech activity level in Q8 */ + SKP_int *pSNR_dB_Q7, /* O SNR for current frame in Q7 */ SKP_int pQuality_Q15[ VAD_N_BANDS ], /* O Smoothed SNR for each band */ SKP_int *pTilt_Q15, /* O current frame's frequency tilt */ const SKP_int16 pIn[], /* I PCM input [framelength] */ @@ -235,8 +243,7 @@ SKP_int SKP_Silk_init_decoder( /* Set decoder sampling rate */ void SKP_Silk_decoder_set_fs( SKP_Silk_decoder_state *psDec, /* I/O Decoder state pointer */ - SKP_int fs_kHz, /* I Sampling frequency (kHz) */ - SKP_int nb_subfr /* I Number of subframes */ + SKP_int fs_kHz /* I Sampling frequency (kHz) */ ); /****************/ @@ -246,7 +253,7 @@ SKP_int SKP_Silk_decode_frame( SKP_Silk_decoder_state *psDec, /* I/O Pointer to Silk decoder state */ ec_dec *psRangeDec, /* I/O Compressor data structure */ SKP_int16 pOut[], /* O Pointer to output speech frame */ - SKP_int16 *pN, /* O Pointer to size of output frame */ + SKP_int32 *pN, /* O Pointer to size of output frame */ const SKP_int nBytes, /* I Payload length */ SKP_int action, /* I Action from Jitter Buffer */ SKP_int *decBytes /* O Used bytes to decode this frame */ @@ -324,7 +331,7 @@ void SKP_Silk_get_low_layer_internal( const SKP_uint8 *indata, /* I: Encoded input vector */ const SKP_int16 nBytesIn, /* I: Number of input Bytes */ SKP_uint8 *Layer0data, /* O: Layer0 payload */ - SKP_int16 *nLayer0Bytes /* O: Number of FEC Bytes */ + SKP_int32 *nLayer0Bytes /* O: Number of FEC Bytes */ ); /* Resets LBRR buffer, used if packet size changes */ diff --git a/src_common/SKP_Silk_setup_complexity.h b/src_common/SKP_Silk_setup_complexity.h new file mode 100644 index 0000000000000000000000000000000000000000..63df4be8b17a72db3ef47d10744267985b43b6f8 --- /dev/null +++ b/src_common/SKP_Silk_setup_complexity.h @@ -0,0 +1,99 @@ +/*********************************************************************** +Copyright (c) 2006-2010, Skype Limited. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, (subject to the limitations in the disclaimer below) +are permitted provided that the following conditions are met: +- Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +- Neither the name of Skype Limited, nor the names of specific +contributors, may be used to endorse or promote products derived from +this software without specific prior written permission. +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED +BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +***********************************************************************/ + +#include "SKP_Silk_main.h" +#include "SKP_Silk_tuning_parameters.h" + +SKP_INLINE SKP_int SKP_Silk_setup_complexity( + SKP_Silk_encoder_state *psEncC, /* I/O */ + SKP_int Complexity /* I */ +) +{ + SKP_int ret = 0; + + /* Check that settings are valid */ + if( LOW_COMPLEXITY_ONLY && Complexity != 0 ) { + ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING; + } + + /* Set encoding complexity */ + if( Complexity == 0 || LOW_COMPLEXITY_ONLY ) { + /* Low complexity */ + psEncC->Complexity = 0; + psEncC->pitchEstimationComplexity = PITCH_EST_COMPLEXITY_LC_MODE; + psEncC->pitchEstimationThreshold_Q16 = SKP_FIX_CONST( FIND_PITCH_CORRELATION_THRESHOLD_LC_MODE, 16 ); + psEncC->pitchEstimationLPCOrder = 6; + psEncC->shapingLPCOrder = 8; + psEncC->la_shape = 3 * psEncC->fs_kHz; + psEncC->nStatesDelayedDecision = 1; + psEncC->useInterpolatedNLSFs = 0; + psEncC->LTPQuantLowComplexity = 1; + psEncC->NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS_LC_MODE; + psEncC->warping_Q16 = 0; + } else if( Complexity == 1 ) { + /* Medium complexity */ + psEncC->Complexity = 1; + psEncC->pitchEstimationComplexity = PITCH_EST_COMPLEXITY_MC_MODE; + psEncC->pitchEstimationThreshold_Q16 = SKP_FIX_CONST( FIND_PITCH_CORRELATION_THRESHOLD_MC_MODE, 16 ); + psEncC->pitchEstimationLPCOrder = 12; + psEncC->shapingLPCOrder = 12; + psEncC->la_shape = 5 * psEncC->fs_kHz; + psEncC->nStatesDelayedDecision = 2; + psEncC->useInterpolatedNLSFs = 0; + psEncC->LTPQuantLowComplexity = 0; + psEncC->NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS_MC_MODE; + psEncC->warping_Q16 = psEncC->fs_kHz * SKP_FIX_CONST( WARPING_MULTIPLIER, 16 ); + } else if( Complexity == 2 ) { + /* High complexity */ + psEncC->Complexity = 2; + psEncC->pitchEstimationComplexity = PITCH_EST_COMPLEXITY_HC_MODE; + psEncC->pitchEstimationThreshold_Q16 = SKP_FIX_CONST( FIND_PITCH_CORRELATION_THRESHOLD_HC_MODE, 16 ); + psEncC->pitchEstimationLPCOrder = 16; + psEncC->shapingLPCOrder = 16; + psEncC->la_shape = 5 * psEncC->fs_kHz; + psEncC->nStatesDelayedDecision = MAX_DEL_DEC_STATES; + psEncC->useInterpolatedNLSFs = 1; + psEncC->LTPQuantLowComplexity = 0; + psEncC->NLSF_MSVQ_Survivors = MAX_NLSF_MSVQ_SURVIVORS; + psEncC->warping_Q16 = psEncC->fs_kHz * SKP_FIX_CONST( WARPING_MULTIPLIER, 16 ); + } else { + ret = SKP_SILK_ENC_INVALID_COMPLEXITY_SETTING; + } + + /* Do not allow higher pitch estimation LPC order than predict LPC order */ + psEncC->pitchEstimationLPCOrder = SKP_min_int( psEncC->pitchEstimationLPCOrder, psEncC->predictLPCOrder ); + psEncC->shapeWinLength = SUB_FRAME_LENGTH_MS * psEncC->fs_kHz + 2 * psEncC->la_shape; + + SKP_assert( psEncC->pitchEstimationLPCOrder <= MAX_FIND_PITCH_LPC_ORDER ); + SKP_assert( psEncC->shapingLPCOrder <= MAX_SHAPE_LPC_ORDER ); + SKP_assert( psEncC->nStatesDelayedDecision <= MAX_DEL_DEC_STATES ); + SKP_assert( psEncC->warping_Q16 <= 32767 ); + SKP_assert( psEncC->la_shape <= LA_SHAPE_MAX ); + SKP_assert( psEncC->shapeWinLength <= SHAPE_LPC_WIN_MAX ); + + return( ret ); +} diff --git a/src_common/SKP_Silk_structs.h b/src_common/SKP_Silk_structs.h index 13e2ae60e9a04be9b398232a967f448b1826d01a..8ddac869b4ca826d7535f16ba39945147418ba3a 100644 --- a/src_common/SKP_Silk_structs.h +++ b/src_common/SKP_Silk_structs.h @@ -46,7 +46,7 @@ extern "C" typedef struct { SKP_int16 xq[ 2 * MAX_FRAME_LENGTH ]; /* Buffer for quantized output signal */ SKP_int32 sLTP_shp_Q10[ 2 * MAX_FRAME_LENGTH ]; - SKP_int32 sLPC_Q14[ MAX_FRAME_LENGTH / MAX_NB_SUBFR + MAX_LPC_ORDER ]; + SKP_int32 sLPC_Q14[ MAX_FRAME_LENGTH / MAX_NB_SUBFR + NSQ_LPC_BUF_LENGTH ]; SKP_int32 sAR2_Q14[ MAX_SHAPE_LPC_ORDER ]; SKP_int32 sLF_AR_shp_Q12; SKP_int lagPrev; @@ -117,8 +117,8 @@ typedef struct { /* Structure for one stage of MSVQ */ typedef struct { const SKP_int32 nVectors; - const SKP_int16 *CB_NLSF_Q15; - const SKP_int16 *Rates_Q5; + const SKP_int8 *CB_NLSF_Q8; + const SKP_uint8 *Rates_Q4; } SKP_Silk_NLSF_CBS; /* Structure containing NLSF MSVQ codebook */ @@ -157,6 +157,7 @@ typedef struct { SKP_int32 API_fs_Hz; /* API sampling frequency (Hz) */ SKP_int32 prev_API_fs_Hz; /* Previous API sampling frequency (Hz) */ SKP_int maxInternal_fs_kHz; /* Maximum internal sampling frequency (kHz) */ + SKP_int minInternal_fs_kHz; /* Minimum internal sampling frequency (kHz) */ SKP_int fs_kHz; /* Internal sampling frequency (kHz) */ SKP_int fs_kHz_changed; /* Did we switch yet? */ SKP_int nb_subfr; /* Number of 5 ms subframes in a frame */ @@ -165,6 +166,7 @@ typedef struct { SKP_int ltp_mem_length; /* Length of LTP memory */ SKP_int la_pitch; /* Look-ahead for pitch analysis (samples) */ SKP_int la_shape; /* Look-ahead for noise shape analysis (samples) */ + SKP_int shapeWinLength; /* Window length for noise shape analysis (samples) */ SKP_int32 TargetRate_bps; /* Target bitrate (bps) */ SKP_int PacketSize_ms; /* Number of milliseconds to put in each packet */ SKP_int PacketLoss_perc; /* Packet loss rate measured by farend */ @@ -176,9 +178,13 @@ typedef struct { SKP_int predictLPCOrder; /* Filter order for prediction filters */ SKP_int pitchEstimationComplexity; /* Complexity level for pitch estimator */ SKP_int pitchEstimationLPCOrder; /* Whitening filter order for pitch estimator */ + SKP_int32 pitchEstimationThreshold_Q16; /* Threshold for pitch estimator */ SKP_int LTPQuantLowComplexity; /* Flag for low complexity LTP quantization */ SKP_int NLSF_MSVQ_Survivors; /* Number of survivors in NLSF MSVQ */ SKP_int first_frame_after_reset; /* Flag for deactivating NLSF interp. and fluc. reduction after resets */ + SKP_int controlled_since_last_payload; /* Flag for ensuring codec_control only runs once per packet */ + SKP_int warping_Q16; /* Warping parameter for warped noise shaping */ + SKP_int useCBR; /* Flag to enable constant bitrate */ /* Input/output buffering */ SKP_int16 inputBuf[ MAX_FRAME_LENGTH ]; /* buffer containin input signal */ @@ -235,7 +241,6 @@ typedef struct { SKP_int NLSFIndices[ NLSF_MSVQ_MAX_CB_STAGES ]; /* NLSF path of quantized LSF vector */ SKP_int NLSFInterpCoef_Q2; SKP_int GainsIndices[ MAX_NB_SUBFR ]; - SKP_int warping_Q16; SKP_int32 Seed; SKP_int LTP_scaleIndex; SKP_int RateLevelIndex; @@ -250,7 +255,6 @@ typedef struct { /* Struct for Packet Loss Concealment */ typedef struct { - SKP_int pitchL[ MAX_NB_SUBFR ]; /* Pitch lag per 5 ms for last 20 ms */ SKP_int32 pitchL_Q8; /* Pitch lag to use for voiced concealment */ SKP_int16 LTPCoef_Q14[ LTP_ORDER ]; /* LTP coeficients to use for voiced concealment */ SKP_int16 prevLPC_Q12[ MAX_LPC_ORDER ]; @@ -285,7 +289,6 @@ typedef struct { SKP_int32 exc_Q10[ MAX_FRAME_LENGTH ]; SKP_int32 res_Q10[ MAX_FRAME_LENGTH ]; SKP_int16 outBuf[ 2 * MAX_FRAME_LENGTH ]; /* Buffer for output signal */ - SKP_int sLTP_buf_idx; /* LTP_buf_index */ SKP_int lagPrev; /* Previous Lag */ SKP_int LastGainIndex; /* Previous gain index */ SKP_int LastGainIndex_EnhLayer; /* Previous gain index */ @@ -353,7 +356,7 @@ typedef struct { SKP_int32 Gains_Q16[ MAX_NB_SUBFR ]; SKP_int32 Seed; /* holds interpolated and final coefficients, 4-byte aligned */ - SKP_array_of_int16_4_byte_aligned( PredCoef_Q12[ 2 ], MAX_LPC_ORDER ); + SKP_DWORD_ALIGN SKP_int16 PredCoef_Q12[ 2 ][ MAX_LPC_ORDER ]; SKP_int16 LTPCoef_Q14[ LTP_ORDER * MAX_NB_SUBFR ]; SKP_int LTP_scale_Q14; diff --git a/src_common/SKP_Silk_tables.h b/src_common/SKP_Silk_tables.h index 126c7db9ca7e230ec3aebfa396118aebedee988c..0a2b70a1be728da2e13aba24837aae5403b63e12 100644 --- a/src_common/SKP_Silk_tables.h +++ b/src_common/SKP_Silk_tables.h @@ -100,13 +100,6 @@ extern const SKP_int16 SKP_Silk_LTPScales_table_Q14[ 3 ]; extern const SKP_uint16 SKP_Silk_vadflag_CDF[ 3 ]; /* 3 */ extern const SKP_int SKP_Silk_vadflag_offset; -extern const SKP_int SKP_Silk_SamplingRates_table[ 4 ]; /* 4 */ -extern const SKP_uint16 SKP_Silk_SamplingRates_CDF[ 5 ]; /* 5 */ -extern const SKP_int SKP_Silk_SamplingRates_offset; - -extern const SKP_uint16 SKP_Silk_NbSubframes_CDF[ 3 ]; /* 3 */ -extern const SKP_int SKP_Silk_NbSubframes_offset; - extern const SKP_uint16 SKP_Silk_NLSF_interpolation_factor_CDF[ 6 ]; extern const SKP_int SKP_Silk_NLSF_interpolation_factor_offset; @@ -148,7 +141,7 @@ extern const SKP_int16 SKP_Silk_Dec_A_HP_8[ DEC_HP_ORDER ]; extern const SKP_int16 SKP_Silk_Dec_B_HP_8[ DEC_HP_ORDER + 1 ]; /* 3 */ /* Table for frame termination indication */ -extern const SKP_uint16 SKP_Silk_FrameTermination_CDF[ 6 ]; +extern const SKP_uint16 SKP_Silk_FrameTermination_CDF[ 3 ]; extern const SKP_int SKP_Silk_FrameTermination_offset; /* Table for random seed */ diff --git a/src_common/SKP_Silk_tables_NLSF_CB0_10.c b/src_common/SKP_Silk_tables_NLSF_CB0_10.c index 3404a5a9eaa76522dc28099fd7a730bb867d6157..05a5212a84bada21de9cf0482078ef8a67837121 100644 --- a/src_common/SKP_Silk_tables_NLSF_CB0_10.c +++ b/src_common/SKP_Silk_tables_NLSF_CB0_10.c @@ -28,139 +28,149 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /**********************************************/ /* This file has been automatically generated */ /* */ -/* ROM usage: 0.29 + 2.66 kB */ +/* ROM usage: 0.31 + 1.43 kB */ /**********************************************/ #include "SKP_Silk_structs.h" +#include "SKP_Silk_tables.h" #include "SKP_Silk_tables_NLSF_CB0_10.h" const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ NLSF_MSVQ_CB0_10_VECTORS + NLSF_MSVQ_CB0_10_STAGES ] = { 0, - 2658, - 4420, - 6107, - 7757, - 9408, - 10955, - 12502, - 13983, - 15432, - 16882, - 18331, - 19750, - 21108, - 22409, - 23709, - 25010, - 26256, - 27501, - 28747, - 29965, - 31158, - 32351, - 33544, - 34736, - 35904, - 36997, - 38091, - 39185, - 40232, - 41280, - 42327, - 43308, - 44290, - 45271, - 46232, - 47192, - 48132, - 49032, - 49913, - 50775, - 51618, - 52462, - 53287, - 54095, - 54885, - 55675, - 56449, - 57222, - 57979, - 58688, - 59382, - 60076, - 60726, - 61363, - 61946, - 62505, - 63052, - 63543, - 63983, - 64396, - 64766, - 65023, + 2433, + 4865, + 7096, + 8971, + 10549, + 12126, + 13636, + 15147, + 16657, + 18104, + 19550, + 20996, + 22381, + 23766, + 25093, + 26419, + 27745, + 29016, + 30232, + 31448, + 32664, + 33780, + 34895, + 36010, + 37078, + 38146, + 39169, + 40192, + 41215, + 42194, + 43173, + 44153, + 45091, + 46028, + 46966, + 47904, + 48842, + 49740, + 50638, + 51498, + 52358, + 53218, + 54042, + 54865, + 55689, + 56478, + 57266, + 58055, + 58810, + 59565, + 60321, + 61044, + 61652, + 62260, + 62868, + 63337, + 63683, + 64001, + 64257, + 64512, + 64768, + 65024, 65279, 65535, 0, - 4977, - 9542, - 14106, - 18671, - 23041, - 27319, - 31596, - 35873, - 39969, - 43891, - 47813, - 51652, - 55490, - 59009, - 62307, + 5110, + 10220, + 15114, + 19800, + 24097, + 28394, + 32691, + 36988, + 41285, + 45225, + 48999, + 52612, + 56226, + 59839, + 62749, 65535, 0, - 8571, - 17142, - 25529, - 33917, - 42124, - 49984, - 57844, + 8964, + 17928, + 26148, + 34368, + 42588, + 50459, + 57997, 65535, 0, - 8732, - 17463, - 25825, - 34007, - 42189, - 50196, - 58032, + 10142, + 19048, + 27576, + 36104, + 44271, + 52091, + 58959, 65535, 0, - 8948, - 17704, - 25733, - 33762, - 41791, - 49821, - 57678, + 8874, + 17371, + 25869, + 34366, + 42158, + 49951, + 57743, 65535, 0, - 4374, - 8655, - 12936, - 17125, - 21313, - 25413, - 29512, - 33611, - 37710, - 41809, - 45820, - 49832, - 53843, - 57768, - 61694, + 8970, + 17560, + 25786, + 34012, + 42238, + 50115, + 57992, + 65535, + 0, + 4875, + 9750, + 14418, + 19086, + 23754, + 28422, + 32892, + 37173, + 41272, + 45371, + 49297, + 52896, + 56496, + 59797, + 63098, 65535 }; @@ -171,710 +181,757 @@ const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_10_CDF_start_ptr[ NLSF_MSVQ_CB0_ &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 82 ], &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 91 ], &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 100 ], - &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 109 ] + &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 109 ], + &SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ 118 ] }; const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_CDF_middle_idx[ NLSF_MSVQ_CB0_10_STAGES ] = { - 23, + 22, 8, 5, 5, 5, - 9 + 5, + 8 }; -const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ NLSF_MSVQ_CB0_10_VECTORS ] = +const SKP_uint8 SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q4[ NLSF_MSVQ_CB0_10_VECTORS ] = { - 148, 167, - 169, 170, - 170, 173, - 173, 175, - 176, 176, - 176, 177, - 179, 181, - 181, 181, - 183, 183, - 183, 184, - 185, 185, - 185, 185, - 186, 189, - 189, 189, - 191, 191, - 191, 194, - 194, 194, - 195, 195, - 196, 198, - 199, 200, - 201, 201, - 202, 203, - 204, 204, - 205, 205, - 206, 209, - 210, 210, - 213, 214, - 218, 220, - 221, 226, - 231, 234, - 239, 256, - 256, 256, - 119, 123, - 123, 123, - 125, 126, - 126, 126, - 128, 130, - 130, 131, - 131, 135, - 138, 139, + 76, 76, + 78, 82, + 86, 86, + 87, 87, + 87, 88, + 88, 88, + 89, 89, + 90, 90, + 90, 91, + 92, 92, + 92, 94, 94, 94, 95, 95, - 96, 98, - 98, 99, - 93, 93, - 95, 96, + 96, 96, 96, 97, - 98, 100, - 92, 93, - 97, 97, 97, 97, 98, 98, - 125, 126, - 126, 127, - 127, 128, + 98, 98, + 98, 99, + 99, 100, + 100, 100, + 101, 101, + 101, 102, + 102, 102, + 103, 103, + 103, 104, + 108, 108, + 108, 114, + 121, 123, 128, 128, 128, 128, - 129, 129, - 129, 130, - 130, 131 + 128, 128, + 59, 59, + 60, 61, + 63, 63, + 63, 63, + 63, 65, + 66, 67, + 67, 67, + 72, 73, + 46, 46, + 48, 48, + 48, 49, + 50, 50, + 43, 46, + 47, 47, + 48, 49, + 52, 53, + 46, 47, + 47, 47, + 49, 49, + 49, 49, + 46, 47, + 48, 48, + 48, 49, + 49, 50, + 60, 60, + 61, 61, + 61, 61, + 62, 63, + 64, 64, + 65, 67, + 67, 69, + 69, 76 }; const SKP_int SKP_Silk_NLSF_MSVQ_CB0_10_ndelta_min_Q15[ 10 + 1 ] = { - 563, - 3, + 553, + 5, 22, - 20, + 19, 3, 3, - 132, - 119, - 358, - 86, - 964 + 180, + 162, + 306, + 171, + 991 }; -const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * NLSF_MSVQ_CB0_10_VECTORS ] = +const SKP_int8 SKP_Silk_NLSF_MSVQ_CB0_10_Q8[ 10 * NLSF_MSVQ_CB0_10_VECTORS ] = { - 2210, 4023, - 6981, 9260, - 12573, 15687, - 19207, 22383, - 25981, 29142, - 3285, 4172, - 6116, 10856, - 15289, 16826, - 19701, 22010, - 24721, 29313, - 1554, 2511, - 6577, 10337, - 13837, 16511, - 20086, 23214, - 26480, 29464, - 3062, 4017, - 5771, 10037, - 13365, 14952, - 20140, 22891, - 25229, 29603, - 2085, 3457, - 5934, 8718, - 11501, 13670, - 17997, 21817, - 24935, 28745, - 2776, 4093, - 6421, 10413, - 15111, 16806, - 20825, 23826, - 26308, 29411, - 2717, 4034, - 5697, 8463, - 14301, 16354, - 19007, 23413, - 25812, 28506, - 2872, 3702, - 5881, 11034, - 17141, 18879, - 21146, 23451, - 25817, 29600, - 2999, 4015, - 7357, 11219, - 12866, 17307, - 20081, 22644, - 26774, 29107, - 2942, 3866, - 5918, 11915, - 13909, 16072, - 20453, 22279, - 27310, 29826, - 2271, 3527, - 6606, 9729, - 12943, 17382, - 20224, 22345, - 24602, 28290, - 2207, 3310, - 5844, 9339, - 11141, 15651, - 18576, 21177, - 25551, 28228, - 3963, 4975, - 6901, 11588, - 13466, 15577, - 19231, 21368, - 25510, 27759, - 2749, 3549, - 6966, 13808, - 15653, 17645, - 20090, 22599, - 26467, 28537, - 2126, 3504, - 5109, 9954, - 12550, 14620, - 19703, 21687, - 26457, 29106, - 3966, 5745, - 7442, 9757, - 14468, 16404, - 19135, 23048, - 25375, 28391, - 3197, 4751, - 6451, 9298, - 13038, 14874, - 17962, 20627, - 23835, 28464, - 3195, 4081, - 6499, 12252, - 14289, 16040, - 18357, 20730, - 26980, 29309, - 1533, 2471, - 4486, 7796, - 12332, 15758, - 19567, 22298, - 25673, 29051, - 2002, 2971, - 4985, 8083, - 13181, 15435, - 18237, 21517, - 24595, 28351, - 3808, 4925, - 6710, 10201, - 12011, 14300, - 18457, 20391, - 26525, 28956, - 2281, 3418, - 4979, 8726, - 15964, 18104, - 20250, 22771, - 25286, 28954, - 3051, 5479, - 7290, 9848, - 12744, 14503, - 18665, 23684, - 26065, 28947, - 2364, 3565, - 5502, 9621, - 14922, 16621, - 19005, 20996, - 26310, 29302, - 4093, 5212, - 6833, 9880, - 16303, 18286, - 20571, 23614, - 26067, 29128, - 2941, 3996, - 6038, 10638, - 12668, 14451, - 16798, 19392, - 26051, 28517, - 3863, 5212, - 7019, 9468, - 11039, 13214, - 19942, 22344, - 25126, 29539, - 4615, 6172, - 7853, 10252, - 12611, 14445, - 19719, 22441, - 24922, 29341, - 3566, 4512, - 6985, 8684, - 10544, 16097, - 18058, 22475, - 26066, 28167, - 4481, 5489, - 7432, 11414, - 13191, 15225, - 20161, 22258, - 26484, 29716, - 3320, 4320, - 6621, 9867, - 11581, 14034, - 21168, 23210, - 26588, 29903, - 3794, 4689, - 6916, 8655, - 10143, 16144, - 19568, 21588, - 27557, 29593, - 2446, 3276, - 5918, 12643, - 16601, 18013, - 21126, 23175, - 27300, 29634, - 2450, 3522, - 5437, 8560, - 15285, 19911, - 21826, 24097, - 26567, 29078, - 2580, 3796, - 5580, 8338, - 9969, 12675, - 18907, 22753, - 25450, 29292, - 3325, 4312, - 6241, 7709, - 9164, 14452, - 21665, 23797, - 27096, 29857, - 3338, 4163, - 7738, 11114, - 12668, 14753, - 16931, 22736, - 25671, 28093, - 3840, 4755, - 7755, 13471, - 15338, 17180, - 20077, 22353, - 27181, 29743, - 2504, 4079, - 8351, 12118, - 15046, 18595, - 21684, 24704, - 27519, 29937, - 5234, 6342, - 8267, 11821, - 15155, 16760, - 20667, 23488, - 25949, 29307, - 2681, 3562, - 6028, 10827, - 18458, 20458, - 22303, 24701, - 26912, 29956, - 3374, 4528, - 6230, 8256, - 9513, 12730, - 18666, 20720, - 26007, 28425, - 2731, 3629, - 8320, 12450, - 14112, 16431, - 18548, 22098, - 25329, 27718, - 3481, 4401, - 7321, 9319, - 11062, 13093, - 15121, 22315, - 26331, 28740, - 3577, 4945, - 6669, 8792, - 10299, 12645, - 19505, 24766, - 26996, 29634, - 4058, 5060, - 7288, 10190, - 11724, 13936, - 15849, 18539, - 26701, 29845, - 4262, 5390, - 7057, 8982, - 10187, 15264, - 20480, 22340, - 25958, 28072, - 3404, 4329, - 6629, 7946, - 10121, 17165, - 19640, 22244, - 25062, 27472, - 3157, 4168, - 6195, 9319, - 10771, 13325, - 15416, 19816, - 24672, 27634, - 2503, 3473, - 5130, 6767, - 8571, 14902, - 19033, 21926, - 26065, 28728, - 4133, 5102, - 7553, 10054, - 11757, 14924, - 17435, 20186, - 23987, 26272, - 4972, 6139, - 7894, 9633, - 11320, 14295, - 21737, 24306, - 26919, 29907, - 2958, 3816, - 6851, 9204, - 10895, 18052, - 20791, 23338, - 27556, 29609, - 5234, 6028, - 8034, 10154, - 11242, 14789, - 18948, 20966, - 26585, 29127, - 5241, 6838, - 10526, 12819, - 14681, 17328, - 19928, 22336, - 26193, 28697, - 3412, 4251, - 5988, 7094, - 9907, 18243, - 21669, 23777, - 26969, 29087, - 2470, 3217, - 7797, 15296, - 17365, 19135, - 21979, 24256, - 27322, 29442, - 4939, 5804, - 8145, 11809, - 13873, 15598, - 17234, 19423, - 26476, 29645, - 5051, 6167, - 8223, 9655, - 12159, 17995, - 20464, 22832, - 26616, 28462, - 4987, 5907, - 9319, 11245, - 13132, 15024, - 17485, 22687, - 26011, 28273, - 5137, 6884, - 11025, 14950, - 17191, 19425, - 21807, 24393, - 26938, 29288, - 7057, 7884, - 9528, 10483, - 10960, 14811, - 19070, 21675, - 25645, 28019, - 6759, 7160, - 8546, 11779, - 12295, 13023, - 16627, 21099, - 24697, 28287, - 3863, 9762, - 11068, 11445, - 12049, 13960, - 18085, 21507, - 25224, 28997, - 397, 335, - 651, 1168, - 640, 765, - 465, 331, - 214, -194, - -578, -647, - -657, 750, - 564, 613, - 549, 630, - 304, -52, - 828, 922, - 443, 111, - 138, 124, - 169, 14, - 144, 83, - 132, 58, - -413, -752, - 869, 336, - 385, 69, - 56, 830, - -227, -266, - -368, -440, - -1195, 163, - 126, -228, - 802, 156, - 188, 120, - 376, 59, - -358, -558, - -1326, -254, - -202, -789, - 296, 92, - -70, -129, - -718, -1135, - 292, -29, - -631, 487, - -157, -153, - -279, 2, - -419, -342, - -34, -514, - -799, -1571, - -687, -609, - -546, -130, - -215, -252, - -446, -574, - -1337, 207, - -72, 32, - 103, -642, - 942, 733, - 187, 29, - -211, -814, - 143, 225, - 20, 24, - -268, -377, - 1623, 1133, - 667, 164, - 307, 366, - 187, 34, - 62, -313, - -832, -1482, - -1181, 483, - -42, -39, - -450, -1406, - -587, -52, - -760, 334, - 98, -60, - -500, -488, - -1058, 299, - 131, -250, - -251, -703, - 1037, 568, - -413, -265, - 1687, 573, - 345, 323, - 98, 61, - -102, 31, - 135, 149, - 617, 365, - -39, 34, - -611, 1201, - 1421, 736, - -414, -393, - -492, -343, - -316, -532, - 528, 172, - 90, 322, - -294, -319, - -541, 503, - 639, 401, - 1, -149, - -73, -167, - 150, 118, - 308, 218, - 121, 195, - -143, -261, - -1013, -802, - 387, 436, - 130, -427, - -448, -681, - 123, -87, - -251, -113, - 274, 310, - 445, 501, - 354, 272, - 141, -285, - 569, 656, - 37, -49, - 251, -386, - -263, 1122, - 604, 606, - 336, 95, - 34, 0, - 85, 180, - 207, -367, - -622, 1070, - -6, -79, - -160, -92, - -137, -276, - -323, -371, - -696, -1036, - 407, 102, - -86, -214, - -482, -647, - -28, -291, - -97, -180, - -250, -435, - -18, -76, - -332, 410, - 407, 168, - 539, 411, - 254, 111, - 58, -145, - 200, 30, - 187, 116, - 131, -367, - -475, 781, - -559, 561, - 195, -115, - 8, -168, - 30, 55, - -122, 131, - 82, -5, - -273, -50, - -632, 668, - 4, 32, - -26, -279, - 315, 165, - 197, 377, - 155, -41, - -138, -324, - -109, -617, - 360, 98, - -53, -319, - -114, -245, - -82, 507, - 468, 263, - -137, -389, - 652, 354, - -18, -227, - -462, -135, - 317, 53, - -16, 66, - -72, -126, - -356, -347, - -328, -72, - -337, 324, - 152, 349, - 169, -196, - 179, 254, - 260, 325, - -74, -80, - 75, -31, - 270, 275, - 87, 278, - -446, -301, - 309, 71, - -25, -242, - 516, 161, - -162, -83, - 329, 230, - -311, -259, - 177, -26, - -462, 89, - 257, 6, - -130, -93, - -456, -317, - -221, -206, - -417, -182, - -74, 234, - 48, 261, - 359, 231, - 258, 85, - -282, 252, - -147, -222, - 251, -207, - 443, 123, - -417, -36, - 273, -241, - 240, -112, - 44, -167, - 126, -124, - -77, 58, - -401, 333, - -118, 82, - 126, 151, - -433, 359, - -130, -102, - 131, -244, - 86, 85, - -462, 414, - -240, 16, - 145, 28, - -205, -481, - 373, 293, - -72, -174, - 62, 259, - -8, -18, - 362, 233, - 185, 43, - 278, 27, - 193, 570, - -248, 189, - 92, 31, - -275, -3, - 243, 176, - 438, 209, - 206, -51, - 79, 109, - 168, -185, - -308, -68, - -618, 385, - -310, -108, - -164, 165, - 61, -152, - -101, -412, - -268, -257, - -40, -20, - -28, -158, - -301, 271, - 380, -338, - -367, -132, - 64, 114, - -131, -225, - -156, -260, - -63, -116, - 155, -586, - -202, 254, - -287, 178, - 227, -106, - -294, 164, - 298, -100, - 185, 317, - 193, -45, - 28, 80, - -87, -433, - 22, -48, - 48, -237, - -229, -139, - 120, -364, - 268, -136, - 396, 125, - 130, -89, - -272, 118, - -256, -68, - -451, 488, - 143, -165, - -48, -190, - 106, 219, - 47, 435, - 245, 97, - 75, -418, - 121, -187, - 570, -200, - -351, 225, - -21, -217, - 234, -111, - 194, 14, - 242, 118, - 140, -397, - 355, 361, - -45, -195 + -108, -90, + -71, -49, + -24, -5, + 21, 48, + 75, 99, + -108, -99, + -76, -57, + -39, -7, + 20, 50, + 76, 98, + -105, -97, + -83, -49, + -19, -7, + 27, 47, + 67, 102, + -97, -90, + -75, -49, + -6, 6, + 27, 55, + 73, 95, + -95, -89, + -72, -40, + -28, -11, + 21, 37, + 70, 86, + -103, -97, + -82, -48, + 8, 21, + 36, 56, + 74, 101, + -103, -96, + -81, -33, + -19, -3, + 28, 41, + 86, 102, + -111, -102, + -85, -62, + -38, -21, + 11, 41, + 66, 95, + -88, -82, + -63, -28, + -10, 1, + 35, 53, + 73, 103, + -101, -96, + -67, -17, + -4, 10, + 30, 45, + 86, 103, + -94, -87, + -70, -55, + -44, -25, + 37, 55, + 73, 104, + -98, -92, + -71, -37, + -23, -10, + 37, 54, + 73, 104, + -114, -108, + -79, -49, + -20, 2, + 29, 54, + 80, 103, + -107, -99, + -86, -60, + -7, 11, + 27, 49, + 67, 95, + -100, -94, + -76, -40, + -5, 6, + 26, 43, + 62, 102, + -88, -79, + -64, -44, + -28, -15, + 26, 43, + 64, 104, + -103, -98, + -71, -26, + -14, 4, + 23, 43, + 72, 87, + -110, -103, + -83, -58, + -27, -5, + 16, 35, + 58, 92, + -103, -94, + -79, -62, + -21, -7, + 12, 52, + 69, 88, + -107, -98, + -84, -44, + -29, -12, + 9, 28, + 73, 90, + -99, -93, + -68, -32, + -19, -5, + 12, 28, + 86, 104, + -100, -91, + -75, -55, + -40, -26, + 20, 40, + 58, 101, + -100, -94, + -73, -60, + -49, -1, + 18, 36, + 83, 96, + -106, -97, + -69, -47, + -25, 11, + 31, 46, + 65, 89, + -93, -87, + -69, -46, + -32, -18, + -2, 14, + 74, 103, + -93, -87, + -65, -29, + 6, 18, + 38, 57, + 74, 102, + -92, -85, + -66, -54, + -43, -4, + 32, 45, + 88, 104, + -108, -99, + -85, -50, + -35, -19, + 29, 41, + 84, 102, + -97, -90, + -73, -57, + -48, -24, + 21, 35, + 79, 94, + -84, -76, + -57, -40, + -29, -11, + 41, 60, + 80, 104, + -100, -94, + -75, -64, + -51, 2, + 20, 45, + 68, 85, + -100, -94, + -62, -41, + -30, 13, + 31, 52, + 85, 101, + -95, -86, + -70, -52, + -38, -23, + 18, 64, + 83, 101, + -114, -108, + -94, -69, + -31, -5, + 24, 46, + 72, 99, + -100, -95, + -54, -38, + -26, -10, + 3, 51, + 75, 89, + -104, -98, + -73, -31, + 18, 31, + 46, 65, + 82, 105, + -90, -84, + -62, -51, + -38, 3, + 25, 44, + 72, 86, + -109, -103, + -83, -29, + 2, 11, + 38, 53, + 84, 101, + -86, -75, + -61, -46, + -17, -4, + 18, 52, + 69, 91, + -109, -100, + -83, -54, + -10, 1, + 19, 35, + 81, 100, + -101, -95, + -78, -68, + -58, -16, + 39, 56, + 85, 103, + -87, -80, + -58, -41, + -29, -7, + 14, 30, + 86, 104, + -105, -99, + -61, -7, + 6, 21, + 44, 61, + 87, 102, + -86, -80, + -48, -30, + -18, 5, + 25, 43, + 82, 97, + -98, -92, + -66, -49, + -36, -13, + 0, 35, + 59, 79, + -98, -93, + -66, -52, + -40, -24, + -12, 46, + 81, 98, + -107, -95, + -64, -39, + -14, 14, + 42, 65, + 88, 106, + -104, -96, + -82, -65, + -54, -35, + 21, 51, + 72, 99, + -94, -87, + -74, -59, + -21, -10, + 14, 35, + 58, 96, + -108, -100, + -86, -71, + -59, -16, + 20, 41, + 74, 97, + -103, -95, + -80, -57, + -45, -24, + -6, 19, + 66, 89, + -99, -93, + -74, -65, + -50, 20, + 40, 57, + 85, 98, + -102, -96, + -41, -21, + -11, 9, + 25, 59, + 83, 98, + -94, -87, + -71, -59, + -47, -8, + 50, 68, + 86, 105, + -108, -101, + -84, -59, + -11, 29, + 44, 61, + 82, 99, + -98, -94, + -82, -73, + -26, 6, + 30, 53, + 79, 98, + -85, -71, + -37, -12, + 3, 22, + 41, 61, + 85, 100, + -85, -79, + -66, -55, + -19, 17, + 33, 56, + 83, 97, + -72, -66, + -60, -57, + -50, 4, + 26, 52, + 79, 103, + -95, -74, + -31, -18, + -11, -6, + 9, 52, + 77, 100, + -78, -75, + -68, -51, + -43, -38, + 12, 45, + 74, 100, + -99, -68, + -40, -33, + -24, -16, + 23, 58, + 79, 97, + -99, -48, + -42, -40, + -36, -19, + 26, 52, + 80, 105, + -73, -69, + -62, -43, + -31, -25, + 21, 48, + 76, 101, + 8, 7, + 5, 2, + 1, -1, + 1, 0, + 0, -1, + 0, -1, + -1, 0, + -2, -4, + -8, -11, + -2, -4, + 3, 2, + -2, -6, + -4, -7, + -2, -2, + -6, 5, + 0, -1, + 2, 8, + 5, 3, + 2, -2, + 8, 5, + 0, -1, + 0, 0, + -2, -4, + -1, -2, + -9, -13, + -1, -1, + -4, -1, + 9, 4, + 0, -3, + -9, 4, + 0, -1, + -2, 1, + -2, -4, + 11, 7, + 4, 3, + 0, -1, + -3, -11, + 4, 3, + 1, 5, + 1, -2, + 1, 0, + 12, 8, + 5, 3, + -1, 2, + -1, -4, + -5, -6, + -13, 5, + 3, 1, + 0, 0, + 1, 0, + -1, -2, + -5, -5, + -10, 8, + 2, 0, + 3, -1, + 1, 0, + 0, -3, + -5, -2, + -5, -8, + 10, 5, + 1, 0, + 1, -2, + -3, -5, + -9, 12, + 6, 2, + 3, 2, + 5, -1, + -1, 12, + 8, 4, + 0, -1, + -5, -7, + 6, 3, + -2, -3, + 3, 1, + -2, 4, + -8, 7, + 2, 1, + 2, -1, + -2, 0, + -2, 0, + -3, -3, + -3, 5, + 4, 2, + 2, 0, + -2, -4, + 1, 1, + -1, -3, + -3, -7, + 6, 2, + 3, 2, + -1, -1, + 2, 0, + 0, 6, + 3, 6, + 6, 3, + 4, 5, + 2, 2, + 5, 2, + 1, 2, + 0, 1, + 3, 3, + 2, -2, + -2, 1, + 0, -4, + -4, -7, + 0, 0, + 4, 2, + 0, -2, + -2, -7, + -1, 6, + -4, -4, + -5, -5, + -4, 0, + -1, -2, + -2, 2, + -1, -1, + 0, 0, + -1, -3, + -10, 3, + 0, -3, + 0, 0, + 0, 2, + 0, -1, + -1, -2, + -7, 3, + 0, 1, + -1, 0, + -1, 2, + 3, 2, + -2, -6, + -1, -1, + -2, -1, + -4, -4, + -1, -4, + 3, -1, + 0, 0, + -3, -5, + 5, 1, + 1, -1, + 2, 2, + 1, 1, + 1, 5, + 2, 1, + 2, -1, + 4, 1, + -2, -2, + -3, 2, + 0, 0, + -2, 5, + 1, 2, + -2, -2, + 7, -1, + 0, 0, + 0, 0, + -1, -2, + 3, 4, + 2, -1, + -2, 0, + -3, 2, + 2, 1, + 0, 0, + 0, -1, + -2, 0, + 5, 0, + -1, 1, + -2, -2, + 2, 1, + 0, 3, + 0, -3, + 1, -1, + -1, 0, + 2, 1, + 3, 1, + 0, 3, + 1, 2, + 2, 2, + 0, 2, + 1, 0, + -2, -3, + -1, -2, + 1, 0, + 2, 0, + -3, -3, + -2, 2, + 0, 1, + 1, 0, + -5, 3, + 0, 1, + 0, 0, + 2, 1, + 1, 0, + -1, -5, + 0, 2, + -2, 0, + 0, 1, + -2, -2, + -2, -1, + 1, -3, + 0, 0, + -2, -3, + -3, 3, + 0, 0, + -2, -1, + 0, 0, + -1, 0, + 2, 1, + 2, 0, + 0, 3, + 2, 0, + 0, 2, + 1, -1, + -2, -1, + -2, 2, + -2, 0, + 0, -1, + 0, -2, + 1, 3, + 0, -1, + 0, 1, + -2, -1, + 2, 1, + -1, 0, + 1, -3, + -1, 0, + 0, 1, + 1, 0, + 1, 0, + 0, 0, + 1, 1, + 2, -3, + -1, -2, + -1, -2, + 0, -1, + 2, 1, + 1, 2, + -2, 1, + 0, 0, + 3, 1, + -2, -2, + 0, 0, + 0, 0, + 0, -1, + 0, 0, + 0, 3, + -3, 0, + -1, 1, + 3, -2, + 0, -1, + -1, -1, + -1, 0, + 0, -1, + -2, 1, + 2, 1, + 2, 0, + -1, 0, + -1, 0, + 0, -1, + -1, -1, + -1, 0, + 5, 1, + 1, 0, + 0, 0, + -1, 0, + 1, -4, + -1, 0, + 0, -1, + -1, 0, + 0, 0, + -1, -1, + -1, 5, + 1, 0, + -2, -1, + -1, -2, + -1, 0, + 0, -3, + 0, 1, + 1, 2, + 1, -2, + 2, 0, + 0, 0, + 0, 3, + -1, -1, + 1, 1, + 1, 0, + 1, 0, + -1, -2, + 0, 1, + 1, 0, + -3, -1, + 1, 0, + -3, -1, + 0, -1, + 1, 1, + 1, -1, + 0, -1, + 2, 1, + 1, 1, + 0, 2, + -2, 1, + 0, 0, + -1, 1, + -1, 2, + -2, 1, + -1, 0, + 0, 0, + 2, 1, + -1, 0, + -2, 0, + 1, 2, + 1, 0, + 0, -2, + 1, 0, + -2, 0, + 1, 1, + 1, -1, + 2, -2, + 2, 0, + 1, -1, + 0, 1, + 0, 1 }; const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB0_10_Stage_info[ NLSF_MSVQ_CB0_10_STAGES ] = { - { 64, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 0 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 0 ] }, - { 16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 64 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 64 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 80 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 80 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 88 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 88 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 96 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 96 ] }, - { 16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q15[ 10 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q5[ 104 ] } + { 64, &SKP_Silk_NLSF_MSVQ_CB0_10_Q8[ 10 * 0 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q4[ 0 ] }, + { 16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q8[ 10 * 64 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q4[ 64 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q8[ 10 * 80 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q4[ 80 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q8[ 10 * 88 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q4[ 88 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q8[ 10 * 96 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q4[ 96 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_10_Q8[ 10 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q4[ 104 ] }, + { 16, &SKP_Silk_NLSF_MSVQ_CB0_10_Q8[ 10 * 112 ], &SKP_Silk_NLSF_MSVQ_CB0_10_rates_Q4[ 112 ] } }; const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_10 = diff --git a/src_common/SKP_Silk_tables_NLSF_CB0_10.h b/src_common/SKP_Silk_tables_NLSF_CB0_10.h index 4aae58386b0191c953af18e534ed638895e6eea7..1e27418142f06d5b8521545997cd0b52b0a3526f 100644 --- a/src_common/SKP_Silk_tables_NLSF_CB0_10.h +++ b/src_common/SKP_Silk_tables_NLSF_CB0_10.h @@ -35,8 +35,8 @@ extern "C" { #endif -#define NLSF_MSVQ_CB0_10_STAGES 6 -#define NLSF_MSVQ_CB0_10_VECTORS 120 +#define NLSF_MSVQ_CB0_10_STAGES 7 +#define NLSF_MSVQ_CB0_10_VECTORS 128 /* NLSF codebook entropy coding tables */ extern const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_10_CDF[ NLSF_MSVQ_CB0_10_VECTORS + NLSF_MSVQ_CB0_10_STAGES ]; diff --git a/src_common/SKP_Silk_tables_NLSF_CB0_16.c b/src_common/SKP_Silk_tables_NLSF_CB0_16.c index 2ff1c82c06aaf6c545646f74fefdabfbce00a579..159839a3b0b80cd41f81c637bb9a9cb2a22b9c7a 100644 --- a/src_common/SKP_Silk_tables_NLSF_CB0_16.c +++ b/src_common/SKP_Silk_tables_NLSF_CB0_16.c @@ -28,1283 +28,932 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /**********************************************/ /* This file has been automatically generated */ /* */ -/* ROM usage: 0.51 + 7.38 kB */ +/* ROM usage: 0.38 + 2.62 kB */ /**********************************************/ #include "SKP_Silk_structs.h" +#include "SKP_Silk_tables.h" #include "SKP_Silk_tables_NLSF_CB0_16.h" const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ NLSF_MSVQ_CB0_16_VECTORS + NLSF_MSVQ_CB0_16_STAGES ] = { 0, - 1449, - 2749, - 4022, - 5267, - 6434, - 7600, - 8647, - 9695, - 10742, - 11681, - 12601, - 13444, - 14251, - 15008, - 15764, - 16521, - 17261, - 18002, - 18710, - 19419, + 2661, + 5102, + 7439, + 9404, + 11130, + 12855, + 14508, + 15959, + 17349, + 18738, 20128, - 20837, - 21531, - 22225, - 22919, - 23598, - 24277, - 24956, - 25620, - 26256, - 26865, - 27475, - 28071, - 28667, - 29263, - 29859, - 30443, - 31026, - 31597, - 32168, - 32727, - 33273, - 33808, - 34332, - 34855, - 35379, - 35902, - 36415, - 36927, - 37439, - 37941, - 38442, - 38932, - 39423, - 39914, - 40404, - 40884, - 41364, - 41844, - 42324, - 42805, - 43285, - 43754, - 44224, - 44694, - 45164, - 45623, - 46083, - 46543, - 46993, - 47443, - 47892, - 48333, - 48773, - 49213, - 49653, - 50084, - 50515, - 50946, - 51377, - 51798, - 52211, - 52614, - 53018, - 53422, - 53817, - 54212, - 54607, - 55002, - 55388, - 55775, - 56162, - 56548, - 56910, - 57273, - 57635, - 57997, - 58352, - 58698, - 59038, - 59370, - 59702, - 60014, - 60325, - 60630, - 60934, - 61239, - 61537, - 61822, - 62084, - 62346, - 62602, - 62837, - 63072, - 63302, - 63517, - 63732, - 63939, - 64145, - 64342, - 64528, - 64701, - 64867, - 65023, - 65151, - 65279, - 65407, + 21458, + 22679, + 23847, + 25016, + 26184, + 27303, + 28422, + 29541, + 30660, + 31731, + 32803, + 33874, + 34901, + 35927, + 36953, + 37979, + 38961, + 39944, + 40885, + 41826, + 42767, + 43708, + 44609, + 45510, + 46411, + 47274, + 48136, + 48999, + 49862, + 50725, + 51551, + 52377, + 53204, + 53995, + 54786, + 55544, + 56269, + 56995, + 57690, + 58355, + 58992, + 59629, + 60266, + 60904, + 61514, + 62124, + 62708, + 63292, + 63828, + 64364, + 64834, + 65230, 65535, 0, - 5099, - 9982, - 14760, - 19538, - 24213, - 28595, - 32976, - 36994, - 41012, - 44944, - 48791, - 52557, - 56009, - 59388, - 62694, + 5542, + 10849, + 16156, + 21023, + 25683, + 29957, + 33876, + 37795, + 41547, + 45300, + 48894, + 52487, + 55928, + 59224, + 62379, 65535, 0, - 9955, - 19697, - 28825, - 36842, - 44686, - 52198, - 58939, + 10647, + 19220, + 27793, + 36003, + 44213, + 51422, + 58631, 65535, 0, - 8949, - 17335, - 25720, - 33926, - 41957, - 49987, - 57845, + 8897, + 17795, + 26315, + 34835, + 42993, + 51152, + 58965, 65535, 0, - 9724, - 18642, - 26998, - 35355, - 43532, - 51534, - 59365, + 9726, + 19453, + 27632, + 35811, + 43643, + 51475, + 58657, 65535, 0, - 8750, - 17499, - 26249, - 34448, - 42471, - 50494, - 58178, + 9306, + 18611, + 27522, + 36433, + 44258, + 52084, + 58955, 65535, 0, - 8730, - 17273, - 25816, - 34176, - 42536, - 50203, - 57869, + 9344, + 17912, + 26481, + 35049, + 43254, + 51111, + 58635, 65535, 0, - 8769, - 17538, - 26307, - 34525, - 42742, - 50784, - 58319, + 8946, + 17891, + 26837, + 35403, + 43606, + 51128, + 58332, 65535, 0, - 8736, - 17101, - 25466, - 33653, - 41839, - 50025, - 57864, + 8919, + 17460, + 25638, + 33817, + 41996, + 50174, + 58353, 65535, 0, - 4368, - 8735, - 12918, - 17100, - 21283, - 25465, - 29558, - 33651, - 37744, - 41836, - 45929, - 50022, - 54027, - 57947, - 61782, + 4876, + 9752, + 14421, + 18893, + 23175, + 27456, + 31738, + 35839, + 39939, + 43865, + 47792, + 51552, + 55312, + 59072, + 62373, 65535 }; const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB0_16_CDF_start_ptr[ NLSF_MSVQ_CB0_16_STAGES ] = { &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 0 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 129 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 146 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 155 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 164 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 173 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 182 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 191 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 200 ], - &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 209 ] + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 65 ], + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 82 ], + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 91 ], + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 100 ], + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 109 ], + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 118 ], + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 127 ], + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 136 ], + &SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ 145 ] }; const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_CDF_middle_idx[ NLSF_MSVQ_CB0_16_STAGES ] = { - 42, + 23, 8, - 4, 5, 5, 5, 5, 5, 5, - 9 + 5, + 8 }; -const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ NLSF_MSVQ_CB0_16_VECTORS ] = +const SKP_uint8 SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ NLSF_MSVQ_CB0_16_VECTORS ] = { - 176, 181, - 182, 183, - 186, 186, - 191, 191, - 191, 196, - 197, 201, - 203, 206, - 206, 206, - 207, 207, - 209, 209, - 209, 209, - 210, 210, - 210, 211, - 211, 211, - 212, 214, - 216, 216, - 217, 217, - 217, 217, - 218, 218, - 219, 219, - 220, 221, - 222, 223, - 223, 223, - 223, 224, - 224, 224, - 225, 225, - 226, 226, - 226, 226, - 227, 227, - 227, 227, - 227, 227, - 228, 228, - 228, 228, - 229, 229, - 229, 230, - 230, 230, - 231, 231, - 231, 231, - 232, 232, - 232, 232, - 233, 234, - 235, 235, - 235, 236, - 236, 236, - 236, 237, - 237, 237, - 237, 240, - 240, 240, - 240, 241, - 242, 243, - 244, 244, - 247, 247, - 248, 248, - 248, 249, - 251, 255, - 255, 256, - 260, 260, - 261, 264, - 264, 266, - 266, 268, - 271, 274, - 276, 279, - 288, 288, - 288, 288, - 118, 120, - 121, 121, - 122, 125, - 125, 129, - 129, 130, - 131, 132, - 136, 137, - 138, 145, - 87, 88, - 91, 97, - 98, 100, - 105, 106, - 92, 95, - 95, 96, - 97, 97, - 98, 99, - 88, 92, - 95, 95, - 96, 97, - 98, 109, - 93, 93, - 93, 96, - 97, 97, - 99, 101, - 93, 94, - 94, 95, - 95, 99, - 99, 99, + 74, 76, + 77, 81, + 84, 84, + 85, 88, + 89, 89, + 89, 90, + 92, 93, 93, 93, - 93, 96, - 96, 97, - 100, 102, - 93, 95, + 94, 94, + 94, 94, + 95, 95, 95, 96, 96, 96, + 96, 97, + 97, 98, + 98, 98, 98, 99, - 125, 125, - 127, 127, - 127, 127, - 128, 128, - 128, 128, - 128, 128, - 129, 130, - 131, 132 + 99, 99, + 100, 100, + 100, 100, + 100, 101, + 101, 101, + 102, 102, + 103, 104, + 104, 105, + 106, 107, + 107, 107, + 107, 108, + 108, 109, + 109, 111, + 111, 114, + 118, 124, + 57, 58, + 58, 60, + 61, 63, + 65, 65, + 66, 66, + 67, 67, + 68, 69, + 70, 70, + 42, 47, + 47, 48, + 48, 51, + 51, 52, + 46, 46, + 47, 47, + 48, 48, + 49, 53, + 44, 44, + 48, 48, + 49, 49, + 51, 52, + 45, 45, + 46, 46, + 49, 49, + 52, 53, + 45, 47, + 47, 47, + 48, 49, + 50, 52, + 46, 46, + 46, 47, + 48, 50, + 51, 51, + 46, 47, + 48, 48, + 48, 48, + 48, 51, + 60, 60, + 61, 62, + 63, 63, + 63, 64, + 64, 65, + 65, 66, + 66, 66, + 69, 70 }; const SKP_int SKP_Silk_NLSF_MSVQ_CB0_16_ndelta_min_Q15[ 16 + 1 ] = { - 266, - 3, - 40, + 236, + 4, + 75, 3, 3, - 16, - 78, - 89, - 107, - 141, - 188, - 146, - 272, - 240, - 235, - 215, - 632 + 5, + 115, + 95, + 113, + 138, + 176, + 169, + 249, + 256, + 271, + 263, + 630 }; -const SKP_int16 SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * NLSF_MSVQ_CB0_16_VECTORS ] = +const SKP_int8 SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * NLSF_MSVQ_CB0_16_VECTORS ] = { - 1170, 2278, 3658, 5374, - 7666, 9113, 11298, 13304, - 15371, 17549, 19587, 21487, - 23798, 26038, 28318, 30201, - 1628, 2334, 4115, 6036, - 7818, 9544, 11777, 14021, - 15787, 17408, 19466, 21261, - 22886, 24565, 26714, 28059, - 1724, 2670, 4056, 6532, - 8357, 10119, 12093, 14061, - 16491, 18795, 20417, 22402, - 24251, 26224, 28410, 29956, - 1493, 3427, 4789, 6399, - 8435, 10168, 12000, 14066, - 16229, 18210, 20040, 22098, - 24153, 26095, 28183, 30121, - 1119, 2089, 4295, 6245, - 8691, 10741, 12688, 15057, - 17028, 18792, 20717, 22514, - 24497, 26548, 28619, 30630, - 1363, 2417, 3927, 5556, - 7422, 9315, 11879, 13767, - 16143, 18520, 20458, 22578, - 24539, 26436, 28318, 30318, - 1122, 2503, 5216, 7148, - 9310, 11078, 13175, 14800, - 16864, 18700, 20436, 22488, - 24572, 26602, 28555, 30426, - 600, 1317, 2970, 5609, - 7694, 9784, 12169, 14087, - 16379, 18378, 20551, 22686, - 24739, 26697, 28646, 30355, - 941, 1882, 4274, 5540, - 8482, 9858, 11940, 14287, - 16091, 18501, 20326, 22612, - 24711, 26638, 28814, 30430, - 635, 1699, 4376, 5948, - 8097, 10115, 12274, 14178, - 16111, 17813, 19695, 21773, - 23927, 25866, 28022, 30134, - 1408, 2222, 3524, 5615, - 7345, 8849, 10989, 12772, - 15352, 17026, 18919, 21062, - 23329, 25215, 27209, 29023, - 701, 1307, 3548, 6301, - 7744, 9574, 11227, 12978, - 15170, 17565, 19775, 22097, - 24230, 26335, 28377, 30231, - 1752, 2364, 4879, 6569, - 7813, 9796, 11199, 14290, - 15795, 18000, 20396, 22417, - 24308, 26124, 28360, 30633, - 901, 1629, 3356, 4635, - 7256, 8767, 9971, 11558, - 15215, 17544, 19523, 21852, - 23900, 25978, 28133, 30184, - 981, 1669, 3323, 4693, - 6213, 8692, 10614, 12956, - 15211, 17711, 19856, 22122, - 24344, 26592, 28723, 30481, - 1607, 2577, 4220, 5512, - 8532, 10388, 11627, 13671, - 15752, 17199, 19840, 21859, - 23494, 25786, 28091, 30131, - 811, 1471, 3144, 5041, - 7430, 9389, 11174, 13255, - 15157, 16741, 19583, 22167, - 24115, 26142, 28383, 30395, - 1543, 2144, 3629, 6347, - 7333, 9339, 10710, 13596, - 15099, 17340, 20102, 21886, - 23732, 25637, 27818, 29917, - 492, 1185, 2940, 5488, - 7095, 8751, 11596, 13579, - 16045, 18015, 20178, 22127, - 24265, 26406, 28484, 30357, - 1547, 2282, 3693, 6341, - 7758, 9607, 11848, 13236, - 16564, 18069, 19759, 21404, - 24110, 26606, 28786, 30655, - 685, 1338, 3409, 5262, - 6950, 9222, 11414, 14523, - 16337, 17893, 19436, 21298, - 23293, 25181, 27973, 30520, - 887, 1581, 3057, 4318, - 7192, 8617, 10047, 13106, - 16265, 17893, 20233, 22350, - 24379, 26384, 28314, 30189, - 2285, 3745, 5662, 7576, - 9323, 11320, 13239, 15191, - 17175, 19225, 21108, 22972, - 24821, 26655, 28561, 30460, - 1496, 2108, 3448, 6898, - 8328, 9656, 11252, 12823, - 14979, 16482, 18180, 20085, - 22962, 25160, 27705, 29629, - 575, 1261, 3861, 6627, - 8294, 10809, 12705, 14768, - 17076, 19047, 20978, 23055, - 24972, 26703, 28720, 30345, - 1682, 2213, 3882, 6238, - 7208, 9646, 10877, 13431, - 14805, 16213, 17941, 20873, - 23550, 25765, 27756, 29461, - 888, 1616, 3924, 5195, - 7206, 8647, 9842, 11473, - 16067, 18221, 20343, 22774, - 24503, 26412, 28054, 29731, - 805, 1454, 2683, 4472, - 7936, 9360, 11398, 14345, - 16205, 17832, 19453, 21646, - 23899, 25928, 28387, 30463, - 1640, 2383, 3484, 5082, - 6032, 8606, 11640, 12966, - 15842, 17368, 19346, 21182, - 23638, 25889, 28368, 30299, - 1632, 2204, 4510, 7580, - 8718, 10512, 11962, 14096, - 15640, 17194, 19143, 22247, - 24563, 26561, 28604, 30509, - 2043, 2612, 3985, 6851, - 8038, 9514, 10979, 12789, - 15426, 16728, 18899, 20277, - 22902, 26209, 28711, 30618, - 2224, 2798, 4465, 5320, - 7108, 9436, 10986, 13222, - 14599, 18317, 20141, 21843, - 23601, 25700, 28184, 30582, - 835, 1541, 4083, 5769, - 7386, 9399, 10971, 12456, - 15021, 18642, 20843, 23100, - 25292, 26966, 28952, 30422, - 1795, 2343, 4809, 5896, - 7178, 8545, 10223, 13370, - 14606, 16469, 18273, 20736, - 23645, 26257, 28224, 30390, - 1734, 2254, 4031, 5188, - 6506, 7872, 9651, 13025, - 14419, 17305, 19495, 22190, - 24403, 26302, 28195, 30177, - 1841, 2349, 3968, 4764, - 6376, 9825, 11048, 13345, - 14682, 16252, 18183, 21363, - 23918, 26156, 28031, 29935, - 1432, 2047, 5631, 6927, - 8198, 9675, 11358, 13506, - 14802, 16419, 18339, 22019, - 24124, 26177, 28130, 30586, - 1730, 2320, 3744, 4808, - 6007, 9666, 10997, 13622, - 15234, 17495, 20088, 22002, - 23603, 25400, 27379, 29254, - 1267, 1915, 5483, 6812, - 8229, 9919, 11589, 13337, - 14747, 17965, 20552, 22167, - 24519, 26819, 28883, 30642, - 1526, 2229, 4240, 7388, - 8953, 10450, 11899, 13718, - 16861, 18323, 20379, 22672, - 24797, 26906, 28906, 30622, - 2175, 2791, 4104, 6875, - 8612, 9798, 12152, 13536, - 15623, 17682, 19213, 21060, - 24382, 26760, 28633, 30248, - 454, 1231, 4339, 5738, - 7550, 9006, 10320, 13525, - 16005, 17849, 20071, 21992, - 23949, 26043, 28245, 30175, - 2250, 2791, 4230, 5283, - 6762, 10607, 11879, 13821, - 15797, 17264, 20029, 22266, - 24588, 26437, 28244, 30419, - 1696, 2216, 4308, 8385, - 9766, 11030, 12556, 14099, - 16322, 17640, 19166, 20590, - 23967, 26858, 28798, 30562, - 2452, 3236, 4369, 6118, - 7156, 9003, 11509, 12796, - 15749, 17291, 19491, 22241, - 24530, 26474, 28273, 30073, - 1811, 2541, 3555, 5480, - 9123, 10527, 11894, 13659, - 15262, 16899, 19366, 21069, - 22694, 24314, 27256, 29983, - 1553, 2246, 4559, 5500, - 6754, 7874, 11739, 13571, - 15188, 17879, 20281, 22510, - 24614, 26649, 28786, 30755, - 1982, 2768, 3834, 5964, - 8732, 9908, 11797, 14813, - 16311, 17946, 21097, 22851, - 24456, 26304, 28166, 29755, - 1824, 2529, 3817, 5449, - 6854, 8714, 10381, 12286, - 14194, 15774, 19524, 21374, - 23695, 26069, 28096, 30212, - 2212, 2854, 3947, 5898, - 9930, 11556, 12854, 14788, - 16328, 17700, 20321, 22098, - 23672, 25291, 26976, 28586, - 2023, 2599, 4024, 4916, - 6613, 11149, 12457, 14626, - 16320, 17822, 19673, 21172, - 23115, 26051, 28825, 30758, - 1628, 2206, 3467, 4364, - 8679, 10173, 11864, 13679, - 14998, 16938, 19207, 21364, - 23850, 26115, 28124, 30273, - 2014, 2603, 4114, 7254, - 8516, 10043, 11822, 13503, - 16329, 17826, 19697, 21280, - 23151, 24661, 26807, 30161, - 2376, 2980, 4422, 5770, - 7016, 9723, 11125, 13516, - 15485, 16985, 19160, 20587, - 24401, 27180, 29046, 30647, - 2454, 3502, 4624, 6019, - 7632, 8849, 10792, 13964, - 15523, 17085, 19611, 21238, - 22856, 25108, 28106, 29890, - 1573, 2274, 3308, 5999, - 8977, 10104, 12457, 14258, - 15749, 18180, 19974, 21253, - 23045, 25058, 27741, 30315, - 1943, 2730, 4140, 6160, - 7491, 8986, 11309, 12775, - 14820, 16558, 17909, 19757, - 21512, 23605, 27274, 29527, - 2021, 2582, 4494, 5835, - 6993, 8245, 9827, 14733, - 16462, 17894, 19647, 21083, - 23764, 26667, 29072, 30990, - 1052, 1775, 3218, 4378, - 7666, 9403, 11248, 13327, - 14972, 17962, 20758, 22354, - 25071, 27209, 29001, 30609, - 2218, 2866, 4223, 5352, - 6581, 9980, 11587, 13121, - 15193, 16583, 18386, 20080, - 22013, 25317, 28127, 29880, - 2146, 2840, 4397, 5840, - 7449, 8721, 10512, 11936, - 13595, 17253, 19310, 20891, - 23417, 25627, 27749, 30231, - 1972, 2619, 3756, 6367, - 7641, 8814, 12286, 13768, - 15309, 18036, 19557, 20904, - 22582, 24876, 27800, 30440, - 2005, 2577, 4272, 7373, - 8558, 10223, 11770, 13402, - 16502, 18000, 19645, 21104, - 22990, 26806, 29505, 30942, - 1153, 1822, 3724, 5443, - 6990, 8702, 10289, 11899, - 13856, 15315, 17601, 21064, - 23692, 26083, 28586, 30639, - 1304, 1869, 3318, 7195, - 9613, 10733, 12393, 13728, - 15822, 17474, 18882, 20692, - 23114, 25540, 27684, 29244, - 2093, 2691, 4018, 6658, - 7947, 9147, 10497, 11881, - 15888, 17821, 19333, 21233, - 23371, 25234, 27553, 29998, - 575, 1331, 5304, 6910, - 8425, 10086, 11577, 13498, - 16444, 18527, 20565, 22847, - 24914, 26692, 28759, 30157, - 1435, 2024, 3283, 4156, - 7611, 10592, 12049, 13927, - 15459, 18413, 20495, 22270, - 24222, 26093, 28065, 30099, - 1632, 2168, 5540, 7478, - 8630, 10391, 11644, 14321, - 15741, 17357, 18756, 20434, - 22799, 26060, 28542, 30696, - 1407, 2245, 3405, 5639, - 9419, 10685, 12104, 13495, - 15535, 18357, 19996, 21689, - 24351, 26550, 28853, 30564, - 1675, 2226, 4005, 8223, - 9975, 11155, 12822, 14316, - 16504, 18137, 19574, 21050, - 22759, 24912, 28296, 30634, - 1080, 1614, 3622, 7565, - 8748, 10303, 11713, 13848, - 15633, 17434, 19761, 21825, - 23571, 25393, 27406, 29063, - 1693, 2229, 3456, 4354, - 5670, 10890, 12563, 14167, - 15879, 17377, 19817, 21971, - 24094, 26131, 28298, 30099, - 2042, 2959, 4195, 5740, - 7106, 8267, 11126, 14973, - 16914, 18295, 20532, 21982, - 23711, 25769, 27609, 29351, - 984, 1612, 3808, 5265, - 6885, 8411, 9547, 10889, - 12522, 16520, 19549, 21639, - 23746, 26058, 28310, 30374, - 2036, 2538, 4166, 7761, - 9146, 10412, 12144, 13609, - 15588, 17169, 18559, 20113, - 21820, 24313, 28029, 30612, - 1871, 2355, 4061, 5143, - 7464, 10129, 11941, 15001, - 16680, 18354, 19957, 22279, - 24861, 26872, 28988, 30615, - 2566, 3161, 4643, 6227, - 7406, 9970, 11618, 13416, - 15889, 17364, 19121, 20817, - 22592, 24720, 28733, 31082, - 1700, 2327, 4828, 5939, - 7567, 9154, 11087, 12771, - 14209, 16121, 20222, 22671, - 24648, 26656, 28696, 30745, - 3169, 3873, 5046, 6868, - 8184, 9480, 12335, 14068, - 15774, 17971, 20231, 21711, - 23520, 25245, 27026, 28730, - 1564, 2391, 4229, 6730, - 8905, 10459, 13026, 15033, - 17265, 19809, 21849, 23741, - 25490, 27312, 29061, 30527, - 2864, 3559, 4719, 6441, - 9592, 11055, 12763, 14784, - 16428, 18164, 20486, 22262, - 24183, 26263, 28383, 30224, - 2673, 3449, 4581, 5983, - 6863, 8311, 12464, 13911, - 15738, 17791, 19416, 21182, - 24025, 26561, 28723, 30440, - 2419, 3049, 4274, 6384, - 8564, 9661, 11288, 12676, - 14447, 17578, 19816, 21231, - 23099, 25270, 26899, 28926, - 1278, 2001, 3000, 5353, - 9995, 11777, 13018, 14570, - 16050, 17762, 19982, 21617, - 23371, 25083, 27656, 30172, - 932, 1624, 2798, 4570, - 8592, 9988, 11552, 13050, - 16921, 18677, 20415, 22810, - 24817, 26819, 28804, 30385, - 2324, 2973, 4156, 5702, - 6919, 8806, 10259, 12503, - 15015, 16567, 19418, 21375, - 22943, 24550, 27024, 29849, - 1564, 2373, 3455, 4907, - 5975, 7436, 11786, 14505, - 16107, 18148, 20019, 21653, - 23740, 25814, 28578, 30372, - 3025, 3729, 4866, 6520, - 9487, 10943, 12358, 14258, - 16174, 17501, 19476, 21408, - 23227, 24906, 27347, 29407, - 1270, 1965, 6802, 7995, - 9204, 10828, 12507, 14230, - 15759, 17860, 20369, 22502, - 24633, 26514, 28535, 30525, - 2210, 2749, 4266, 7487, - 9878, 11018, 12823, 14431, - 16247, 18626, 20450, 22054, - 23739, 25291, 27074, 29169, - 1275, 1926, 4330, 6573, - 8441, 10920, 13260, 15008, - 16927, 18573, 20644, 22217, - 23983, 25474, 27372, 28645, - 3015, 3670, 5086, 6372, - 7888, 9309, 10966, 12642, - 14495, 16172, 18080, 19972, - 22454, 24899, 27362, 29975, - 2882, 3733, 5113, 6482, - 8125, 9685, 11598, 13288, - 15405, 17192, 20178, 22426, - 24801, 27014, 29212, 30811, - 2300, 2968, 4101, 5442, - 6327, 7910, 12455, 13862, - 15747, 17505, 19053, 20679, - 22615, 24658, 27499, 30065, - 2257, 2940, 4430, 5991, - 7042, 8364, 9414, 11224, - 15723, 17420, 19253, 21469, - 23915, 26053, 28430, 30384, - 1227, 2045, 3818, 5011, - 6990, 9231, 11024, 13011, - 17341, 19017, 20583, 22799, - 25195, 26876, 29351, 30805, - 1354, 1924, 3789, 8077, - 10453, 11639, 13352, 14817, - 16743, 18189, 20095, 22014, - 24593, 26677, 28647, 30256, - 3142, 4049, 6197, 7417, - 8753, 10156, 11533, 13181, - 15947, 17655, 19606, 21402, - 23487, 25659, 28123, 30304, - 1317, 2263, 4725, 7611, - 9667, 11634, 14143, 16258, - 18724, 20698, 22379, 24007, - 25775, 27251, 28930, 30593, - 1570, 2323, 3818, 6215, - 9893, 11556, 13070, 14631, - 16152, 18290, 21386, 23346, - 25114, 26923, 28712, 30168, - 2297, 3905, 6287, 8558, - 10668, 12766, 15019, 17102, - 19036, 20677, 22341, 23871, - 25478, 27085, 28851, 30520, - 1915, 2507, 4033, 5749, - 7059, 8871, 10659, 12198, - 13937, 15383, 16869, 18707, - 23175, 25818, 28514, 30501, - 2404, 2918, 5190, 6252, - 7426, 9887, 12387, 14795, - 16754, 18368, 20338, 22003, - 24236, 26456, 28490, 30397, - 1621, 2227, 3479, 5085, - 9425, 12892, 14246, 15652, - 17205, 18674, 20446, 22209, - 23778, 25867, 27931, 30093, - 1869, 2390, 4105, 7021, - 11221, 12775, 14059, 15590, - 17024, 18608, 20595, 22075, - 23649, 25154, 26914, 28671, - 2551, 3252, 4688, 6562, - 7869, 9125, 10475, 11800, - 15402, 18780, 20992, 22555, - 24289, 25968, 27465, 29232, - 2705, 3493, 4735, 6360, - 7905, 9352, 11538, 13430, - 15239, 16919, 18619, 20094, - 21800, 23342, 25200, 29257, - 2166, 2791, 4011, 5081, - 5896, 9038, 13407, 14703, - 16543, 18189, 19896, 21857, - 24872, 26971, 28955, 30514, - 1865, 3021, 4696, 6534, - 8343, 9914, 12789, 14103, - 16533, 17729, 21340, 22439, - 24873, 26330, 28428, 30154, - 3369, 4345, 6573, 8763, - 10309, 11713, 13367, 14784, - 16483, 18145, 19839, 21247, - 23292, 25477, 27555, 29447, - 1265, 2184, 5443, 7893, - 10591, 13139, 15105, 16639, - 18402, 19826, 21419, 22995, - 24719, 26437, 28363, 30125, - 1584, 2004, 3535, 4450, - 8662, 10764, 12832, 14978, - 16972, 18794, 20932, 22547, - 24636, 26521, 28701, 30567, - 3419, 4528, 6602, 7890, - 9508, 10875, 12771, 14357, - 16051, 18330, 20630, 22490, - 25070, 26936, 28946, 30542, - 1726, 2252, 4597, 6950, - 8379, 9823, 11363, 12794, - 14306, 15476, 16798, 18018, - 21671, 25550, 28148, 30367, - 3385, 3870, 5307, 6388, - 7141, 8684, 12695, 14939, - 16480, 18277, 20537, 22048, - 23947, 25965, 28214, 29956, - 2771, 3306, 4450, 5560, - 6453, 9493, 13548, 14754, - 16743, 18447, 20028, 21736, - 23746, 25353, 27141, 29066, - 3028, 3900, 6617, 7893, - 9211, 10480, 12047, 13583, - 15182, 16662, 18502, 20092, - 22190, 24358, 26302, 28957, - 2000, 2550, 4067, 6837, - 9628, 11002, 12594, 14098, - 15589, 17195, 18679, 20099, - 21530, 23085, 24641, 29022, - 2844, 3302, 5103, 6107, - 6911, 8598, 12416, 14054, - 16026, 18567, 20672, 22270, - 23952, 25771, 27658, 30026, - 4043, 5150, 7268, 9056, - 10916, 12638, 14543, 16184, - 17948, 19691, 21357, 22981, - 24825, 26591, 28479, 30233, - 2109, 2625, 4320, 5525, - 7454, 10220, 12980, 14698, - 17627, 19263, 20485, 22381, - 24279, 25777, 27847, 30458, - 1550, 2667, 6473, 9496, - 10985, 12352, 13795, 15233, - 17099, 18642, 20461, 22116, - 24197, 26291, 28403, 30132, - 2411, 3084, 4145, 5394, - 6367, 8154, 13125, 16049, - 17561, 19125, 21258, 22762, - 24459, 26317, 28255, 29702, - 4159, 4516, 5956, 7635, - 8254, 8980, 11208, 14133, - 16210, 17875, 20196, 21864, - 23840, 25747, 28058, 30012, - 2026, 2431, 2845, 3618, - 7950, 9802, 12721, 14460, - 16576, 18984, 21376, 23319, - 24961, 26718, 28971, 30640, - 3429, 3833, 4472, 4912, - 7723, 10386, 12981, 15322, - 16699, 18807, 20778, 22551, - 24627, 26494, 28334, 30482, - 4740, 5169, 5796, 6485, - 6998, 8830, 11777, 14414, - 16831, 18413, 20789, 22369, - 24236, 25835, 27807, 30021, - 150, 168, -17, -107, - -142, -229, -320, -406, - -503, -620, -867, -935, - -902, -680, -398, -114, - -398, -355, 49, 255, - 114, 260, 399, 264, - 317, 431, 514, 531, - 435, 356, 238, 106, - -43, -36, -169, -224, - -391, -633, -776, -970, - -844, -455, -181, -12, - 85, 85, 164, 195, - 122, 85, -158, -640, - -903, 9, 7, -124, - 149, 32, 220, 369, - 242, 115, 79, 84, - -146, -216, -70, 1024, - 751, 574, 440, 377, - 352, 203, 30, 16, - -3, 81, 161, 100, - -148, -176, 933, 750, - 404, 171, -2, -146, - -411, -442, -541, -552, - -442, -269, -240, -52, - 603, 635, 405, 178, - 215, 19, -153, -167, - -290, -219, 151, 271, - 151, 119, 303, 266, - 100, 69, -293, -657, - 939, 659, 442, 351, - 132, 98, -16, -1, - -135, -200, -223, -89, - 167, 154, 172, 237, - -45, -183, -228, -486, - 263, 608, 158, -125, - -390, -227, -118, 43, - -457, -392, -769, -840, - 20, -117, -194, -189, - -173, -173, -33, 32, - 174, 144, 115, 167, - 57, 44, 14, 147, - 96, -54, -142, -129, - -254, -331, 304, 310, - -52, -419, -846, -1060, - -88, -123, -202, -343, - -554, -961, -951, 327, - 159, 81, 255, 227, - 120, 203, 256, 192, - 164, 224, 290, 195, - 216, 209, 128, 832, - 1028, 889, 698, 504, - 408, 355, 218, 32, - -115, -84, -276, -100, - -312, -484, 899, 682, - 465, 456, 241, -12, - -275, -425, -461, -367, - -33, -28, -102, -194, - -527, 863, 906, 463, - 245, 13, -212, -305, - -105, 163, 279, 176, - 93, 67, 115, 192, - 61, -50, -132, -175, - -224, -271, -629, -252, - 1158, 972, 638, 280, - 300, 326, 143, -152, - -214, -287, 53, -42, - -236, -352, -423, -248, - -129, -163, -178, -119, - 85, 57, 514, 382, - 374, 402, 424, 423, - 271, 197, 97, 40, - 39, -97, -191, -164, - -230, -256, -410, 396, - 327, 127, 10, -119, - -167, -291, -274, -141, - -99, -226, -218, -139, - -224, -209, -268, -442, - -413, 222, 58, 521, - 344, 258, 76, -42, - -142, -165, -123, -92, - 47, 8, -3, -191, - -11, -164, -167, -351, - -740, 311, 538, 291, - 184, 29, -105, 9, - -30, -54, -17, -77, - -271, -412, -622, -648, - 476, 186, -66, -197, - -73, -94, -15, 47, - 28, 112, -58, -33, - 65, 19, 84, 86, - 276, 114, 472, 786, - 799, 625, 415, 178, - -35, -26, 5, 9, - 83, 39, 37, 39, - -184, -374, -265, -362, - -501, 337, 716, 478, - -60, -125, -163, 362, - 17, -122, -233, 279, - 138, 157, 318, 193, - 189, 209, 266, 252, - -46, -56, -277, -429, - 464, 386, 142, 44, - -43, 66, 264, 182, - 47, 14, -26, -79, - 49, 15, -128, -203, - -400, -478, 325, 27, - 234, 411, 205, 129, - 12, 58, 123, 57, - 171, 137, 96, 128, - -32, 134, -12, 57, - 119, 26, -22, -165, - -500, -701, -528, -116, - 64, -8, 97, -9, - -162, -66, -156, -194, - -303, -546, -341, 546, - 358, 95, 45, 76, - 270, 403, 205, 100, - 123, 50, -53, -144, - -110, -13, 32, -228, - -130, 353, 296, 56, - -372, -253, 365, 73, - 10, -34, -139, -191, - -96, 5, 44, -85, - -179, -129, -192, -246, - -85, -110, -155, -44, - -27, 145, 138, 79, - 32, -148, -577, -634, - 191, 94, -9, -35, - -77, -84, -56, -171, - -298, -271, -243, -156, - -328, -235, -76, -128, - -121, 129, 13, -22, - 32, 45, -248, -65, - 193, -81, 299, 57, - -147, 192, -165, -354, - -334, -106, -156, -40, - -3, -68, 124, -257, - 78, 124, 170, 412, - 227, 105, -104, 12, - 154, 250, 274, 258, - 4, -27, 235, 152, - 51, 338, 300, 7, - -314, -411, 215, 170, - -9, -93, -77, 76, - 67, 54, 200, 315, - 163, 72, -91, -402, - 158, 187, -156, -91, - 290, 267, 167, 91, - 140, 171, 112, 9, - -42, -177, -440, 385, - 80, 15, 172, 129, - 41, -129, -372, -24, - -75, -30, -170, 10, - -118, 57, 78, -101, - 232, 161, 123, 256, - 277, 101, -192, -629, - -100, -60, -232, 66, - 13, -13, -80, -239, - 239, 37, 32, 89, - -319, -579, 450, 360, - 3, -29, -299, -89, - -54, -110, -246, -164, - 6, -188, 338, 176, - -92, 197, 137, 134, - 12, -2, 56, -183, - 114, -36, -131, -204, - 75, -25, -174, 191, - -15, -290, -429, -267, - 79, 37, 106, 23, - -384, 425, 70, -14, - 212, 105, 15, -2, - -42, -37, -123, 108, - 28, -48, 193, 197, - 173, -33, 37, 73, - -57, 256, 137, -58, - -430, -228, 217, -51, - -10, -58, -6, 22, - 104, 61, -119, 169, - 144, 16, -46, -394, - 60, 454, -80, -298, - -65, 25, 0, -24, - -65, -417, 465, 276, - -3, -194, -13, 130, - 19, -6, -21, -24, - -180, -53, -85, 20, - 118, 147, 113, -75, - -289, 226, -122, 227, - 270, 125, 109, 197, - 125, 138, 44, 60, - 25, -55, -167, -32, - -139, -193, -173, -316, - 287, -208, 253, 239, - 27, -80, -188, -28, - -182, -235, 156, -117, - 128, -48, -58, -226, - 172, 181, 167, 19, - 62, 10, 2, 181, - 151, 108, -16, -11, - -78, -331, 411, 133, - 17, 104, 64, -184, - 24, -30, -3, -283, - 121, 204, -8, -199, - -21, -80, -169, -157, - -191, -136, 81, 155, - 14, -131, 244, 74, - -57, -47, -280, 347, - 111, -77, -128, -142, - -194, -125, -6, -68, - 91, 1, 23, 14, - -154, -34, 23, -38, - -343, 503, 146, -38, - -46, -41, 58, 31, - 63, -48, -117, 45, - 28, 1, -89, -5, - -44, -29, -448, 487, - 204, 81, 46, -106, - -302, 380, 120, -38, - -12, -39, 70, -3, - 25, -65, 30, -11, - 34, -15, 22, -115, - 0, -79, -83, 45, - 114, 43, 150, 36, - 233, 149, 195, 5, - 25, -52, -475, 274, - 28, -39, -8, -66, - -255, 258, 56, 143, - -45, -190, 165, -60, - 20, 2, 125, -129, - 51, -8, -335, 288, - 38, 59, 25, -42, - 23, -118, -112, 11, - -55, -133, -109, 24, - -105, 78, -64, -245, - 202, -65, -127, 162, - 40, -94, 89, -85, - -119, -103, 97, 9, - -70, -28, 194, 86, - -112, -92, -114, 74, - -49, 46, -84, -178, - 113, 52, -205, 333, - 88, 222, 56, -55, - 13, 86, 4, -77, - 224, 114, -105, 112, - 125, -29, -18, -144, - 22, -58, -99, 28, - 114, -66, -32, -169, - -314, 285, 72, -74, - 179, 28, -79, -182, - 13, -55, 147, 13, - 12, -54, 31, -84, - -17, -75, -228, 83, - -375, 436, 110, -63, - -27, -136, 169, -56, - -8, -171, 184, -42, - 148, 68, 204, 235, - 110, -229, 91, 171, - -43, -3, -26, -99, - -111, 71, -170, 202, - -67, 181, -37, 109, - -120, 3, -55, -260, - -16, 152, 91, 142, - 42, 44, 134, 47, - 17, -35, 22, 79, - -169, 41, 46, 277, - -93, -49, -126, 37, - -103, -34, -22, -90, - -134, -205, 92, -9, - 1, -195, -239, 45, - 54, 18, -23, -1, - -80, -98, -20, -261, - 306, 72, 20, -89, - -217, 11, 6, -82, - 89, 13, -129, -89, - 83, -71, -55, 130, - -98, -146, -27, -57, - 53, 275, 17, 170, - -5, -54, 132, -64, - 72, 160, -125, -168, - 72, 40, 170, 78, - 248, 116, 20, 84, - 31, -34, 190, 38, - 13, -106, 225, 27, - -168, 24, -157, -122, - 165, 11, -161, -213, - -12, -51, -101, 42, - 101, 27, 55, 111, - 75, 71, -96, -1, - 65, -277, 393, -26, - -44, -68, -84, -66, - -95, 235, 179, -25, - -41, 27, -91, -128, - -222, 146, -72, -30, - -24, 55, -126, -68, - -58, -127, 13, -97, - -106, 174, -100, 155, - 101, -146, -21, 261, - 22, 38, -66, 65, - 4, 70, 64, 144, - 59, 213, 71, -337, - 303, -52, 51, -56, - 1, 10, -15, -5, - 34, 52, 228, 131, - 161, -127, -214, 238, - 123, 64, -147, -50, - -34, -127, 204, 162, - 85, 41, 5, -140, - 73, -150, 56, -96, - -66, -20, 2, -235, - 59, -22, -107, 150, - -16, -47, -4, 81, - -67, 167, 149, 149, - -157, 288, -156, -27, - -8, 18, 83, -24, - -41, -167, 158, -100, - 93, 53, 201, 15, - 42, 266, 278, -12, - -6, -37, 85, 6, - 20, -188, -271, 107, - -13, -80, 51, 202, - 173, -69, 78, -188, - 46, 4, 153, 12, - -138, 169, 5, -58, - -123, -108, -243, 150, - 10, -191, 246, -15, - 38, 25, -10, 14, - 61, 50, -206, -215, - -220, 90, 5, -149, - -219, 56, 142, 24, - -376, 77, -80, 75, - 6, 42, -101, 16, - 56, 14, -57, 3, - -17, 80, 57, -36, - 88, -59, -97, -19, - -148, 46, -219, 226, - 114, -4, -72, -15, - 37, -49, -28, 247, - 44, 123, 47, -122, - -38, 17, 4, -113, - -32, -224, 154, -134, - 196, 71, -267, -85, - 28, -70, 89, -120, - 99, -2, 64, 76, - -166, -48, 189, -35, - -92, -169, -123, 339, - 38, -25, 38, -35, - 225, -139, -50, -63, - 246, 60, -185, -109, - -49, -53, -167, 51, - 149, 60, -101, -33, - 25, -76, 120, 32, - -30, -83, 102, 91, - -186, -261, 131, -197 + -117, -106, -94, -81, + -65, -52, -37, -22, + -5, 11, 27, 42, + 59, 75, 91, 106, + -120, -116, -100, -84, + -67, -49, -32, -16, + 0, 15, 30, 46, + 62, 77, 94, 109, + -121, -116, -102, -85, + -71, -58, -39, -24, + -5, 10, 29, 45, + 61, 77, 92, 107, + -120, -116, -94, -83, + -69, -57, -46, -25, + -7, 10, 27, 42, + 58, 75, 91, 107, + -114, -109, -94, -79, + -66, -52, -35, -18, + -4, 9, 26, 40, + 53, 65, 81, 92, + -114, -108, -96, -74, + -62, -50, -34, -18, + 0, 18, 33, 47, + 61, 77, 94, 107, + -116, -109, -99, -84, + -71, -60, -44, -30, + -9, 5, 18, 33, + 52, 70, 88, 106, + -119, -114, -99, -89, + -71, -60, -50, -37, + -4, 12, 28, 46, + 60, 77, 91, 106, + -113, -109, -87, -78, + -67, -52, -40, -19, + -8, 12, 29, 43, + 58, 75, 94, 113, + -119, -114, -88, -77, + -63, -49, -36, -23, + 1, 17, 33, 51, + 68, 81, 97, 109, + -119, -114, -101, -88, + -71, -57, -42, -16, + -1, 11, 24, 38, + 54, 69, 90, 110, + -116, -103, -86, -73, + -57, -43, -27, -13, + 2, 16, 31, 45, + 61, 76, 92, 108, + -116, -112, -100, -77, + -68, -51, -41, -22, + -11, 0, 16, 37, + 56, 72, 88, 104, + -118, -113, -96, -84, + -69, -55, -42, -30, + -12, 17, 33, 51, + 70, 83, 98, 110, + -109, -104, -92, -80, + -67, -56, -41, -28, + -13, 0, 14, 28, + 43, 60, 85, 104, + -112, -107, -95, -82, + -71, -57, -45, -26, + -11, 1, 27, 41, + 53, 66, 84, 104, + -115, -111, -99, -92, + -63, -52, -39, -24, + -13, 5, 27, 42, + 60, 78, 93, 109, + -112, -108, -96, -89, + -77, -51, -41, -22, + -11, 13, 31, 44, + 57, 72, 87, 105, + -111, -107, -95, -87, + -77, -49, -38, -24, + -10, 0, 15, 30, + 54, 75, 93, 107, + -107, -103, -93, -74, + -52, -44, -31, -16, + -3, 10, 33, 45, + 58, 71, 85, 98, + -115, -111, -98, -72, + -60, -49, -35, -24, + 1, 11, 25, 38, + 56, 81, 98, 112, + -116, -112, -102, -70, + -59, -49, -36, -25, + -7, 5, 17, 30, + 48, 66, 87, 103, + -113, -109, -94, -86, + -75, -64, -52, -24, + -14, 6, 23, 43, + 61, 77, 92, 108, + -118, -112, -100, -90, + -65, -53, -39, -22, + 6, 18, 32, 49, + 67, 81, 97, 109, + -116, -109, -99, -80, + -69, -55, -41, -27, + -11, 3, 23, 40, + 61, 80, 101, 113, + -110, -106, -92, -84, + -73, -42, -31, -17, + -1, 10, 26, 37, + 51, 76, 99, 113, + -116, -110, -93, -75, + -57, -41, -21, -6, + 10, 25, 40, 54, + 68, 82, 96, 110, + -116, -111, -100, -92, + -81, -46, -32, -19, + -5, 7, 25, 42, + 58, 74, 92, 107, + -112, -109, -86, -78, + -68, -56, -45, -22, + -13, -1, 13, 32, + 58, 78, 91, 107, + -108, -104, -89, -76, + -66, -52, -38, -26, + -7, 4, 18, 30, + 43, 74, 98, 112, + -114, -110, -82, -72, + -61, -50, -37, -20, + -11, 1, 17, 46, + 62, 78, 93, 112, + -112, -108, -99, -77, + -66, -58, -33, -22, + -11, 13, 25, 35, + 47, 64, 87, 108, + -113, -109, -96, -70, + -59, -49, -35, -24, + -6, 7, 19, 34, + 65, 79, 94, 106, + -115, -111, -96, -85, + -72, -59, -47, -33, + -20, -8, 8, 35, + 56, 74, 92, 110, + -111, -108, -92, -65, + -54, -45, -31, -20, + -2, 11, 23, 34, + 47, 63, 96, 114, + -113, -108, -98, -87, + -79, -68, -32, -19, + -5, 12, 25, 41, + 60, 77, 96, 109, + -115, -109, -96, -82, + -58, -48, -34, -17, + -4, 9, 36, 50, + 65, 79, 97, 109, + -115, -110, -100, -88, + -56, -45, -34, -21, + -7, 7, 24, 37, + 50, 64, 86, 107, + -104, -98, -88, -77, + -60, -51, -37, -18, + -3, 8, 25, 40, + 53, 68, 91, 107, + -118, -113, -97, -85, + -74, -62, -51, -40, + -25, 4, 24, 40, + 57, 75, 92, 109, + -107, -103, -92, -83, + -74, -62, -28, -18, + -4, 9, 22, 34, + 50, 67, 87, 107, + -116, -112, -75, -67, + -56, -45, -31, -16, + -5, 10, 30, 45, + 63, 79, 96, 111, + -106, -102, -88, -77, + -68, -52, -38, -25, + -4, 7, 23, 36, + 66, 84, 98, 111, + -103, -99, -87, -76, + -66, -56, -29, -13, + 0, 14, 31, 42, + 57, 71, 85, 96, + -114, -111, -91, -58, + -47, -38, -26, -14, + 3, 13, 26, 40, + 62, 80, 96, 110, + -114, -110, -90, -83, + -72, -64, -36, -24, + -13, 6, 28, 49, + 66, 81, 97, 112, + -109, -105, -91, -82, + -71, -51, -38, -24, + -10, 1, 20, 49, + 64, 78, 91, 106, + -111, -107, -90, -82, + -70, -60, -49, -12, + 0, 11, 25, 37, + 60, 82, 101, 114, + -111, -107, -93, -72, + -42, -30, -20, -8, + 4, 16, 34, 46, + 58, 70, 85, 98, + -112, -109, -80, -65, + -56, -44, -33, -17, + -3, 8, 20, 31, + 49, 79, 98, 112, + -104, -98, -84, -72, + -59, -45, -31, -18, + -1, 12, 31, 47, + 64, 81, 98, 110, + -110, -106, -92, -79, + -70, -59, -49, -39, + -1, 11, 22, 35, + 52, 69, 89, 109, + -113, -109, -101, -95, + -56, -44, -29, -16, + -2, 18, 33, 48, + 63, 78, 95, 110, + -109, -106, -94, -87, + -74, -41, -29, -14, + 1, 13, 28, 47, + 69, 84, 99, 111, + -115, -110, -101, -84, + -50, -32, -22, -11, + 1, 13, 30, 45, + 58, 72, 89, 107, + -106, -102, -89, -75, + -64, -55, -44, -34, + -13, 16, 32, 43, + 59, 73, 86, 100, + -111, -107, -94, -70, + -55, -46, -33, -21, + -7, 5, 19, 31, + 43, 55, 70, 103, + -102, -97, -80, -71, + -60, -49, -36, -24, + -8, 4, 19, 32, + 48, 63, 79, 100, + -113, -109, -90, -76, + -66, -53, -41, -29, + -16, -7, 5, 15, + 42, 69, 89, 108, + -108, -105, -93, -85, + -76, -62, -23, -8, + 4, 18, 33, 45, + 60, 74, 90, 105, + -114, -110, -89, -61, + -52, -42, -30, -18, + -4, 13, 26, 39, + 53, 67, 81, 96, + -99, -95, -86, -77, + -69, -60, -32, -15, + -2, 15, 35, 47, + 64, 80, 96, 110, + -115, -105, -80, -61, + -43, -27, -14, -1, + 13, 26, 40, 53, + 67, 80, 95, 110, + -100, -91, -72, -59, + -48, -38, -25, -13, + 1, 15, 28, 39, + 58, 75, 91, 105, + 0, 0, 0, -1, + -2, -2, -2, -4, + -5, -5, -7, -8, + -5, -2, 0, 1, + -1, -1, -3, -6, + -8, -2, -1, -2, + 1, 2, 3, 4, + 3, 3, 2, 1, + -3, -3, -6, 4, + 2, 1, -1, -2, + 0, 0, -1, 1, + 0, 1, 0, 0, + -2, -2, 9, 7, + 4, 3, 1, 1, + 0, 0, -2, -1, + -2, -2, 0, -1, + -2, -2, -1, -2, + -2, 1, 0, 0, + -1, -2, -3, -1, + -3, -2, -5, -6, + -1, -1, -4, -8, + 3, 2, 1, 3, + 1, 1, -1, 1, + 2, 3, 3, 1, + 0, 0, -2, -4, + -5, -7, -9, 4, + 2, 0, 1, 0, + -2, -1, 0, 0, + -3, -3, -1, 9, + 7, 6, 5, 4, + 3, 3, 4, 4, + 3, 3, 2, 1, + 8, 8, 6, 3, + 2, 0, 2, -1, + 0, 1, 1, 0, + -1, 0, 1, 0, + 2, 2, 3, 1, + 1, 1, 0, 6, + 6, 6, 7, 6, + 4, 3, 2, 0, + 1, 1, 0, -1, + -3, -4, -7, -10, + 0, 0, -1, 2, + 3, 2, 3, 2, + -1, 0, -1, -2, + -4, -5, 8, 5, + 3, 3, 1, -1, + -3, -3, -1, 0, + 2, 2, 2, 2, + 1, 1, 0, 0, + 0, 0, -2, -3, + -6, -10, -10, -1, + 1, 1, 1, -1, + -1, -2, -3, -5, + -8, -9, 4, 3, + 1, 1, 0, 1, + 0, 0, -2, -3, + 10, 9, 7, 4, + 2, 2, 1, 0, + -1, -3, -3, -2, + 2, 2, 2, 1, + 0, 1, 1, 0, + -1, 0, -2, -4, + 9, 7, 4, 1, + -1, -1, -2, -2, + -3, -3, -3, -1, + -2, -4, -3, -2, + 0, -1, 0, 1, + 0, 0, 3, 4, + 3, 2, 1, 1, + 0, -2, -3, -5, + -6, -2, -1, 0, + -2, -2, -4, -4, + 4, 2, 1, 1, + 0, 0, 0, 0, + 0, 1, 0, 0, + 1, 1, 0, -2, + -4, 5, 4, 3, + 4, 1, 0, 0, + 0, -1, 0, 0, + 3, 3, 2, 1, + 0, -1, -1, 0, + -1, -3, 0, 3, + 3, 3, 3, 3, + 0, 0, 1, 0, + 0, -3, -3, -5, + -7, 5, 3, 1, + 0, 0, 0, 0, + 1, 1, 1, 2, + 1, 0, 1, 2, + 1, 0, 3, 3, + 1, -2, -6, -7, + -1, -1, 1, 1, + 0, -1, -1, -1, + 7, 5, 3, 2, + 3, 2, 3, 2, + -2, -2, -2, 0, + -1, 0, -2, 5, + 2, 2, 2, 0, + 0, 0, -1, -1, + 0, 0, -1, -2, + -3, -5, 4, 1, + 1, 1, -2, -1, + 0, 2, 1, 0, + 2, 2, 0, -3, + 3, 2, 1, 1, + -1, -1, -1, -2, + -1, 0, -2, -2, + -1, -1, 1, 3, + 2, 2, 0, -1, + -2, -2, -4, -2, + 2, 2, 2, 1, + -1, -1, -1, -2, + -2, -1, -2, -2, + -3, -4, 4, 3, + 2, 2, -1, 0, + 1, 1, 1, 0, + -1, -1, -3, -6, + 4, 2, 0, -1, + -1, -1, -1, -1, + 0, 0, 3, 3, + 2, 2, 3, 1, + -1, 4, 3, 3, + 1, 0, -1, 1, + 1, 1, 1, 1, + 0, 0, -1, 0, + -1, -2, -1, -1, + -4, -6, 4, 2, + 0, -1, -4, 3, + 2, 0, 1, -1, + 0, 1, 0, -2, + -2, -1, -1, -1, + -1, -1, -1, -2, + -3, 3, 0, 0, + -1, -1, -1, -2, + -1, -1, 0, 1, + 1, 0, 1, 0, + -1, -2, -4, 4, + 2, 0, 0, -1, + 1, 1, 1, 1, + 1, 1, 0, -2, + -2, -3, 2, 0, + 0, 2, 2, 1, + 0, -3, -2, 1, + 0, 0, -1, 0, + 1, 2, 1, 0, + 2, 1, 3, 4, + 3, 1, 1, -1, + -2, -2, 4, 1, + 1, 0, 1, -1, + -2, -1, 0, -1, + 0, -1, 0, 0, + 1, 1, 1, 0, + 1, 1, 0, 0, + 0, 0, 1, -2, + -4, 5, 4, 2, + 1, 2, 0, 0, + 1, 0, 0, -3, + -1, -2, -5, 3, + 3, 0, -1, -2, + -1, -1, 0, -1, + -1, 0, 0, -1, + 2, 2, 0, -1, + -3, -2, -1, -2, + 0, 0, 1, 2, + 0, -1, -3, 1, + -1, -2, 2, 1, + -1, -2, -1, -1, + 0, 0, 1, 0, + -1, 1, -1, 2, + 1, 0, -3, 3, + 1, 2, 2, 0, + 0, 0, -2, 1, + 0, -1, 0, 0, + -2, 4, 2, 1, + 3, 1, 1, 0, + 0, 0, -1, -2, + 2, 1, 0, -2, + -1, 1, 0, 0, + -1, -1, 2, 2, + 1, 1, 1, 1, + 1, 1, 1, 1, + 2, 0, -2, -2, + 1, -1, -4, 2, + -1, -1, -1, -1, + -1, -1, 4, 1, + -1, -3, 1, 2, + 0, 0, 1, 1, + 1, 1, 0, 0, + 0, 0, -1, -2, + -1, -2, 0, -4, + 2, 4, 0, -2, + 1, 0, 0, -1, + -1, -2, -2, 1, + -2, 1, 1, -1, + -2, -1, -1, 0, + 1, 1, 0, 1, + 0, 2, 1, 0, + 0, -2, 1, 0, + -2, 0, 1, -2, + 0, -1, 0, 1, + 0, 0, 1, -1, + -1, 0, -3, 2, + -1, -2, 1, 1, + 0, -1, 1, 0, + 1, 1, 0, 0, + 1, -1, 2, 1, + 1, -1, -2, 3, + 0, -1, 1, 0, + 0, -1, 3, 1, + 1, 1, 0, 1, + 2, 2, -1, -3, + 0, -1, -3, 0, + 0, -1, -1, -1, + 2, -1, 0, 1, + 0, 2, 1, 1, + 0, 0, 0, -1, + 1, 0, 0, 1, + 0, 0, -1, -3, + 3, 0, 2, 1, + -3, 4, 1, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 1, 0, 0, 0, + 0, 0, 0, -1, + 0, -1, -1, 0, + 0, -2, -1, 1, + 0, -1, -2, -1, + 0, 2, 0, 0, + 1, -1, 0, 2, + 1, 0, -1, 0, + -2, 0, 0, 0, + -1, -1, 0, -1, + 0, -1, 0, 0, + -1, 1, -1, -2, + 0, 2, -2, 0, + 1, 0, 0, -1, + -2, 2, 0, 0, + 1, 2, 1, 1, + 0, 0, -1, 0, + 0, 0, 2, 0, + 0, -2, 0, -2, + 1, 1, 0, 1, + 0, 1, 1, 1, + 0, 0, -2, 1, + -1, 1, 1, -1, + 1, -1, 0, -2, + 0, -1, 2, 2, + -1, -1, 1, 1, + 1, 1, 0, 1, + 0, 1, 0, 0, + 0, -1, 2, -3, + 1, 0, 0, 1, + 2, 0, 0, -1, + -2, -2, 2, 0, + 0, 0, 0, 1, + 0, -1, 0, 2, + 0, 1, -1, -1, + 1, 0, -1, 0, + -1, 1, -1, 0, + -1, 0, -3, 0, + 0, 0, 0, 1, + -1, 0, 0, 0, + 1, -1, 0, 0, + 1, 0, 0, 0, + 0, -1, 2, 2, + 1, 1, 1, 0, + -1, 0, 1, 1, + 0, -1, 0, 0, + -2, 0, -1, 0, + -1, 0, 1, 0, + 0, 1, 2, 1, + 1, 0, 1, 0, + -1, 1, 1, 0, + -2, 0, -1, -1, + 1, -1, -1, -1, + 0, 0, 0, -2, + 2, 0, -1, 0, + -1, 1, 0, 1, + 0, 1, 0, -1, + 1, 1, 0, 0, + -1, -1, -1, -1, + 1, 0, 0, 0, + 1, -1, 0, 0, + -2, 1, 1, 0, + 1, 0, 1, -1, + 0, -1, 0, 0, + 0, 0, 0, 0, + -1, 0, 1, 2, + -1, 0, 1, 1, + 0, -1, 0, 0, + 1, 0, 0, -1, + 1, 1, -1, 0, + -1, 0, 0, 0, + 0, -1, 0, 1, + -1, 1, -1, 1, + 1, 1, 1, 1, + 0, 1, 0, 0, + 0, 2, 0, -1, + 0, 0, 1, 1, + -2, 1, 0, 1, + 0, 1, -2, -1, + -1, 0, -1, 0, + 0, 0, 0, 0, + -2, -1, 0, -1, + 0, -1, 0, 1, + 1, 1, -1, 0, + 1, -1, 0, 1, + 0, -1, -1, 0, + 0, 0, 0, -1, + 0, 1, 1, 2, + -2, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 1, -1, 2, -2, + 0, 0, -1, -1, + 0, 0, 2, -1, + 0, 1, -1, 0, + 1, -1, -1, -1, + -1, 0, 0, 0, + 0, -1, 0, 0, + 1, 2, 1, 1, + -1, -1, 0, 0, + -1, 1, 0, 1, + 1, 0, 0, 0, + 0, 0, -2, 1, + 0, 0, 1, 1, + 1, 1, 1, 1, + 1, 0, -1, 0, + 2, 0, 0, 0, + 2, 0, -1, 0, + 0, -1, 0, -1, + 1, 0, -1, 0, + -1, -1, 0, 0, + 0, 1, -2, 0, + 0, 0, 1, -1, + 0, -1, 0, 1, + 1, -2, 0, 0, + -1, -1, -1, -1, + 0, 0, 0, 0, + 0, 0, -1, -1, + 0, 1, 2, -2, + 0, 0, 0, 0, + 1, 1, 0, 0, + 0, -1, 0, 0, + 0, 0, 0, -2, + -1, 0, 0, -1, + 1, -2, -1, 0, + 0, 1, 0, -1, + 0, 0, 1, 0, + -1, 0, 1, 0, + 1, -1, 1, 0 }; const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB0_16_Stage_info[ NLSF_MSVQ_CB0_16_STAGES ] = { - { 128, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 0 ] }, - { 16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 128 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 128 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 144 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 144 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 152 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 152 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 160 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 160 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 168 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 168 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 176 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 176 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 184 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 184 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 192 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 192 ] }, - { 16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q15[ 16 * 200 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q5[ 200 ] } + { 64, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 0 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 0 ] }, + { 16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 64 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 64 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 80 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 80 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 88 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 88 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 96 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 96 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 104 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 104 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 112 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 112 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 120 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 120 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 128 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 128 ] }, + { 16, &SKP_Silk_NLSF_MSVQ_CB0_16_Q8[ 16 * 136 ], &SKP_Silk_NLSF_MSVQ_CB0_16_rates_Q4[ 136 ] } }; const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB0_16 = diff --git a/src_common/SKP_Silk_tables_NLSF_CB0_16.h b/src_common/SKP_Silk_tables_NLSF_CB0_16.h index b0dd766f972ed9e0b3cf1c613677dea3878de696..ff2497b3c80e88dea82e2828c3c9f170b2590a24 100644 --- a/src_common/SKP_Silk_tables_NLSF_CB0_16.h +++ b/src_common/SKP_Silk_tables_NLSF_CB0_16.h @@ -36,7 +36,7 @@ extern "C" #endif #define NLSF_MSVQ_CB0_16_STAGES 10 -#define NLSF_MSVQ_CB0_16_VECTORS 216 +#define NLSF_MSVQ_CB0_16_VECTORS 152 /* NLSF codebook entropy coding tables */ extern const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB0_16_CDF[ NLSF_MSVQ_CB0_16_VECTORS + NLSF_MSVQ_CB0_16_STAGES ]; diff --git a/src_common/SKP_Silk_tables_NLSF_CB1_10.c b/src_common/SKP_Silk_tables_NLSF_CB1_10.c index 2682f37ced6f7bc2cdd1a5db4cc7443c505a59f6..0e7364e1a0c34a196ac8b082334bb38295b94fa1 100644 --- a/src_common/SKP_Silk_tables_NLSF_CB1_10.c +++ b/src_common/SKP_Silk_tables_NLSF_CB1_10.c @@ -28,91 +28,101 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /**********************************************/ /* This file has been automatically generated */ /* */ -/* ROM usage: 0.19 + 1.61 kB */ +/* ROM usage: 0.22 + 0.90 kB */ /**********************************************/ #include "SKP_Silk_structs.h" +#include "SKP_Silk_tables.h" #include "SKP_Silk_tables_NLSF_CB1_10.h" const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ NLSF_MSVQ_CB1_10_VECTORS + NLSF_MSVQ_CB1_10_STAGES ] = { 0, - 17096, - 24130, - 28997, - 33179, - 36696, - 40213, - 42493, - 44252, - 45973, - 47551, - 49095, - 50542, - 51898, - 53196, - 54495, - 55685, - 56851, - 57749, - 58628, - 59435, - 60207, - 60741, - 61220, - 61700, - 62179, - 62659, - 63138, - 63617, - 64097, - 64576, - 65056, + 21247, + 28440, + 34489, + 38585, + 41021, + 43353, + 45401, + 47050, + 48562, + 49890, + 51162, + 52379, + 53597, + 54536, + 55435, + 56260, + 57049, + 57805, + 58562, + 59286, + 59979, + 60588, + 61122, + 61613, + 62103, + 62593, + 63084, + 63574, + 64064, + 64554, + 65045, 65535, 0, - 20378, - 33032, - 40395, - 46721, - 51707, - 56585, - 61157, + 34067, + 42961, + 48025, + 52103, + 55532, + 58961, + 62391, 65535, 0, - 15055, - 25472, - 35447, - 42501, - 48969, - 54773, - 60212, + 30146, + 40804, + 46615, + 50906, + 55016, + 58624, + 62080, 65535, 0, - 12069, - 22440, - 32812, - 40145, - 46870, - 53595, - 59630, + 31530, + 38758, + 44096, + 48990, + 53478, + 57776, + 62074, 65535, 0, - 10839, - 19954, - 27957, - 35961, - 43965, - 51465, - 58805, + 14400, + 25503, + 35253, + 44194, + 52756, + 58308, + 62234, 65535, 0, - 8933, - 17674, - 26415, - 34785, - 42977, - 50820, - 58496, + 26248, + 35939, + 44449, + 49733, + 53988, + 58062, + 61799, + 65535, + 0, + 20097, + 31540, + 38344, + 44584, + 50823, + 56798, + 62277, 65535 }; @@ -123,446 +133,493 @@ const SKP_uint16 * const SKP_Silk_NLSF_MSVQ_CB1_10_CDF_start_ptr[ NLSF_MSVQ_CB1_ &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 42 ], &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 51 ], &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 60 ], - &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 69 ] + &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 69 ], + &SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ 78 ] }; const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_CDF_middle_idx[ NLSF_MSVQ_CB1_10_STAGES ] = { - 5, - 3, 4, + 2, + 2, + 2, 4, - 5, - 5 + 3, + 3 }; -const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ NLSF_MSVQ_CB1_10_VECTORS ] = +const SKP_uint8 SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q4[ NLSF_MSVQ_CB1_10_VECTORS ] = { - 62, 103, - 120, 127, - 135, 135, - 155, 167, - 168, 172, - 173, 176, - 179, 181, - 181, 185, - 186, 198, - 199, 203, - 205, 222, - 227, 227, - 227, 227, - 227, 227, - 227, 227, - 227, 227, - 54, 76, - 101, 108, - 119, 120, - 123, 125, - 68, 85, - 87, 103, - 107, 112, - 115, 116, - 78, 85, - 85, 101, - 105, 105, - 110, 111, - 83, 91, - 97, 97, - 97, 100, - 101, 105, - 92, 93, - 93, 95, - 96, 98, - 99, 103 + 26, 51, + 55, 64, + 76, 77, + 80, 85, + 87, 90, + 91, 92, + 92, 98, + 99, 101, + 102, 103, + 103, 104, + 105, 108, + 111, 113, + 113, 113, + 113, 113, + 113, 113, + 113, 113, + 15, 46, + 59, 64, + 68, 68, + 68, 70, + 18, 42, + 56, 63, + 64, 67, + 68, 68, + 17, 51, + 58, 60, + 62, 63, + 63, 68, + 35, 41, + 44, 46, + 47, 57, + 65, 69, + 21, 44, + 47, 58, + 63, 64, + 66, 66, + 27, 40, + 52, 54, + 54, 55, + 57, 69 }; const SKP_int SKP_Silk_NLSF_MSVQ_CB1_10_ndelta_min_Q15[ 10 + 1 ] = { - 462, + 293, + 32, + 225, + 280, + 153, + 23, + 13, + 14, + 9, 3, - 64, - 74, - 98, - 50, - 97, - 68, - 120, - 53, - 639 + 688 }; -const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * NLSF_MSVQ_CB1_10_VECTORS ] = +const SKP_int8 SKP_Silk_NLSF_MSVQ_CB1_10_Q8[ 10 * NLSF_MSVQ_CB1_10_VECTORS ] = { - 1877, 4646, - 7712, 10745, - 13964, 17028, - 20239, 23182, - 26471, 29287, - 1612, 3278, - 7086, 9975, - 13228, 16264, - 19596, 22690, - 26037, 28965, - 2169, 3830, - 6460, 8958, - 11960, 14750, - 18408, 21659, - 25018, 28043, - 3680, 6024, - 8986, 12256, - 15201, 18188, - 21741, 24460, - 27484, 30059, - 2584, 5187, - 7799, 10902, - 13179, 15765, - 19017, 22431, - 25891, 28698, - 3731, 5751, - 8650, 11742, - 15090, 17407, - 20391, 23421, - 26228, 29247, - 2107, 6323, - 8915, 12226, - 14775, 17791, - 20664, 23679, - 26829, 29353, - 1677, 2870, - 5386, 8077, - 11817, 15176, - 18657, 22006, - 25513, 28689, - 2111, 3625, - 7027, 10588, - 14059, 17193, - 21137, 24260, - 27577, 30036, - 2428, 4010, - 5765, 9376, - 13805, 15821, - 19444, 22389, - 25295, 29310, - 2256, 4628, - 8377, 12441, - 15283, 19462, - 22257, 25551, - 28432, 30304, - 2352, 3675, - 6129, 11868, - 14551, 16655, - 19624, 21883, - 26526, 28849, - 5243, 7248, - 10558, 13269, - 15651, 17919, - 21141, 23827, - 27102, 29519, - 4422, 6725, - 10449, 13273, - 16124, 19921, - 22826, 26061, - 28763, 30583, - 4508, 6291, - 9504, 11809, - 13827, 15950, - 19077, 22084, - 25740, 28658, - 2540, 4297, - 8579, 13578, - 16634, 19101, - 21547, 23887, - 26777, 29146, - 3377, 6358, - 10224, 14518, - 17905, 21056, - 23637, 25784, - 28161, 30109, - 4177, 5942, - 8159, 10108, - 12130, 15470, - 20191, 23326, - 26782, 29359, - 2492, 3801, - 6144, 9825, - 16000, 18671, - 20893, 23663, - 25899, 28974, - 3011, 4727, - 6834, 10505, - 12465, 14496, - 17065, 20052, - 25265, 28057, - 4149, 7197, - 12338, 15076, - 18002, 20190, - 22187, 24723, - 27083, 29125, - 2975, 4578, - 6448, 8378, - 9671, 13225, - 19502, 22277, - 26058, 28850, - 4102, 5760, - 7744, 9484, - 10744, 12308, - 14677, 19607, - 24841, 28381, - 4931, 9287, - 12477, 13395, - 13712, 14351, - 16048, 19867, - 24188, 28994, - 4141, 7867, - 13140, 17720, - 20064, 21108, - 21692, 22722, - 23736, 27449, - 4011, 8720, - 13234, 16206, - 17601, 18289, - 18524, 19689, - 23234, 27882, - 3420, 5995, - 11230, 15117, - 15907, 16783, - 17762, 23347, - 26898, 29946, - 3080, 6786, - 10465, 13676, - 18059, 23615, - 27058, 29082, - 29563, 29905, - 3038, 5620, - 9266, 12870, - 18803, 19610, - 20010, 20802, - 23882, 29306, - 3314, 6420, - 9046, 13262, - 15869, 23117, - 23667, 24215, - 24487, 25915, - 3469, 6963, - 10103, 15282, - 20531, 23240, - 25024, 26021, - 26736, 27255, - 3041, 6459, - 9777, 12896, - 16315, 19410, - 24070, 29353, - 31795, 32075, - -200, -134, - -113, -204, - -347, -440, - -352, -211, - -418, -172, - -313, 59, - 495, 772, - 721, 614, - 334, 444, - 225, 242, - 161, 16, - 274, 564, - -73, -188, - -395, -171, - 777, 508, - 1340, 1145, - 699, 196, - 223, 173, - 90, 25, - -26, 18, - 133, -105, - -360, -277, - 859, 634, - 41, -557, - -768, -926, - -601, -1021, - -1189, -365, - 225, 107, - 374, -50, - 433, 417, - 156, 39, - -597, -1397, - -1594, -592, - -485, -292, - 253, 87, - -0, -6, - -25, -345, - -240, 120, - 1261, 946, - 166, -277, - 241, 167, - 170, 429, - 518, 714, - 602, 254, - 134, 92, - -152, -324, - -394, 49, - -151, -304, - -724, -657, - -162, -369, - -35, 3, - -2, -312, - -200, -92, - -227, 242, - 628, 565, - -124, 1056, - 770, 101, - -84, -33, - 4, -192, - -272, 5, - -627, -977, - 419, 472, - 53, -103, - 145, 322, - -95, -31, - -100, -303, - -560, -1067, - -413, 714, - 283, 2, - -223, -367, - 523, 360, - -38, -115, - 378, -591, - -718, 448, - -481, -274, - 180, -88, - -581, -157, - -696, -1265, - 394, -479, - -23, 124, - -43, 19, - -113, -236, - -412, -659, - -200, 2, - -69, -342, - 199, 55, - 58, -36, - -51, -62, - 507, 507, - 427, 442, - 36, 601, - -141, 68, - 274, 274, - 68, -12, - -4, 71, - -193, -464, - -425, -383, - 408, 203, - -337, 236, - 410, -59, - -25, -341, - -449, 28, - -9, 90, - 332, -14, - -905, 96, - -540, -242, - 679, -59, - 192, -24, - 60, -217, - 5, -37, - 179, -20, - 311, 519, - 274, 72, - -326, -1030, - -262, 213, - 380, 82, - 328, 411, - -540, 574, - -283, 151, - 181, -402, - -278, -240, - -110, -227, - -264, -89, - -250, -259, - -27, 106, - -239, -98, - -390, 118, - 61, 104, - 294, 532, - 92, -13, - 60, -233, - 335, 541, - 307, -26, - -110, -91, - -231, -460, - 170, 201, - 96, -372, - 132, 435, - -302, 216, - -279, -41, - 74, 190, - 368, 273, - -186, -608, - -157, 159, - 12, 278, - 245, 307, - 25, -187, - -16, 55, - 30, -163, - 548, -307, - 106, -5, - 27, 330, - -416, 475, - 438, -235, - 104, 137, - 21, -5, - -300, -468, - 521, -347, - 170, -200, - -219, 308, - -122, -133, - 219, -16, - 359, 412, - -89, -111, - 48, 322, - 142, 177, - -286, -127, - -39, -63, - -42, -451, - 160, 308, - -57, 193, - -48, 74, - -346, 59, - -27, 27, - -469, -277, - -344, 282, - 262, 122, - 171, -249, - 27, 258, - 188, -3, - 67, -206, - -284, 291, - -117, -88, - -477, 375, - 50, 106, - 99, -182, - 438, -376, - -401, -49, - 119, -23, - -10, -48, - -116, -200, - -310, 121, - 73, 7, - 237, -226, - 139, -456, - 397, 35, - 3, -108, - 323, -75, - 332, 198, - -99, -21 + -113, -92, + -68, -43, + -20, 3, + 28, 52, + 78, 100, + -114, -101, + -75, -53, + -30, -7, + 20, 45, + 72, 96, + -98, -81, + -58, -33, + -10, 10, + 35, 58, + 82, 103, + -110, -99, + -80, -61, + -38, -15, + 12, 38, + 66, 89, + -115, -108, + -77, -49, + -21, 4, + 29, 53, + 79, 102, + -101, -81, + -55, -29, + -7, 23, + 47, 71, + 93, 110, + -100, -83, + -65, -44, + -25, -7, + 19, 45, + 72, 96, + -110, -100, + -85, -45, + -25, -8, + 22, 39, + 78, 97, + -115, -107, + -89, -69, + -36, -9, + 20, 45, + 72, 99, + -113, -99, + -69, -38, + -12, 16, + 44, 68, + 92, 109, + -109, -98, + -84, -60, + -19, -3, + 18, 43, + 61, 98, + -99, -77, + -46, -17, + 10, 35, + 55, 74, + 92, 106, + -105, -91, + -70, -42, + -1, 17, + 35, 58, + 75, 99, + -90, -77, + -53, -38, + -21, 0, + 28, 49, + 76, 97, + -110, -101, + -80, -29, + -8, 6, + 30, 48, + 82, 99, + -110, -92, + -55, -19, + 4, 25, + 43, 62, + 84, 101, + -101, -88, + -73, -58, + -45, -26, + 21, 46, + 71, 98, + -83, -67, + -40, -22, + -2, 19, + 41, 63, + 85, 103, + -112, -103, + -89, -62, + -8, 15, + 33, 56, + 74, 97, + -117, -73, + -56, -33, + -13, 11, + 34, 57, + 80, 101, + -110, -100, + -84, -72, + -59, -15, + 21, 45, + 76, 96, + -103, -90, + -72, -59, + -40, 1, + 32, 56, + 82, 98, + -107, -97, + -79, -54, + -37, -21, + -4, 22, + 71, 94, + -97, -67, + -27, -2, + 29, 44, + 58, 71, + 82, 98, + -89, -74, + -55, -45, + -30, -18, + -2, 23, + 65, 97, + -106, -82, + -56, -31, + -5, 34, + 59, 65, + 68, 78, + -107, -82, + -57, -31, + 20, 31, + 34, 35, + 68, 103, + -109, -83, + -56, -32, + -6, 18, + 49, 82, + 109, 116, + -103, -82, + -50, -17, + -6, 2, + 19, 56, + 83, 105, + -106, -82, + -54, -30, + -1, 32, + 41, 49, + 52, 98, + -98, -66, + -36, 0, + 5, 12, + 14, 26, + 64, 97, + -105, -80, + -53, -29, + 2, 30, + 76, 90, + 94, 96, + -2, -2, + -2, 0, + -1, -1, + -1, 0, + 0, 0, + 2, 2, + 3, 4, + 3, 5, + 7, 6, + 4, 2, + 8, 9, + 5, -2, + 1, 1, + 1, 0, + -2, -2, + 1, 1, + 2, -2, + -7, -11, + -11, 0, + -1, 0, + 1, 0, + -3, -2, + -6, -3, + 2, -4, + 10, 5, + -1, -3, + -5, -7, + 11, 7, + 4, -1, + 1, 1, + 0, 1, + 7, 10, + 3, -1, + -6, -2, + -3, -4, + 0, -1, + -2, -2, + 0, 3, + 0, -5, + -11, -10, + -1, 1, + 1, 1, + 1, 1, + 1, 1, + 1, 0, + 2, 1, + -2, -4, + -5, -3, + -3, -3, + -3, -3, + 3, 2, + 3, 5, + 4, 0, + -3, -9, + -5, -1, + 3, 2, + 2, -1, + -1, -1, + -2, 6, + 7, 6, + -2, -5, + -9, -4, + -1, -3, + -3, 1, + 2, 2, + -6, -9, + 6, 3, + 3, 1, + 2, 1, + -1, -1, + 3, 1, + -2, 2, + 4, -3, + 9, 3, + -3, 4, + 1, 0, + -1, -4, + -6, 11, + 4, 1, + 2, -1, + -1, -1, + -1, -2, + 0, 0, + 0, 0, + -1, 0, + 6, 3, + 1, 0, + 1, 1, + 1, -1, + 1, 2, + -5, 6, + 3, 2, + 3, 4, + 2, 1, + 0, 1, + 0, -1, + -2, 2, + 1, -1, + -6, -8, + 2, -1, + 0, -1, + 8, 1, + -5, 0, + -1, -1, + 0, 0, + 0, 0, + -2, 0, + -2, -8, + 3, 0, + 2, 2, + 1, 1, + 0, 0, + 1, 0, + -2, 10, + 1, -4, + -1, -4, + -6, 6, + 3, 4, + 4, 1, + -1, -2, + 0, 1, + 2, 1, + 1, 4, + 1, 1, + -1, -2, + 0, 4, + 2, 0, + -1, -2, + -1, -2, + 1, 0, + -1, -2, + -2, 1, + -1, -4, + 0, -1, + -1, -4, + 0, -1, + -2, -4, + -1, 0, + 3, 3, + 1, 1, + -1, -3, + 1, 1, + 1, 1, + -1, -2, + 4, 3, + 2, 0, + -1, -2, + 5, -1, + -3, 0, + -1, 0, + 0, -1, + 0, 0, + 0, -2, + 0, -1, + -7, 6, + 2, 0, + -2, 4, + -4, 1, + -1, 1, + 1, 0, + 1, -1, + 1, 2, + 2, 0, + 1, 1, + 0, 1, + -1, 1, + 1, -4, + 2, -1, + 0, -1, + -1, -1, + 0, -1, + -3, -1, + -2, 1, + 1, -3, + -1, 1, + 1, 1, + -2, 1, + 0, 1, + -5, 1, + -2, 1, + 1, 1, + -2, 0, + 0, 1, + -1, 0, + 5, -3, + 0, -3, + 2, 0, + -3, -2, + -2, 0, + 0, -1, + 2, 2, + 1, 0, + -4, -1, + 2, 1, + -1, -3, + -5, 1, + 1, 2, + -2, 0, + 1, 1, + 2, 2, + 1, 1, + 0, -1, + -2, -1, + 0, 0, + 0, 2, + 0, 0, + 1, -1, + 0, 3, + -2, -1, + 1, 0, + 0, 0, + 1, 0, + 0, 0, + 4, -1, + 1, -3, + 0, 1, + 1, 4, + 0, -1, + -1, 0, + -1, -1, + -2, -3, + -1, 0, + -1, 0, + 0, 1, + -3, 0, + -1, 2, + -4, 0, + 1, 1, + 1, 1, + 0, 0, + -2, -1, + 0, 0, + 3, -2, + -1, 1, + 1, 1, + 4, -1, + -1, 0, + 1, 0, + 0, 0, + 0, -1 }; const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB1_10_Stage_info[ NLSF_MSVQ_CB1_10_STAGES ] = { - { 32, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 0 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 0 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 32 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 32 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 40 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 40 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 48 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 48 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 56 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 56 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q15[ 10 * 64 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q5[ 64 ] } + { 32, &SKP_Silk_NLSF_MSVQ_CB1_10_Q8[ 10 * 0 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q4[ 0 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q8[ 10 * 32 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q4[ 32 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q8[ 10 * 40 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q4[ 40 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q8[ 10 * 48 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q4[ 48 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q8[ 10 * 56 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q4[ 56 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q8[ 10 * 64 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q4[ 64 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_10_Q8[ 10 * 72 ], &SKP_Silk_NLSF_MSVQ_CB1_10_rates_Q4[ 72 ] } }; const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB1_10 = diff --git a/src_common/SKP_Silk_tables_NLSF_CB1_10.h b/src_common/SKP_Silk_tables_NLSF_CB1_10.h index cdac82cb83396cb2a816685268e4cedc1d9c5469..f02eae13875049c9a6fa53830f588db082532444 100644 --- a/src_common/SKP_Silk_tables_NLSF_CB1_10.h +++ b/src_common/SKP_Silk_tables_NLSF_CB1_10.h @@ -35,8 +35,8 @@ extern "C" { #endif -#define NLSF_MSVQ_CB1_10_STAGES 6 -#define NLSF_MSVQ_CB1_10_VECTORS 72 +#define NLSF_MSVQ_CB1_10_STAGES 7 +#define NLSF_MSVQ_CB1_10_VECTORS 80 /* NLSF codebook entropy coding tables */ extern const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_10_CDF[ NLSF_MSVQ_CB1_10_VECTORS + NLSF_MSVQ_CB1_10_STAGES ]; diff --git a/src_common/SKP_Silk_tables_NLSF_CB1_16.c b/src_common/SKP_Silk_tables_NLSF_CB1_16.c index b7415b537ca4b756bfd2995b4b663817f1102cfa..0ef7a8d3448337347dd9d226b3959e60439ec2ae 100644 --- a/src_common/SKP_Silk_tables_NLSF_CB1_16.c +++ b/src_common/SKP_Silk_tables_NLSF_CB1_16.c @@ -28,127 +28,128 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /**********************************************/ /* This file has been automatically generated */ /* */ -/* ROM usage: 0.29 + 3.57 kB */ +/* ROM usage: 0.29 + 1.80 kB */ /**********************************************/ #include "SKP_Silk_structs.h" +#include "SKP_Silk_tables.h" #include "SKP_Silk_tables_NLSF_CB1_16.h" const SKP_uint16 SKP_Silk_NLSF_MSVQ_CB1_16_CDF[ NLSF_MSVQ_CB1_16_VECTORS + NLSF_MSVQ_CB1_16_STAGES ] = { 0, - 19099, - 26957, - 30639, - 34242, - 37546, - 40447, - 43287, - 46005, - 48445, - 49865, - 51284, - 52673, - 53975, - 55221, - 56441, - 57267, - 58025, - 58648, - 59232, - 59768, - 60248, - 60729, - 61210, - 61690, - 62171, - 62651, - 63132, - 63613, - 64093, - 64574, - 65054, + 17152, + 24057, + 28733, + 32040, + 34820, + 37262, + 39228, + 41194, + 42997, + 44723, + 46376, + 47959, + 49543, + 50994, + 52446, + 53777, + 54897, + 56016, + 57088, + 58071, + 59013, + 59876, + 60667, + 61305, + 61942, + 62455, + 62969, + 63482, + 63995, + 64508, + 65022, 65535, 0, - 28808, - 38775, - 46801, - 51785, - 55886, - 59410, - 62572, + 27679, + 38351, + 48138, + 52625, + 56739, + 60199, + 62867, 65535, 0, - 27376, - 38639, - 45052, - 51465, - 55448, - 59021, - 62594, + 31319, + 40235, + 45312, + 50174, + 54632, + 59091, + 62383, 65535, 0, - 33403, - 39569, - 45102, - 49961, - 54047, - 57959, - 61788, + 39134, + 44026, + 48322, + 52261, + 55873, + 59185, + 62498, 65535, 0, - 25851, - 43356, - 47828, - 52204, - 55964, - 59413, - 62507, + 42248, + 46688, + 50941, + 55013, + 58437, + 61078, + 63499, 65535, 0, - 34277, - 40337, - 45432, - 50311, - 54326, - 58171, - 61853, + 44150, + 48053, + 51334, + 54477, + 57486, + 60245, + 63005, 65535, 0, - 33538, - 39865, - 45302, - 50076, - 54549, - 58478, - 62159, + 40440, + 45076, + 49515, + 53089, + 56512, + 59651, + 62657, 65535, 0, - 27445, - 35258, - 40665, - 46072, - 51362, - 56540, - 61086, + 31605, + 39507, + 45094, + 50444, + 55567, + 59351, + 62973, 65535, 0, - 22080, - 30779, - 37065, - 43085, - 48849, - 54613, - 60133, + 28639, + 39681, + 47834, + 52682, + 55965, + 59248, + 62391, 65535, 0, - 13417, - 21748, - 30078, - 38231, - 46383, - 53091, - 59515, + 17932, + 34375, + 42961, + 49875, + 55689, + 59458, + 62628, 65535 }; @@ -175,520 +176,520 @@ const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_CDF_middle_idx[ NLSF_MSVQ_CB1_16_STAGES 2, 2, 2, - 3, - 3, - 4 + 2, + 2, + 3 }; -const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ NLSF_MSVQ_CB1_16_VECTORS ] = +const SKP_uint8 SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ NLSF_MSVQ_CB1_16_VECTORS ] = { - 57, 98, - 133, 134, - 138, 144, - 145, 147, - 152, 177, - 177, 178, - 181, 183, - 184, 202, - 206, 215, - 218, 222, - 227, 227, - 227, 227, - 227, 227, - 227, 227, - 227, 227, - 227, 227, - 38, 87, - 97, 119, - 128, 135, - 140, 143, - 40, 81, - 107, 107, - 129, 134, - 134, 143, - 31, 109, - 114, 120, - 128, 130, - 131, 132, - 43, 61, - 124, 125, - 132, 136, - 141, 142, - 30, 110, - 118, 120, - 129, 131, - 133, 133, - 31, 108, - 115, 121, - 124, 130, - 133, 137, - 40, 98, - 115, 115, - 116, 117, - 123, 124, - 50, 93, - 108, 110, + 31, 52, + 61, 69, + 73, 76, + 81, 81, + 83, 84, + 85, 86, + 86, 88, + 88, 90, + 94, 94, + 95, 97, + 98, 100, + 102, 107, + 107, 112, + 112, 112, + 112, 112, 112, 112, - 114, 115, - 73, 95, - 95, 96, - 96, 105, - 107, 110 + 20, 42, + 44, 62, + 64, 68, + 74, 74, + 17, 46, + 59, 60, + 62, 62, + 69, 70, + 12, 60, + 63, 65, + 67, 69, + 69, 71, + 10, 62, + 63, 64, + 68, 74, + 76, 80, + 9, 65, + 69, 70, + 71, 73, + 73, 75, + 11, 61, + 62, 67, + 68, 70, + 71, 72, + 17, 49, + 57, 58, + 59, 66, + 67, 75, + 19, 41, + 48, 60, + 69, 69, + 70, 70, + 30, 32, + 47, 52, + 56, 66, + 70, 72 }; const SKP_int SKP_Silk_NLSF_MSVQ_CB1_16_ndelta_min_Q15[ 16 + 1 ] = { - 148, - 3, - 60, + 110, + 28, + 122, 68, - 117, - 86, - 121, - 124, - 152, - 153, - 207, - 151, - 225, - 239, - 126, - 183, - 792 + 75, + 71, + 64, + 78, + 83, + 77, + 81, + 76, + 84, + 73, + 69, + 21, + 778 }; -const SKP_int16 SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * NLSF_MSVQ_CB1_16_VECTORS ] = +const SKP_int8 SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * NLSF_MSVQ_CB1_16_VECTORS ] = { - 1309, 3060, 5071, 6996, - 9028, 10938, 12934, 14891, - 16933, 18854, 20792, 22764, - 24753, 26659, 28626, 30501, - 1264, 2745, 4610, 6408, - 8286, 10043, 12084, 14108, - 16118, 18163, 20095, 22164, - 24264, 26316, 28329, 30251, - 1044, 2080, 3672, 5179, - 7140, 9100, 11070, 13065, - 15423, 17790, 19931, 22101, - 24290, 26361, 28499, 30418, - 1131, 2476, 4478, 6149, - 7902, 9875, 11938, 13809, - 15869, 17730, 19948, 21707, - 23761, 25535, 27426, 28917, - 1040, 2004, 4026, 6100, - 8432, 10494, 12610, 14694, - 16797, 18775, 20799, 22782, - 24772, 26682, 28631, 30516, - 2310, 3812, 5913, 7933, - 10033, 11881, 13885, 15798, - 17751, 19576, 21482, 23276, - 25157, 27010, 28833, 30623, - 1254, 2847, 5013, 6781, - 8626, 10370, 12726, 14633, - 16281, 17852, 19870, 21472, - 23002, 24629, 26710, 27960, - 1468, 3059, 4987, 7026, - 8741, 10412, 12281, 14020, - 15970, 17723, 19640, 21522, - 23472, 25661, 27986, 30225, - 2171, 3566, 5605, 7384, - 9404, 11220, 13030, 14758, - 16687, 18417, 20346, 22091, - 24055, 26212, 28356, 30397, - 2409, 4676, 7543, 9786, - 11419, 12935, 14368, 15653, - 17366, 18943, 20762, 22477, - 24440, 26327, 28284, 30242, - 2354, 4222, 6820, 9107, - 11596, 13934, 15973, 17682, - 19158, 20517, 21991, 23420, - 25178, 26936, 28794, 30527, - 1323, 2414, 4184, 6039, - 7534, 9398, 11099, 13097, - 14799, 16451, 18434, 20887, - 23490, 25838, 28046, 30225, - 1361, 3243, 6048, 8511, - 11001, 13145, 15073, 16608, - 18126, 19381, 20912, 22607, - 24660, 26668, 28663, 30566, - 1216, 2648, 5901, 8422, - 10037, 11425, 12973, 14603, - 16686, 18600, 20555, 22415, - 24450, 26280, 28206, 30077, - 2417, 4048, 6316, 8433, - 10510, 12757, 15072, 17295, - 19573, 21503, 23329, 24782, - 26235, 27689, 29214, 30819, - 1012, 2345, 4991, 7377, - 9465, 11916, 14296, 16566, - 18672, 20544, 22292, 23838, - 25415, 27050, 28848, 30551, - 1937, 3693, 6267, 8019, - 10372, 12194, 14287, 15657, - 17431, 18864, 20769, 22206, - 24037, 25463, 27383, 28602, - 1969, 3305, 5017, 6726, - 8375, 9993, 11634, 13280, - 15078, 16751, 18464, 20119, - 21959, 23858, 26224, 29298, - 1198, 2647, 5428, 7423, - 9775, 12155, 14665, 16344, - 18121, 19790, 21557, 22847, - 24484, 25742, 27639, 28711, - 1636, 3353, 5447, 7597, - 9837, 11647, 13964, 16019, - 17862, 20116, 22319, 24037, - 25966, 28086, 29914, 31294, - 2676, 4105, 6378, 8223, - 10058, 11549, 13072, 14453, - 15956, 17355, 18931, 20402, - 22183, 23884, 25717, 27723, - 1373, 2593, 4449, 5633, - 7300, 8425, 9474, 10818, - 12769, 15722, 19002, 21429, - 23682, 25924, 28135, 30333, - 1596, 3183, 5378, 7164, - 8670, 10105, 11470, 12834, - 13991, 15042, 16642, 17903, - 20759, 25283, 27770, 30240, - 2037, 3987, 6237, 8117, - 9954, 12245, 14217, 15892, - 17775, 20114, 22314, 25942, - 26305, 26483, 26796, 28561, - 2181, 3858, 5760, 7924, - 10041, 11577, 13769, 15700, - 17429, 19879, 23583, 24538, - 25212, 25693, 28688, 30507, - 1992, 3882, 6474, 7883, - 9381, 12672, 14340, 15701, - 16658, 17832, 20850, 22885, - 24677, 26457, 28491, 30460, - 2391, 3988, 5448, 7432, - 11014, 12579, 13140, 14146, - 15898, 18592, 21104, 22993, - 24673, 27186, 28142, 29612, - 1713, 5102, 6989, 7798, - 8670, 10110, 12746, 14881, - 16709, 18407, 20126, 22107, - 24181, 26198, 28237, 30137, - 1612, 3617, 6148, 8359, - 9576, 11528, 14936, 17809, - 18287, 18729, 19001, 21111, - 24631, 26596, 28740, 30643, - 2266, 4168, 7862, 9546, - 9618, 9703, 10134, 13897, - 16265, 18432, 20587, 22605, - 24754, 26994, 29125, 30840, - 1840, 3917, 6272, 7809, - 9714, 11438, 13767, 15799, - 19244, 21972, 22980, 23180, - 23723, 25650, 29117, 31085, - 1458, 3612, 6008, 7488, - 9827, 11893, 14086, 15734, - 17440, 19535, 22424, 24767, - 29246, 29928, 30516, 30947, - -102, -121, -31, -6, - 5, -2, 8, -18, - -4, 6, 14, -2, - -12, -16, -12, -60, - -126, -353, -574, -677, - -657, -617, -498, -393, - -348, -277, -225, -164, - -102, -70, -31, 33, - 4, 379, 387, 551, - 605, 620, 532, 482, - 442, 454, 385, 347, - 322, 299, 266, 200, - 1168, 951, 672, 246, - 60, -161, -259, -234, - -253, -282, -203, -187, - -155, -176, -198, -178, - 10, 170, 393, 609, - 555, 208, -330, -571, - -769, -633, -319, -43, - 95, 105, 106, 116, - -152, -140, -125, 5, - 173, 274, 264, 331, - -37, -293, -609, -786, - -959, -814, -645, -238, - -91, 36, -11, -101, - -279, -227, -40, 90, - 530, 677, 890, 1104, - 999, 835, 564, 295, - -280, -364, -340, -331, - -284, 288, 761, 880, - 988, 627, 146, -226, - -203, -181, -142, 39, - 24, -26, -107, -92, - -161, -135, -131, -88, - -160, -156, -75, -43, - -36, -6, -33, 33, - -324, -415, -108, 124, - 157, 191, 203, 197, - 144, 109, 152, 176, - 190, 122, 101, 159, - 663, 668, 480, 400, - 379, 444, 446, 458, - 343, 351, 310, 228, - 133, 44, 75, 63, - -84, 39, -29, 35, - -94, -233, -261, -354, - 77, 262, -24, -145, - -333, -409, -404, -597, - -488, -300, 910, 592, - 412, 120, 130, -51, - -37, -77, -172, -181, - -159, -148, -72, -62, - 510, 516, 113, -585, - -1075, -957, -417, -195, - 9, 7, -88, -173, - -91, 54, 98, 95, - -28, 197, -527, -621, - 157, 122, -168, 147, - 309, 300, 336, 315, - 396, 408, 376, 106, - -162, -170, -315, 98, - 821, 908, 570, -33, - -312, -568, -572, -378, - -107, 23, 156, 93, - -129, -87, 20, -72, - -37, 40, 21, 27, - 48, 75, 77, 65, - 46, 71, 66, 47, - 136, 344, 236, 322, - 170, 283, 269, 291, - 162, -43, -204, -259, - -240, -305, -350, -312, - 447, 348, 345, 257, - 71, -131, -77, -190, - -202, -40, 35, 133, - 261, 365, 438, 303, - -8, 22, 140, 137, - -300, -641, -764, -268, - -23, -25, 73, -162, - -150, -212, -72, 6, - 39, 78, 104, -93, - -308, -136, 117, -71, - -513, -820, -700, -450, - -161, -23, 29, 78, - 337, 106, -406, -782, - -112, 233, 383, 62, - -126, 6, -77, -29, - -146, -123, -51, -27, - -27, -381, -641, 402, - 539, 8, -207, -366, - -36, -27, -204, -227, - -237, -189, -64, 51, - -92, -137, -281, 62, - 233, 92, 148, 294, - 363, 416, 564, 625, - 370, -36, -469, -462, - 102, 168, 32, 117, - -21, 97, 139, 89, - 104, 35, 4, 82, - 66, 58, 73, 93, - -76, -320, -236, -189, - -203, -142, -27, -73, - 9, -9, -25, 12, - -15, 4, 4, -50, - 314, 180, 162, -49, - 199, -108, -227, -66, - -447, -67, -264, -394, - 5, 55, -133, -176, - -116, -241, 272, 109, - 282, 262, 192, -64, - -392, -514, 156, 203, - 154, 72, -34, -160, - -73, 3, -33, -431, - 321, 18, -567, -590, - -108, 88, 66, 51, - -31, -193, -46, 65, - -29, -23, 215, -31, - 101, -113, 32, 304, - 88, 320, 448, 5, - -439, -562, -508, -135, - -13, -171, -8, 182, - -99, -181, -149, 376, - 476, 64, -396, -652, - -150, 176, 222, 65, - -590, 719, 271, 399, - 245, 72, -156, -152, - -176, 59, 94, 125, - -9, -7, 9, 1, - -61, -116, -82, 1, - 79, 22, -44, -15, - -48, -65, -62, -101, - -102, -54, -70, -78, - -80, -25, 398, 71, - 139, 38, 90, 194, - 222, 249, 165, 94, - 221, 262, 163, 91, - -206, 573, 200, -287, - -147, 5, -18, -85, - -74, -125, -87, 85, - 141, 4, -4, 28, - 234, 48, -150, -111, - -506, 237, -209, 345, - 94, -124, 77, 121, - 143, 12, -80, -48, - 191, 144, -93, -65, - -151, -643, 435, 106, - 87, 7, 65, 102, - 94, 68, 5, 99, - 222, 93, 94, 355, - -13, -89, -228, -503, - 287, 109, 108, 449, - 253, -29, -109, -116, - 15, -73, -20, 131, - -147, 72, 59, -150, - -594, 273, 316, 132, - 199, 106, 198, 212, - 220, 82, 45, -13, - 223, 137, 270, 38, - 252, 135, -177, -207, - -360, -102, 403, 406, - -14, 83, 64, 51, - -7, -99, -97, -88, - -124, -65, 42, 32, - 28, 29, 12, 20, - 119, -26, -212, -201, - 373, 251, 141, 103, - 36, -52, 66, 18, - -6, -95, -196, 5, - 98, -85, -108, 218, - -164, 20, 356, 172, - 37, 266, 23, 112, - -24, -99, -92, -178, - 29, -278, 388, -60, - -220, 300, -13, 154, - 191, 15, -37, -110, - -153, -150, -114, -7, - -94, -31, -62, -177, - 4, -70, 35, 453, - 147, -247, -328, 101, - 20, -114, 147, 108, - -119, -109, -102, -238, - 55, -102, 173, -89, - 129, 138, -330, -160, - 485, 154, -59, -170, - -20, -34, -261, -40, - -129, 77, -84, 69, - 83, 160, 169, 63, - -516, 30, 336, 52, - -0, -52, -124, 158, - 19, 197, -10, -375, - 405, 285, 114, -395, - -47, 196, 62, 87, - -106, -65, -75, -69, - -13, 34, 99, 59, - 83, 98, 44, 0, - 24, 18, 17, 70, - -22, 194, 208, 144, - -79, -15, 32, -104, - -28, -105, -186, -212, - -228, -79, -76, 51, - -71, 72, 118, -34, - -3, -171, 5, 2, - -108, -125, 62, -58, - 58, -121, 73, -466, - 92, 63, -94, -78, - -76, 212, 36, -225, - -71, -354, 152, 143, - -79, -246, -51, -31, - -6, -270, 240, 210, - 30, -157, -231, 74, - -146, 88, -273, 156, - 92, 56, 71, 2, - 318, 164, 32, -110, - -35, -41, -95, -106, - 11, 132, -68, 55, - 123, -83, -149, 212, - 132, 0, -194, 55, - 206, -108, -353, 289, - -195, 1, 233, -22, - -60, 20, 26, 68, - 166, 27, -58, 130, - 112, 107, 27, -165, - 115, -93, -37, 38, - 83, 483, 65, -229, - -13, 157, 85, 50, - 136, 10, 32, 83, - 82, 55, 5, -9, - -52, -78, -81, -51, - 40, 18, -127, -224, - -41, 53, -210, -113, - 24, -17, -187, -89, - 8, 121, 83, 77, - 91, -74, -35, -112, - -161, -173, 102, 132, - -125, -61, 103, -260, - 52, 166, -32, -156, - -87, -56, 60, -70, - -124, 242, 114, -251, - -166, 201, 127, 28, - -11, 23, -80, -115, - -20, -51, -348, 340, - -34, 133, 13, 92, - -124, -136, -120, -26, - -6, 17, 28, 21, - 120, -168, 160, -35, - 115, 28, 9, 7, - -56, 39, 156, 256, - -18, 1, 277, 82, - -70, -144, -88, -13, - -59, -157, 8, -134, - 21, -40, 58, -21, - 194, -276, 97, 279, - -56, -140, 125, 57, - -184, -204, -70, -2, - 128, -202, -78, 230, - -23, 161, -102, 1, - 1, 180, -31, -86, - -167, -57, -60, 27, - -13, 99, 108, 111, - 76, 69, 34, -21, - 53, 38, 34, 78, - 73, 219, 51, 15, - -72, -103, -207, 30, - 213, -14, 31, -94, - -40, -144, 67, 4, - 105, 59, -240, 25, - 244, 69, 58, 23, - -24, -5, -15, -133, - -71, -67, 181, 29, - -45, 121, 96, 51, - -72, -53, 56, -153, - -27, 85, 183, 211, - 105, -34, -46, 43, - -72, -93, 36, -128, - 29, 111, -95, -156, - -179, -235, 21, -39, - -71, -33, -61, -252, - 230, -131, 157, -21, - -85, -28, -123, 80, - -160, 63, 47, -6, - -49, -96, -19, 17, - -58, 17, -0, -13, - -170, 25, -35, 59, - 10, -31, -413, 81, - 62, 18, -164, 245, - 92, -165, 42, 26, - 126, -248, 193, -55, - 16, 39, 14, 50 + -118, -105, -90, -74, + -58, -44, -29, -13, + 3, 18, 33, 49, + 64, 79, 95, 109, + -118, -110, -95, -81, + -66, -52, -37, -21, + -4, 12, 27, 43, + 60, 77, 93, 107, + -120, -114, -94, -78, + -60, -45, -29, -13, + 3, 19, 34, 49, + 65, 80, 95, 110, + -122, -117, -103, -88, + -69, -52, -37, -19, + -2, 15, 31, 47, + 63, 79, 95, 110, + -119, -111, -95, -81, + -68, -53, -36, -22, + -5, 9, 27, 40, + 56, 70, 85, 96, + -117, -106, -90, -76, + -62, -49, -31, -15, + -2, 10, 26, 39, + 51, 64, 80, 90, + -113, -102, -84, -69, + -54, -42, -27, -15, + -1, 13, 28, 42, + 58, 73, 90, 106, + -115, -104, -90, -76, + -63, -50, -35, -21, + -8, 7, 22, 37, + 53, 70, 88, 107, + -109, -98, -82, -66, + -49, -35, -18, -2, + 14, 30, 45, 58, + 73, 86, 100, 113, + -106, -96, -82, -68, + -53, -40, -25, -10, + 5, 19, 34, 49, + 65, 80, 96, 110, + -120, -113, -99, -86, + -72, -59, -50, -36, + -7, 10, 27, 45, + 61, 78, 94, 109, + -117, -109, -96, -84, + -72, -58, -47, -32, + -19, -2, 23, 40, + 57, 75, 92, 109, + -119, -112, -99, -87, + -78, -66, -42, -20, + -6, 11, 28, 44, + 60, 78, 94, 110, + -110, -97, -79, -62, + -44, -26, -8, 8, + 23, 36, 49, 60, + 72, 84, 97, 111, + -109, -94, -73, -55, + -37, -22, -8, 2, + 13, 24, 37, 50, + 65, 79, 95, 110, + -114, -101, -83, -67, + -48, -31, -15, -1, + 10, 21, 34, 49, + 65, 80, 96, 111, + -118, -112, -100, -92, + -80, -49, -34, -19, + -7, 8, 26, 43, + 60, 78, 94, 110, + -118, -112, -100, -78, + -61, -51, -38, -26, + -6, 6, 19, 33, + 52, 73, 94, 110, + -117, -110, -94, -79, + -67, -54, -42, -27, + -16, -6, 8, 35, + 57, 75, 92, 109, + -113, -92, -71, -57, + -45, -34, -22, -10, + 4, 17, 32, 46, + 62, 77, 93, 107, + -120, -110, -90, -71, + -54, -37, -17, -1, + 16, 31, 44, 56, + 70, 82, 97, 111, + -110, -101, -88, -80, + -69, -50, -30, -13, + 2, 17, 32, 48, + 64, 80, 97, 111, + -118, -112, -101, -86, + -55, -41, -29, -16, + -4, 10, 30, 43, + 56, 72, 90, 107, + -112, -103, -88, -74, + -61, -49, -36, -24, + -10, 4, 17, 29, + 43, 57, 74, 102, + -118, -107, -84, -69, + -52, -35, -17, -5, + 9, 20, 34, 45, + 59, 69, 84, 93, + -106, -95, -78, -63, + -48, -36, -24, -13, + -1, 9, 21, 32, + 46, 60, 76, 92, + -116, -101, -85, -69, + -54, -37, -21, -6, + 11, 24, 39, 53, + 76, 93, 104, 112, + -114, -104, -87, -74, + -61, -50, -40, -30, + -19, -10, 4, 14, + 36, 69, 89, 109, + -112, -98, -85, -72, + -54, -35, -23, -11, + 3, 20, 38, 56, + 69, 81, 90, 108, + -116, -101, -84, -70, + -55, -40, -25, -8, + 11, 30, 41, 49, + 62, 83, 105, 117, + -115, -98, -82, -61, + -48, -40, -29, -14, + 6, 22, 39, 53, + 68, 82, 96, 110, + -113, -96, -76, -68, + -59, -44, -21, -8, + 3, 15, 33, 49, + 65, 80, 95, 110, + -1, 0, 0, 1, + 1, 2, 2, 2, + 2, 2, 2, 1, + 1, 1, 1, 0, + 0, -1, -3, -6, + -6, -5, -4, -4, + -3, -1, 0, 0, + 0, 0, 1, 1, + 0, 0, -1, 0, + -1, -2, -3, -3, + -4, -5, -5, -4, + -3, -2, -2, 0, + 9, 8, 5, 2, + 1, -1, -1, -2, + -1, -2, -1, -2, + -2, -2, -2, -2, + -5, -8, 3, 2, + 2, 0, 0, 0, + 0, 0, 1, 1, + 1, 1, 0, 0, + 0, 0, 2, 8, + 9, 8, 5, 2, + -1, -2, -2, -2, + -1, 1, 1, 2, + -1, 0, -1, 0, + 0, 2, 4, 5, + 4, 2, -1, -5, + -8, -8, -6, -2, + 0, 0, -2, -2, + -1, -1, 0, 2, + 5, 5, 5, 8, + 9, 7, 6, 3, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, 0, + -1, 0, 0, 0, + 4, 3, 4, 3, + 3, 3, 3, 3, + 2, 2, 2, 2, + 2, 2, 2, 2, + -1, -3, -6, -7, + 0, 0, 4, 3, + 3, 1, 1, 1, + 1, 1, 1, 1, + -4, 7, 4, 4, + 3, 3, 2, 2, + 1, 1, 1, 1, + 1, 1, 1, 1, + -2, -5, -7, 5, + 3, 3, 3, 3, + 2, 2, 1, 1, + 1, 0, 0, 0, + 2, 1, 4, 3, + 0, -3, -7, -6, + -5, -3, -2, -1, + 0, 0, 0, 0, + 0, 0, 0, 1, + 2, 3, 3, 4, + 3, 4, 5, 4, + 1, -3, -6, -7, + 2, 2, 1, -1, + -3, -2, -2, -1, + 2, -1, -6, -9, + -4, -1, 1, 2, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 3, 3, 1, -1, + -5, -7, 1, -1, + 0, 1, 0, 0, + 0, 0, 1, 1, + -1, -1, 1, 1, + 2, 3, 4, 4, + 3, 0, -3, -5, + -4, -3, -2, -1, + 2, 2, 1, 1, + 0, -2, -2, -2, + 1, 3, 3, 0, + -4, -6, -4, -1, + 0, 0, 1, 1, + 2, 0, -2, -5, + -7, -5, -1, 0, + 2, 2, 3, 2, + 0, 0, -4, -7, + 5, 3, -1, -2, + -1, -1, -1, 0, + 0, 0, 0, 0, + 0, -1, -1, -3, + -7, 2, 0, 4, + 3, 3, 2, 1, + 1, 1, 0, 0, + 0, 0, 2, 3, + 1, 0, 0, -1, + 2, 2, 4, 6, + 6, 3, 0, -2, + 1, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + -4, -4, 2, 0, + 2, 2, 2, 1, + 2, 1, 1, 1, + 1, 0, 1, 0, + -1, -2, -4, 3, + 1, -2, -1, -4, + 2, 0, -2, -1, + -1, -2, -2, -1, + 0, 0, 1, -2, + -1, 3, 4, 0, + -3, -5, -4, -1, + -1, -1, 0, 0, + -1, -1, 2, 2, + 0, -3, -4, 1, + 4, 4, 3, 1, + 0, 1, 1, 2, + 0, -1, -1, -1, + -1, -2, -5, 4, + -1, -5, 2, 1, + -1, 0, 0, 1, + 0, -1, 0, 0, + 1, 0, 0, -4, + -7, 5, 2, 0, + 1, 1, 0, 0, + 1, 1, 0, 1, + 1, 0, 2, 1, + 0, 0, -3, -3, + 6, 5, 0, -3, + 0, 0, 0, 0, + -1, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 1, 1, 1, 0, + 1, 3, 1, 1, + 0, 0, 0, 0, + -1, -2, -3, -4, + 1, 0, -2, 0, + 4, 0, -4, 1, + 0, 1, 0, -1, + -1, 0, 0, 0, + 0, -2, 4, 3, + 1, -1, -2, 3, + -2, 0, -2, -1, + 0, 1, 1, 0, + 1, 1, 0, -1, + -1, 2, -2, -5, + 4, 1, 1, 0, + -1, -1, 0, 1, + 1, 0, -2, 2, + 2, 0, 5, 3, + 2, 1, 1, 0, + -2, 1, 3, 0, + 0, 0, 1, 0, + 1, 0, -1, -1, + -1, -2, 1, 5, + 3, -2, -4, 2, + -2, 5, 3, -2, + 0, -1, -1, -1, + 0, 1, 0, 0, + 2, 1, 0, -1, + -1, 0, 0, 0, + 1, 1, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 1, -1, -3, -1, + -3, 0, 0, -1, + -2, -1, 0, 0, + 0, 0, 0, 0, + 1, 0, 0, 0, + -1, -2, -2, -2, + 1, 2, 0, -1, + -1, 0, 0, -4, + 0, -1, 4, 2, + -3, 0, 1, -1, + 0, -2, -1, 0, + 0, 0, -1, -1, + 1, 0, -1, -1, + 1, -2, 2, 2, + -2, 3, 0, -2, + -2, -1, -3, 0, + 0, 0, -1, -1, + -1, -2, -3, 2, + 3, 0, -4, 1, + 2, 1, 0, 0, + 1, 1, 0, -2, + 1, 0, 1, 0, + -2, -1, 3, 0, + 1, 3, 2, 0, + 0, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, -1, + -3, -4, 5, 3, + -1, -1, 0, -1, + -1, 0, -1, -1, + -1, -1, -1, -1, + 0, 0, 0, 0, + -1, 2, 1, 1, + 1, 2, 1, 1, + 1, 1, 0, 1, + 1, 1, 1, 1, + 2, 1, 0, 1, + 2, -1, 0, -2, + -1, 0, -1, 0, + 1, 0, 0, 0, + 1, 0, 1, -1, + 0, 1, -1, 3, + 1, 1, 1, 1, + 0, -1, -1, -1, + 0, 0, -1, 1, + 0, -3, 3, 1, + 0, -2, 2, 1, + 0, -1, -1, 0, + 0, 0, -1, -1, + -1, 1, 2, -2, + 2, 3, -1, -1, + 1, -1, 0, 0, + 1, -1, -2, 4, + 0, 0, -2, 1, + 0, 0, 0, 0, + 1, 1, 0, 0, + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, -1, + -5, 3, 1, 0, + -1, -1, -1, -1, + 0, -1, 0, 0, + 0, 1, 1, 1, + 1, 1, 0, 0, + 2, 1, 0, 1, + -1, -1, 1, 1, + 1, 0, -1, 0, + -1, 0, 0, 0, + 0, -1, 1, 2, + 1, 1, 1, 0, + -1, 1, 1, 0, + -1, -1, -1, -1, + 0, 0, 2, -3, + 1, -1, 0, 0, + 1, 0, -1, 0, + -1, -1, 0, 0, + 1, 0, 1, 0, + 0, 4, -1, -1, + -1, 1, -1, 0, + 1, 1, 1, 1, + 1, 0, -1, 0, + 1, 1, 0, 0, + 1, -4, 0, 1, + 0, 0, 1, -2, + 0, 0, 0, 0, + -1, 0, -1, 0, + 1, -1, 2, -4, + 1, 0, -1, 1, + -2, 3, 0, 1, + -1, 0, -1, 0, + -1, 0, 0, 1, + 0, 0, -1, 0, + 1, 1, 1, 0, + -1, 0, 0, 0, + -1, 0, 1, 1, + 0, 0, 0, 0, + -1, 0, 1, 1, + 1, -1, -1, -1, + 1, -1, 0, -1, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 1, 1, + -1, 0, -1, -1, + 1, -1, 0, -1, + 1, -2, 0, -1, + 0, 0, 0, 0, + 1, 0, 0, 0, + 0, 0, 1, 1, + 1, 2, -3, -1, + 0, 0, 0, 0, + 0, 0, 0, 0, + -1, 0, 0, 0, + 0, 0, 0, 0, + 1, 0, 0, 0, + -1, 0, -2, 3, + -1, 0, 1, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 1, 2, -4, -1, + -2, -1, 0, 0, + -1, 1, 0, 1, + 1, 0, 0, 0, + 0, 0, 0, 0 }; const SKP_Silk_NLSF_CBS SKP_Silk_NLSF_CB1_16_Stage_info[ NLSF_MSVQ_CB1_16_STAGES ] = { - { 32, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 0 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 0 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 32 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 32 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 40 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 40 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 48 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 48 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 56 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 56 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 64 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 64 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 72 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 72 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 80 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 80 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 88 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 88 ] }, - { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q15[ 16 * 96 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q5[ 96 ] } + { 32, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 0 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 0 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 32 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 32 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 40 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 40 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 48 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 48 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 56 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 56 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 64 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 64 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 72 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 72 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 80 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 80 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 88 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 88 ] }, + { 8, &SKP_Silk_NLSF_MSVQ_CB1_16_Q8[ 16 * 96 ], &SKP_Silk_NLSF_MSVQ_CB1_16_rates_Q4[ 96 ] } }; const SKP_Silk_NLSF_CB_struct SKP_Silk_NLSF_CB1_16 = diff --git a/src_common/SKP_Silk_tables_other.c b/src_common/SKP_Silk_tables_other.c index 678a5e138d71bcc33733d55f5efd5726c9de0b1d..d9208d7e336bc5afc5c94e8650f91cf4dc2250af 100644 --- a/src_common/SKP_Silk_tables_other.c +++ b/src_common/SKP_Silk_tables_other.c @@ -35,16 +35,16 @@ extern "C" /* Piece-wise linear mapping from bitrate in kbps to coding quality in dB SNR */ const SKP_int32 TargetRate_table_NB[ TARGET_RATE_TAB_SZ ] = { - 0, 8000, 9000, 11000, 13000, 16000, 22000, 100000 + 0, 8000, 9000, 11000, 13000, 16000, 22000, MAX_TARGET_RATE_BPS }; const SKP_int32 TargetRate_table_MB[ TARGET_RATE_TAB_SZ ] = { - 0, 10000, 12000, 14000, 17000, 21000, 28000, 100000 + 0, 10000, 12000, 14000, 17000, 21000, 28000, MAX_TARGET_RATE_BPS }; const SKP_int32 TargetRate_table_WB[ TARGET_RATE_TAB_SZ ] = { - 0, 11000, 14000, 17000, 21000, 26000, 36000, 100000 + 0, 11000, 14000, 17000, 21000, 26000, 36000, MAX_TARGET_RATE_BPS }; const SKP_int32 TargetRate_table_SWB[ TARGET_RATE_TAB_SZ ] = { - 0, 13000, 16000, 19000, 25000, 32000, 46000, 100000 + 0, 13000, 16000, 19000, 25000, 32000, 46000, MAX_TARGET_RATE_BPS }; const SKP_int32 SNR_table_Q1[ TARGET_RATE_TAB_SZ ] = { 19, 31, 35, 39, 43, 47, 54, 59 @@ -91,22 +91,13 @@ const SKP_int SKP_Silk_LTPscale_offset = 2; const SKP_uint16 SKP_Silk_vadflag_CDF[ 3 ] = {0, 22000, 65535}; // 66% for speech, 33% for no speech const SKP_int SKP_Silk_vadflag_offset = 1; -/* tables for sampling rate */ -const SKP_int SKP_Silk_SamplingRates_table[ 4 ] = {8, 12, 16, 24}; -const SKP_uint16 SKP_Silk_SamplingRates_CDF[ 5 ] = {0, 16000, 32000, 48000, 65535}; -const SKP_int SKP_Silk_SamplingRates_offset = 2; - -/* tables for number of subframes */ -const SKP_uint16 SKP_Silk_NbSubframes_CDF[ 3 ] = {0, 40000, 65535}; -const SKP_int SKP_Silk_NbSubframes_offset = 1; - /* tables for NLSF interpolation factor */ const SKP_uint16 SKP_Silk_NLSF_interpolation_factor_CDF[ 6 ] = {0, 3706, 8703, 19226, 30926, 65535}; const SKP_int SKP_Silk_NLSF_interpolation_factor_offset = 4; /* Table for frame termination indication */ -const SKP_uint16 SKP_Silk_FrameTermination_CDF[ 6 ] = {0, 13107, 26214, 39321, 52428, 65535}; -const SKP_int SKP_Silk_FrameTermination_offset = 4; +const SKP_uint16 SKP_Silk_FrameTermination_CDF[ 3 ] = {0, 50000, 65535}; +const SKP_int SKP_Silk_FrameTermination_offset = 1; /* Table for random seed */ const SKP_uint16 SKP_Silk_Seed_CDF[ 5 ] = {0, 16384, 32768, 49152, 65535}; diff --git a/src_common/SKP_Silk_tuning_parameters.h b/src_common/SKP_Silk_tuning_parameters.h new file mode 100644 index 0000000000000000000000000000000000000000..8f67399b1646a7ba7ca6b043f6d5e91b3b2bbaec --- /dev/null +++ b/src_common/SKP_Silk_tuning_parameters.h @@ -0,0 +1,179 @@ +/*********************************************************************** +Copyright (c) 2006-2010, Skype Limited. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, (subject to the limitations in the disclaimer below) +are permitted provided that the following conditions are met: +- Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. +- Neither the name of Skype Limited, nor the names of specific +contributors, may be used to endorse or promote products derived from +this software without specific prior written permission. +NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED +BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +***********************************************************************/ + +#ifndef SKP_SILK_TUNING_PARAMETERS_H +#define SKP_SILK_TUNING_PARAMETERS_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +/*******************/ +/* Pitch estimator */ +/*******************/ + +/* Level of noise floor for whitening filter LPC analysis in pitch analysis */ +#define FIND_PITCH_WHITE_NOISE_FRACTION 1e-3f + +/* Bandwidth expansion for whitening filter in pitch analysis */ +#define FIND_PITCH_BANDWITH_EXPANSION 0.99f + +/* Threshold used by pitch estimator for early escape */ +#define FIND_PITCH_CORRELATION_THRESHOLD_HC_MODE 0.7f +#define FIND_PITCH_CORRELATION_THRESHOLD_MC_MODE 0.75f +#define FIND_PITCH_CORRELATION_THRESHOLD_LC_MODE 0.8f + +/*********************/ +/* Linear prediction */ +/*********************/ + +/* LPC analysis defines: regularization and bandwidth expansion */ +#define FIND_LPC_COND_FAC 2.5e-5f +#define FIND_LPC_CHIRP 0.99995f + +/* LTP analysis defines */ +#define FIND_LTP_COND_FAC 1e-5f +#define LTP_DAMPING 0.001f +#define LTP_SMOOTHING 0.1f + +/* LTP quantization settings */ +#define MU_LTP_QUANT_NB 0.03f +#define MU_LTP_QUANT_MB 0.025f +#define MU_LTP_QUANT_WB 0.02f +#define MU_LTP_QUANT_SWB 0.016f + +/***********************/ +/* High pass filtering */ +/***********************/ + +/* Smoothing parameters for low end of pitch frequency range estimation */ +#define VARIABLE_HP_SMTH_COEF1 0.1f +#define VARIABLE_HP_SMTH_COEF2 0.015f + +/* Min and max values for low end of pitch frequency range estimation */ +#define VARIABLE_HP_MIN_FREQ 80.0f +#define VARIABLE_HP_MAX_FREQ 150.0f + +/* Max absolute difference between log2 of pitch frequency and smoother state, to enter the smoother */ +#define VARIABLE_HP_MAX_DELTA_FREQ 0.4f + +/***********/ +/* Various */ +/***********/ + +/* Required speech activity for counting frame as active */ +#define WB_DETECT_ACTIVE_SPEECH_LEVEL_THRES 0.7f + +#define SPEECH_ACTIVITY_DTX_THRES 0.1f + +/* Speech Activity LBRR enable threshold (needs tuning) */ +#define LBRR_SPEECH_ACTIVITY_THRES 0.5f + +/*************************/ +/* Perceptual parameters */ +/*************************/ + +/* reduction in coding SNR during low speech activity */ +#define BG_SNR_DECR_dB 4.0f + +/* factor for reducing quantization noise during voiced speech */ +#define HARM_SNR_INCR_dB 2.0f + +/* factor for reducing quantization noise for unvoiced sparse signals */ +#define SPARSE_SNR_INCR_dB 2.0f + +/* threshold for sparseness measure above which to use lower quantization offset during unvoiced */ +#define SPARSENESS_THRESHOLD_QNT_OFFSET 0.75f + +/* warping control */ +#define WARPING_MULTIPLIER 0.015f + +/* fraction added to first autocorrelation value */ +#define SHAPE_WHITE_NOISE_FRACTION 1e-5f + +/* noise shaping filter chirp factor */ +#define BANDWIDTH_EXPANSION 0.95f + +/* difference between chirp factors for analysis and synthesis noise shaping filters at low bitrates */ +#define LOW_RATE_BANDWIDTH_EXPANSION_DELTA 0.01f + +/* extra harmonic boosting (signal shaping) at low bitrates */ +#define LOW_RATE_HARMONIC_BOOST 0.1f + +/* extra harmonic boosting (signal shaping) for noisy input signals */ +#define LOW_INPUT_QUALITY_HARMONIC_BOOST 0.1f + +/* harmonic noise shaping */ +#define HARMONIC_SHAPING 0.3f + +/* extra harmonic noise shaping for high bitrates or noisy input */ +#define HIGH_RATE_OR_LOW_QUALITY_HARMONIC_SHAPING 0.2f + +/* parameter for shaping noise towards higher frequencies */ +#define HP_NOISE_COEF 0.3f + +/* parameter for shaping noise even more towards higher frequencies during voiced speech */ +#define HARM_HP_NOISE_COEF 0.35f + +/* parameter for applying a high-pass tilt to the input signal */ +#define INPUT_TILT 0.05f + +/* parameter for extra high-pass tilt to the input signal at high rates */ +#define HIGH_RATE_INPUT_TILT 0.1f + +/* parameter for reducing noise at the very low frequencies */ +#define LOW_FREQ_SHAPING 3.0f + +/* less reduction of noise at the very low frequencies for signals with low SNR at low frequencies */ +#define LOW_QUALITY_LOW_FREQ_SHAPING_DECR 0.5f + +/* noise floor to put a lower limit on the quantization step size */ +#define NOISE_FLOOR_dB 4.0f + +/* noise floor relative to active speech gain level */ +#define RELATIVE_MIN_GAIN_dB -50.0f + +/* subframe smoothing coefficient for determining active speech gain level (lower -> more smoothing) */ +#define GAIN_SMOOTHING_COEF 1e-3f + +/* subframe smoothing coefficient for HarmBoost, HarmShapeGain, Tilt (lower -> more smoothing) */ +#define SUBFR_SMTH_COEF 0.4f + +/* parameters defining the R/D tradeoff in the residual quantizer */ +#define LAMBDA_OFFSET 1.2f +#define LAMBDA_SPEECH_ACT -0.3f +#define LAMBDA_DELAYED_DECISIONS -0.05f +#define LAMBDA_INPUT_QUALITY -0.2f +#define LAMBDA_CODING_QUALITY -0.1f +#define LAMBDA_QUANT_OFFSET 1.5f + +#ifdef __cplusplus +} +#endif + +#endif // SKP_SILK_TUNING_PARAMETERS_H diff --git a/test/Decoder.c b/test/Decoder.c index d4c4cc0401c598a6bf2812c272951e94e64e9031..7ef816377dfc3ab7bf37977b4db9f757e6e7a0a7 100644 --- a/test/Decoder.c +++ b/test/Decoder.c @@ -38,8 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <stdlib.h> #include <string.h> #include "SKP_Silk_SDK_API.h" -#include "SKP_Silk_SigProc_FIX.h" -#include "SKP_debug.h" +#include "../src_SigProc_FIX/SKP_Silk_SigProc_FIX.h" /* Define codec specific settings should be moved to h file */ #define MAX_BYTES_PER_FRAME 1024 @@ -85,16 +84,16 @@ static void print_usage(char* argv[]) { int main( int argc, char* argv[] ) { - unsigned long tottime, starttime; double filetime; size_t counter; - SKP_int32 args, totPackets, i, k; - SKP_int16 ret, len, tot_len; - SKP_int16 nBytes; + SKP_int32 args, totPackets, i, k, ret, len, tot_len, nBytes; SKP_uint8 payload[ MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES * ( MAX_LBRR_DELAY + 1 ) ]; SKP_uint8 *payloadEnd = NULL, *payloadToDec = NULL; - SKP_uint8 FECpayload[ MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES ], *payloadPtr; - SKP_int16 nBytesFEC; +#if 0 + SKP_uint8 FECpayload[ MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES ]; + SKP_int32 nBytesFEC; +#endif + SKP_uint8 *payloadPtr; SKP_int16 nBytesPerPacket[ MAX_LBRR_DELAY + 1 ], totBytes; SKP_int16 out[ ( ( MAX_FRAME_LENGTH_MS * MAX_API_FS_KHZ ) << 1 ) * MAX_INPUT_FRAMES ], *outPtr; char speechOutFileName[ 150 ], bitInFileName[ 150 ]; @@ -182,14 +181,13 @@ int main( int argc, char* argv[] ) printf( "\nSKP_Silk_InitDecoder returned %d", ret ); } - tottime = 0; totPackets = 0; payloadEnd = payload; /* Simulate the jitter buffer holding MAX_FEC_DELAY packets */ for( i = 0; i < MAX_LBRR_DELAY; i++ ) { /* Read payload size */ - counter = fread( &nBytes, sizeof( SKP_int16 ), 1, bitInFile ); + counter = fread( &nBytes, sizeof( SKP_int32 ), 1, bitInFile ); #ifdef _SYSTEM_IS_BIG_ENDIAN swap_endian( &nBytes, 1 ); #endif @@ -205,7 +203,7 @@ int main( int argc, char* argv[] ) while( 1 ) { /* Read payload size */ - counter = fread( &nBytes, sizeof( SKP_int16 ), 1, bitInFile ); + counter = fread( &nBytes, sizeof( SKP_int32 ), 1, bitInFile ); #ifdef _SYSTEM_IS_BIG_ENDIAN swap_endian( &nBytes, 1 ); #endif @@ -239,15 +237,15 @@ int main( int argc, char* argv[] ) payloadPtr = payload; for( i = 0; i < MAX_LBRR_DELAY; i++ ) { if( nBytesPerPacket[ i + 1 ] > 0 ) { - starttime = GetHighResolutionTime(); - //SKP_Silk_SDK_search_for_LBRR( payloadPtr, nBytesPerPacket[ i + 1 ], i + 1, FECpayload, &nBytesFEC ); - tottime += GetHighResolutionTime() - starttime; +#if 0 + SKP_Silk_SDK_search_for_LBRR( payloadPtr, nBytesPerPacket[ i + 1 ], i + 1, FECpayload, &nBytesFEC ); if( nBytesFEC > 0 ) { payloadToDec = FECpayload; nBytes = nBytesFEC; lost = 0; break; } +#endif } payloadPtr += nBytesPerPacket[ i + 1 ]; } @@ -266,9 +264,7 @@ int main( int argc, char* argv[] ) frames = 0; do { /* Decode 20 ms */ - starttime = GetHighResolutionTime(); ret = SKP_Silk_SDK_Decode( psDec, &DecControl, 0, &range_dec_celt_state, nBytes, outPtr, &len ); - tottime += GetHighResolutionTime() - starttime; if( ret ) { printf( "\nSKP_Silk_SDK_Decode returned %d", ret ); } @@ -290,11 +286,9 @@ int main( int argc, char* argv[] ) } while( DecControl.moreInternalDecoderFrames ); } else { /* Loss: Decode enough frames to cover one packet duration */ - for( i = 0; i < DecControl.framesPerPacket; i++ ) { + for( i = 0; i < DecControl.framesPerPayload; i++ ) { /* Generate 20 ms */ - starttime = GetHighResolutionTime(); ret = SKP_Silk_SDK_Decode( psDec, &DecControl, 1, &range_dec_celt_state, nBytes, outPtr, &len ); - tottime += GetHighResolutionTime() - starttime; if( ret ) { printf( "\nSKP_Silk_Decode returned %d", ret ); } @@ -325,7 +319,7 @@ int main( int argc, char* argv[] ) payloadEnd -= nBytesPerPacket[ 0 ]; SKP_memmove( nBytesPerPacket, &nBytesPerPacket[ 1 ], MAX_LBRR_DELAY * sizeof( SKP_int16 ) ); - if( !quiet ) { + if( !quiet && totPackets % 100 == 0 ) { fprintf( stderr, "\rPackets decoded: %d", totPackets ); } } @@ -340,15 +334,15 @@ int main( int argc, char* argv[] ) payloadPtr = payload; for( i = 0; i < MAX_LBRR_DELAY; i++ ) { if( nBytesPerPacket[ i + 1 ] > 0 ) { - starttime = GetHighResolutionTime(); - //SKP_Silk_SDK_search_for_LBRR( payloadPtr, nBytesPerPacket[ i + 1 ], i + 1, FECpayload, &nBytesFEC ); - tottime += GetHighResolutionTime() - starttime; +#if 0 + SKP_Silk_SDK_search_for_LBRR( payloadPtr, nBytesPerPacket[ i + 1 ], i + 1, FECpayload, &nBytesFEC ); if( nBytesFEC > 0 ) { payloadToDec = FECpayload; nBytes = nBytesFEC; lost = 0; break; } +#endif } payloadPtr += nBytesPerPacket[ i + 1 ]; } @@ -367,9 +361,7 @@ int main( int argc, char* argv[] ) frames = 0; do { /* Decode 20 ms */ - starttime = GetHighResolutionTime(); ret = SKP_Silk_SDK_Decode( psDec, &DecControl, 0, &range_dec_celt_state, nBytes, outPtr, &len ); - tottime += GetHighResolutionTime() - starttime; if( ret ) { printf( "\nSKP_Silk_SDK_Decode returned %d", ret ); } @@ -389,10 +381,8 @@ int main( int argc, char* argv[] ) /* Loss: Decode enough frames to cover one packet duration */ /* Generate 20 ms */ - for( i = 0; i < DecControl.framesPerPacket; i++ ) { - starttime = GetHighResolutionTime(); + for( i = 0; i < DecControl.framesPerPayload; i++ ) { ret = SKP_Silk_SDK_Decode( psDec, &DecControl, 1, &range_dec_celt_state, nBytes, outPtr, &len ); - tottime += GetHighResolutionTime() - starttime; if( ret ) { printf( "\nSKP_Silk_Decode returned %d", ret ); } @@ -417,7 +407,7 @@ int main( int argc, char* argv[] ) payloadEnd -= nBytesPerPacket[ 0 ]; SKP_memmove( nBytesPerPacket, &nBytesPerPacket[ 1 ], MAX_LBRR_DELAY * sizeof( SKP_int16 ) ); - if( !quiet ) { + if( !quiet && totPackets % 100 == 0 ) { fprintf( stderr, "\rPackets decoded: %d", totPackets ); } } @@ -425,7 +415,6 @@ int main( int argc, char* argv[] ) filetime = totPackets * 1e-3 * packetSize_ms; if( !quiet ) { printf("\nFile length: %.3f s", filetime); - printf("\nTime for decoding: %.3f s (%.3f%% of realtime)", 1e-6 * tottime, 1e-4 * tottime / filetime); #ifdef SKP_MACRO_COUNT printf("\n \nWMOPS calculation"); @@ -434,8 +423,6 @@ int main( int argc, char* argv[] ) #endif printf("\n\n"); } else { - /* print time and % of realtime */ - printf( "%.3f %.3f %d ", 1e-6 * tottime, 1e-4 * tottime / filetime, totPackets ); #ifdef SKP_MACRO_COUNT /* print average and max WMOPS */ printf( "%.3f %.3f \n", (float)totOps / ((float)packetSize_ms * (float)totPackets * 1e3), @@ -452,8 +439,5 @@ int main( int argc, char* argv[] ) fclose( speechOutFile ); fclose( bitInFile ); - /* Save timing file if TIC/TOC used */ - SKP_TimerSave("decoder_timings.txt"); - return 0; } diff --git a/test/Encoder.c b/test/Encoder.c index 5545e6f15a51194b6cd38b68de1cfadbd7e5eb64..6b8c66d28b7a5f82c8a6243ad7c548b58a8f2c4a 100644 --- a/test/Encoder.c +++ b/test/Encoder.c @@ -39,8 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <string.h> #include <math.h> #include "SKP_Silk_SDK_API.h" -#include "SKP_Silk_SigProc_FIX.h" -#include "SKP_debug.h" +#include "../src_SigProc_FIX/SKP_Silk_SigProc_FIX.h" /* Define codec specific settings */ #define MAX_BYTES_PER_FRAME 250 // Equals peak bitrate of 100 kbps @@ -93,11 +92,9 @@ static void print_usage( char* argv[] ) { int main( int argc, char* argv[] ) { - unsigned long tottime, starttime; double filetime; size_t counter; - SKP_int32 k, args, totPackets, totActPackets, ret; - SKP_int16 nBytes; + SKP_int32 k, args, totPackets, totActPackets, ret, nBytes; double sumBytes, sumActBytes, avg_rate, act_rate, nrg; SKP_int16 in[ MAX_FRAME_LENGTH_MS * MAX_API_FS_KHZ * MAX_INPUT_FRAMES ]; char speechInFileName[ 150 ], bitOutFileName[ 150 ]; @@ -116,7 +113,8 @@ int main( int argc, char* argv[] ) /* default settings */ SKP_int32 API_fs_Hz = 24000; - SKP_int32 max_internal_fs_Hz = 0; + SKP_int32 max_internal_fs_Hz = 24000; + SKP_int32 min_internal_fs_Hz = 8000; SKP_int32 targetRate_bps = 25000; SKP_int32 packetSize_ms = 20; SKP_int32 frameSizeReadFromFile_ms = 10; @@ -220,7 +218,8 @@ int main( int argc, char* argv[] ) /* Set Encoder parameters */ encControl.API_sampleRate = API_fs_Hz; encControl.maxInternalSampleRate = max_internal_fs_Hz; - encControl.packetSize = ( packetSize_ms * API_fs_Hz ) / 1000; + encControl.minInternalSampleRate = min_internal_fs_Hz; + encControl.payloadSize_ms = packetSize_ms; encControl.packetLossPercentage = packetLoss_perc; encControl.useInBandFEC = INBandFEC_enabled; encControl.useDTX = DTX_enabled; @@ -232,18 +231,19 @@ int main( int argc, char* argv[] ) exit( 0 ); } - tottime = 0; totPackets = 0; totActPackets = 0; smplsSinceLastPacket = 0; sumBytes = 0.0; sumActBytes = 0.0; - + while( 1 ) { - /* Init range coder */ - ec_byte_writeinit_buffer( &range_enc_celt_buf, range_buf, MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES ); - ec_enc_init( &range_enc_celt_state, &range_enc_celt_buf ); - + if( smplsSinceLastPacket == 0 ) { + /* Init range coder */ + ec_byte_writeinit_buffer( &range_enc_celt_buf, range_buf, MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES ); + ec_enc_init( &range_enc_celt_state, &range_enc_celt_buf ); + } + /* Read input from file */ counter = fread( in, sizeof( SKP_int16 ), ( frameSizeReadFromFile_ms * API_fs_Hz ) / 1000, speechInFile ); #ifdef _SYSTEM_IS_BIG_ENDIAN @@ -256,18 +256,12 @@ int main( int argc, char* argv[] ) /* max payload size */ nBytes = MAX_BYTES_PER_FRAME * MAX_INPUT_FRAMES; - starttime = GetHighResolutionTime(); /* Silk Encoder */ ret = SKP_Silk_SDK_Encode( psEnc, &encControl, in, (SKP_int16)counter, &range_enc_celt_state, &nBytes ); if( ret ) { printf( "\nSKP_Silk_Encode returned %d", ret ); break; } - tottime += GetHighResolutionTime() - starttime; - - /* Finish up the range coder */ - ec_enc_done( &range_enc_celt_state ); - #ifdef SKP_MACRO_COUNT Ops = SKP_SaveResetCount(); @@ -276,11 +270,15 @@ int main( int argc, char* argv[] ) #endif /* Get packet size */ - packetSize_ms = ( SKP_int )( ( 1000 * ( SKP_int32 )encControl.packetSize ) / encControl.API_sampleRate ); + packetSize_ms = encControl.payloadSize_ms; smplsSinceLastPacket += ( SKP_int )counter; if( ( ( 1000 * smplsSinceLastPacket ) / API_fs_Hz ) == packetSize_ms ) { + + /* Finish up the range coder */ + ec_enc_done( &range_enc_celt_state ); + /* Sends a dummy zero size packet in case of DTX period */ /* to make it work with the decoder test program. */ /* In practice should be handled by RTP sequence numbers */ @@ -301,13 +299,13 @@ int main( int argc, char* argv[] ) swap_endian( &nBytes_LE, 1 ); fwrite( &nBytes_LE, sizeof( SKP_int16 ), 1, bitOutFile ); #else - fwrite( &nBytes, sizeof( SKP_int16 ), 1, bitOutFile ); + fwrite( &nBytes, sizeof( SKP_int32 ), 1, bitOutFile ); #endif /* Write payload */ fwrite( range_buf, sizeof( SKP_uint8 ), nBytes, bitOutFile ); - if( !quiet ) { + if( !quiet && totPackets % 100 == 0 ) { fprintf( stderr, "\rPackets encoded: %d", totPackets ); } smplsSinceLastPacket = 0; @@ -318,7 +316,7 @@ int main( int argc, char* argv[] ) nBytes = -1; /* Write payload size */ - fwrite( &nBytes, sizeof( SKP_int16 ), 1, bitOutFile ); + fwrite( &nBytes, sizeof( SKP_int32 ), 1, bitOutFile ); /* Free Encoder */ free( psEnc ); @@ -331,7 +329,6 @@ int main( int argc, char* argv[] ) act_rate = 8.0 / packetSize_ms * sumActBytes / totActPackets; if( !quiet ) { printf( "\nFile length: %.3f s", filetime ); - printf( "\nTime for encoding: %.3f s (%.3f%% of realtime)", 1e-6 * tottime, 1e-4 * tottime / filetime ); printf( "\nAverage bitrate: %.3f kbps", avg_rate ); printf( "\nActive bitrate: %.3f kbps", act_rate ); #ifdef SKP_MACRO_COUNT @@ -341,9 +338,6 @@ int main( int argc, char* argv[] ) #endif printf( "\n\n" ); } else { - /* print time and % of realtime */ - printf("%.3f %.3f %d ", 1e-6 * tottime, 1e-4 * tottime / filetime, totPackets ); - /* print average and active bitrates */ printf( "%.3f %.3f ", avg_rate, act_rate ); #ifdef SKP_MACRO_COUNT @@ -355,8 +349,5 @@ int main( int argc, char* argv[] ) #endif } - /* Save timing file if TIC/TOC used */ - SKP_TimerSave("encoder_timings.txt"); - return 0; }