From ed67d2f56167b001f0c53c771c3cbbfcc53bbac1 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Thu, 7 Nov 2024 18:38:11 +0530 Subject: [PATCH] Fix for 3GPP issue 887: Noise burst during silence in ISM 2 at 48 kbps [x] Bug fix in generate_comfort_noise_dec_ivas_fx --- lib_dec/fd_cng_dec_fx.c | 952 ++++++++++++++++++++-------------------- 1 file changed, 476 insertions(+), 476 deletions(-) diff --git a/lib_dec/fd_cng_dec_fx.c b/lib_dec/fd_cng_dec_fx.c index ae5f0c2b1..cce8ed419 100644 --- a/lib_dec/fd_cng_dec_fx.c +++ b/lib_dec/fd_cng_dec_fx.c @@ -73,7 +73,7 @@ ivas_error createFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) #ifdef IVAS_FLOAT_FIXED void initFdCngDec_ivas_fx( DEC_CORE_HANDLE st, /* i/o: decoder state structure */ - Word16 scale ) + Word16 scale /*Q15*/ ) { /* Initialize common */ HANDLE_FD_CNG_DEC hFdCngDec; @@ -176,14 +176,14 @@ void initFdCngDec_ivas_fx( move16(); hFdCngDec->cna_rescale_fact_fx = 0; move16(); - hFdCngDec->cna_seed = 5687; + hFdCngDec->cna_seed = 5687; /*Q0*/ move16(); set16_fx( hFdCngDec->cna_cm_fx, 0, STEREO_DFT_BAND_MAX ); set16_fx( hFdCngDec->cna_g_state_fx, 0, STEREO_DFT_BAND_MAX ); st->CNG_mode = -1; move16(); - Copy( st->lsp_old_fx, st->lspCNG_fx, M ); + Copy( st->lsp_old_fx, st->lspCNG_fx, M ); /*Q15*/ #ifdef MSAN_FIX hFdCngDec->hFdCngCom->sid_frame_counter = 0; #endif @@ -192,7 +192,7 @@ void initFdCngDec_ivas_fx( void initFdCngDec_fx( DEC_CORE_HANDLE st, /* i/o: decoder state structure */ - Word16 scale ) + Word16 scale /*Q15*/ ) { /* Initialize common */ HANDLE_FD_CNG_DEC hFdCngDec; @@ -322,17 +322,17 @@ void initFdCngDec_fx( */ void configureFdCngDec_fx( HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: Contains the variables related to the CLDFB-based CNG process */ - Word16 bwidth, - Word32 total_brate, - Word16 L_frame, - const Word16 Last_L_frame, - const Word16 element_mode ) + Word16 bwidth, /*Q0*/ + Word32 total_brate, /*Q0*/ + Word16 L_frame, /*Q0*/ + const Word16 Last_L_frame, /*Q0*/ + const Word16 element_mode /*Q0*/ ) { Word16 j, stopBandFR; HANDLE_FD_CNG_COM hsCom = hFdCngDec->hFdCngCom; - hsCom->CngBandwidth = bwidth; + hsCom->CngBandwidth = bwidth; /*Q0*/ move16(); if ( EQ_16( hsCom->CngBandwidth, FB ) ) { @@ -342,7 +342,7 @@ void configureFdCngDec_fx( test(); IF( total_brate != FRAME_NO_DATA && NE_32( total_brate, SID_2k40 ) ) { - hsCom->CngBitrate = total_brate; + hsCom->CngBitrate = total_brate; /*Q0*/ move32(); } ELSE IF( EQ_32( hsCom->CngBitrate, -1 ) ) @@ -454,16 +454,16 @@ void configureFdCngDec_fx( } } } - hsCom->fftlen = hsCom->FdCngSetup.fftlen; + hsCom->fftlen = hsCom->FdCngSetup.fftlen; /*Q0*/ move16(); - hsCom->stopFFTbin = hsCom->FdCngSetup.stopFFTbin; + hsCom->stopFFTbin = hsCom->FdCngSetup.stopFFTbin; /*Q0*/ move16(); /* Configure the SID quantizer and the Confort Noise Generator */ hsCom->startBand = 2; move16(); - hsCom->stopBand = add( hsCom->FdCngSetup.sidPartitions[sub( hsCom->FdCngSetup.numPartitions, 1 )], 1 ); + hsCom->stopBand = add( hsCom->FdCngSetup.sidPartitions[( hsCom->FdCngSetup.numPartitions - 1 )], 1 ); /*Q0*/ move16(); initPartitions( hsCom->FdCngSetup.sidPartitions, hsCom->FdCngSetup.numPartitions, hsCom->startBand, hsCom->stopBand, hsCom->part, &hsCom->npart, hsCom->midband, hsCom->psize, hsCom->psize_norm, &hsCom->psize_norm_exp, hsCom->psize_inv, 0 ); @@ -485,9 +485,9 @@ void configureFdCngDec_fx( move16(); FOR( j = 0; j < hsCom->nCLDFBpart; j++ ) { - hsCom->CLDFBpart[j] = sub( hsCom->part[add( j, hsCom->nFFTpart )], sub( hsCom->stopFFTbin, hsCom->startBand ) ); + hsCom->CLDFBpart[j] = sub( hsCom->part[( j + hsCom->nFFTpart )], sub( hsCom->stopFFTbin, hsCom->startBand ) ); /*Q0*/ move16(); - hsCom->CLDFBpsize_inv[j] = hsCom->psize_inv[add( j, hsCom->nFFTpart )]; + hsCom->CLDFBpsize_inv[j] = hsCom->psize_inv[( j + hsCom->nFFTpart )]; /*Q15*/ move16(); } @@ -495,14 +495,14 @@ void configureFdCngDec_fx( move16(); if ( GT_16( stopBandFR, hsCom->stopFFTbin ) ) { - stopBandFR = hsCom->stopFFTbin; + stopBandFR = hsCom->stopFFTbin; /*Q0*/ move16(); } initPartitions( hsCom->FdCngSetup.shapingPartitions, hsCom->FdCngSetup.numShapingPartitions, hsCom->startBand, hsCom->stopFFTbin, hFdCngDec->part_shaping, &hFdCngDec->npart_shaping, hFdCngDec->midband_shaping, hFdCngDec->psize_shaping, hFdCngDec->psize_shaping_norm, &hFdCngDec->psize_shaping_norm_exp, hFdCngDec->psize_inv_shaping, stopBandFR ); - hFdCngDec->nFFTpart_shaping = hFdCngDec->npart_shaping; + hFdCngDec->nFFTpart_shaping = hFdCngDec->npart_shaping; /*Q0*/ move16(); SWITCH( hsCom->fftlen ) @@ -579,17 +579,17 @@ void deleteFdCngDec_fx( HANDLE_FD_CNG_DEC *hFdCngDec ) error */ Word16 ApplyFdCng_fx( - Word16 *timeDomainInput, /* i : pointer to time domain input */ + Word16 *timeDomainInput, /* i : pointer to time domain input Q*/ Word16 Q, #ifdef IVAS_CODE_CNG_FIX185_PLC_FADEOUT Word16 *powerSpectrum, #endif - Word32 **cldfbBufferReal, /* i/o: real part of the CLDFB buffer */ - Word32 **cldfbBufferImag, /* i/o: imaginary part of the CLDFB buffer */ + Word32 **cldfbBufferReal, /* i/o: real part of the CLDFB buffer cldfbBufferScale*/ + Word32 **cldfbBufferImag, /* i/o: imaginary part of the CLDFB buffer cldfbBufferScale*/ Word16 *cldfbBufferScale, /* o : pointer to the scalefactor for real and imaginary part of the CLDFB buffer */ Decoder_State *st, - const Word16 concealWholeFrame, /* i : binary flag indicating frame loss */ - Word16 is_music ) + const Word16 concealWholeFrame, /* i : binary flag indicating frame loss Q0*/ + Word16 is_music /*Q0*/ ) { Word16 j, k, nBins; Word16 s, s1, s2, num, denom; @@ -636,7 +636,7 @@ Word16 ApplyFdCng_fx( test(); move16(); } - cngNoiseLevel = hFdCngCom->cngNoiseLevel; + cngNoiseLevel = hFdCngCom->cngNoiseLevel; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ move32(); cngNoiseLevel_exp = &hFdCngCom->cngNoiseLevelExp; move16(); @@ -743,21 +743,21 @@ Word16 ApplyFdCng_fx( IF( hFdCngDec->partNoiseShape[k] != 0 ) { s1 = norm_l( hFdCngCom->sidNoiseEst[k] ); - L_tmp = L_shl( hFdCngCom->sidNoiseEst[k], s1 ); + L_tmp = L_shl( hFdCngCom->sidNoiseEst[k], s1 ); /*Q31 - hFdCngCom->sidNoiseEstExp + s1*/ L_tmp_exp = sub( hFdCngCom->sidNoiseEstExp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( L_tmp, L_tmp_exp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); L_tmp = L_shr( L_tmp, 1 ); s = add( L_tmp_exp, 1 ); - num = extract_h( L_tmp ); + num = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ s1 = norm_l( hFdCngDec->partNoiseShape[k] ); - L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); + L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); /*Q31 - hFdCngDec->partNoiseShape_exp + s1*/ L_tmp_exp = sub( hFdCngDec->partNoiseShape_exp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( L_tmp, L_tmp_exp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); s = sub( s, L_tmp_exp ); - denom = extract_h( L_tmp ); + denom = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ - facTab[k] = div_s( num, denom ); + facTab[k] = div_s( num, denom ); /*Q15 - s*/ move16(); facTabExp[k] = s; move16(); @@ -777,7 +777,7 @@ Word16 ApplyFdCng_fx( s = s_max( s_min( s, WORD32_BITS - 1 ), -( WORD32_BITS - 1 ) ); FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); + cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); /*Q31 - hFdCngDec->bandNoiseShape_exp*/ move32(); } } @@ -790,7 +790,7 @@ Word16 ApplyFdCng_fx( { FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); + cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); /*Q31 - hFdCngDec->bandNoiseShape_exp + s*/ move32(); } } @@ -807,7 +807,7 @@ Word16 ApplyFdCng_fx( test(); IF( !( EQ_16( st->element_mode, IVAS_CPE_TD ) ) || ( EQ_16( st->element_mode, IVAS_CPE_TD ) && !hFdCngDec->flag_dtx_mode && !st->VAD ) ) { - Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, nBins ); + Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, nBins ); /*Q31 - hFdCngDec->bandNoiseShape_exp*/ *cngNoiseLevel_exp = hFdCngDec->bandNoiseShape_exp; move16(); } @@ -832,7 +832,7 @@ Word16 ApplyFdCng_fx( Carry = 0; move16(); #ifdef BASOP_NOGLOB - L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); + L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); /*Q31*/ #else L_tmp = L_add_c( L_tmp, *( cngNoiseLevel + j ) ); #endif @@ -841,28 +841,28 @@ Word16 ApplyFdCng_fx( IF( *( cngNoiseLevel + j ) < 0 ) { - L_c = L_msuNs( L_c, 0, 0 ); + L_c = L_msuNs( L_c, 0, 0 ); /*Q-1*/ } IF( *( cngNoiseLevel + j ) >= 0 ) { #ifdef BASOP_NOGLOB - L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); + L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Q-1*/ #else L_c = L_macNs( L_c, 0, 0 ); #endif } } - L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); + L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); - L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16*/ + L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ L_tmp = Mpy_32_16_1( L_tmp, T_DIV_L_Frame[L_shl( L_mac( -28000, st->L_frame, 95 ), 1 - 15 )] ); /*Q16,exp -7*/ L_tmp_exp = add( L_tmp_exp, -7 ); /*->Q16, L_tmp_exp */ L_tmp_exp = add( L_tmp_exp, 31 - 16 ); /*->Q31, L_tmp_exp*/ #ifdef BASOP_NOGLOB - st->cngTDLevel = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); + st->cngTDLevel = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ #else st->cngTDLevel = round_fx( Sqrt32( L_tmp, &L_tmp_exp ) ); #endif @@ -901,7 +901,7 @@ Word16 ApplyFdCng_fx( #ifndef IVAS_CODE_CNG_FIX185_PLC_FADEOUT lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, 0 ); E_LPC_a_lsp_conversion( hFdCngCom->A_cng, lsp_cng, st->lspold_cng, M ); - Copy( lsp_cng, st->lspold_cng, M ); + Copy( lsp_cng, st->lspold_cng, M ); /*Q15*/ lsp2lsf_fx( lsp_cng, st->lsf_cng, M, st->sr_core ); #else @@ -982,7 +982,7 @@ Word16 ApplyFdCng_fx( hFdCngDec->bandNoiseShape_exp = hFdCngDec->msNoiseEst_exp; move16(); /* This sets the new CNG levels until a SID update overwrites it */ - Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ) ); /* This sets the new CNG levels until a SID update overwrites it */ + Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ) ); /* This sets the new CNG levels until a SID update overwrites it Q31 - hFdCngDec->bandNoiseShape_exp*/ *cngNoiseLevel_exp = hFdCngDec->bandNoiseShape_exp; move16(); #ifdef IVAS_CODE_CNG_FIX185_PLC_FADEOUT @@ -998,17 +998,17 @@ Word16 ApplyFdCng_fx( Carry = 0; move16(); #ifdef BASOP_NOGLOB /* Critical Carry/Overflow */ - L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); + L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); /*Q31*/ Overflow = 0; move16(); IF( *( cngNoiseLevel + j ) < 0 ) { - L_c = L_msuNs_co( L_c, 0, 0, &Carry, &Overflow ); + L_c = L_msuNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Q-1*/ } IF( *( cngNoiseLevel + j ) >= 0 ) { - L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); + L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Q-1*/ } #else L_tmp = L_add_c( L_tmp, *( cngNoiseLevel + j ) ); @@ -1024,17 +1024,17 @@ Word16 ApplyFdCng_fx( } #endif } - L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); + L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); - L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16*/ + L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ L_tmp = Mpy_32_16_1( L_tmp, T_DIV_L_Frame[L_shl( L_mac( -28000, st->L_frame, 95 ), 1 - 15 )] ); /*Q16,exp -7*/ L_tmp_exp = add( L_tmp_exp, -7 ); /*->Q16, L_tmp_exp */ L_tmp_exp = add( L_tmp_exp, 31 - 16 ); /*->Q31, L_tmp_exp*/ #ifdef BASOP_NOGLOB /* Critical Carry/Overflow */ - st->cngTDLevel = round_fx_o( Sqrt32( L_tmp, &L_tmp_exp ), &Overflow ); + st->cngTDLevel = round_fx_o( Sqrt32( L_tmp, &L_tmp_exp ), &Overflow ); /*Q15 - L_tmp_exp*/ move16(); #else st->cngTDLevel = round_fx( Sqrt32( L_tmp, &L_tmp_exp ) ); @@ -1116,21 +1116,21 @@ Word16 ApplyFdCng_fx( IF( hFdCngDec->partNoiseShape[k] != 0 ) { s1 = norm_l( hFdCngCom->sidNoiseEst[k] ); - L_tmp = L_shl( hFdCngCom->sidNoiseEst[k], s1 ); + L_tmp = L_shl( hFdCngCom->sidNoiseEst[k], s1 ); /*Q31 - hFdCngCom->sidNoiseEstExp + s1*/ L_tmp_exp = sub( hFdCngCom->sidNoiseEstExp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( hFdCngCom->sidNoiseEst[k], hFdCngCom->sidNoiseEstExp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); L_tmp = L_shr( L_tmp, 1 ); s = add( L_tmp_exp, 1 ); - num = extract_h( L_tmp ); + num = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ s1 = norm_l( hFdCngDec->partNoiseShape[k] ); - L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); + L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); /*Q31 - hFdCngDec->partNoiseShape_exp + s1*/ L_tmp_exp = sub( hFdCngDec->partNoiseShape_exp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( L_tmp, L_tmp_exp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); s = sub( s, L_tmp_exp ); - denom = extract_h( L_tmp ); + denom = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ - facTab[k] = div_s( num, denom ); + facTab[k] = div_s( num, denom ); /*Q15 - s*/ move16(); facTabExp[k] = s; move16(); @@ -1150,7 +1150,7 @@ Word16 ApplyFdCng_fx( s = s_max( s_min( s, WORD32_BITS - 1 ), -( WORD32_BITS - 1 ) ); FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); + cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); /*Q31 - hFdCngDec->bandNoiseShape_exp*/ move32(); } } @@ -1160,7 +1160,7 @@ Word16 ApplyFdCng_fx( { FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); + cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); /*Q31 - hFdCngDec->bandNoiseShape_exp + s*/ move32(); } } @@ -1204,16 +1204,16 @@ Word16 ApplyFdCng_fx( #ifdef IVAS_FLOAT_FIXED Word16 ApplyFdCng_ivas_fx( - Word16 *timeDomainInput, /* i : pointer to time domain input */ + Word16 *timeDomainInput, /* i : pointer to time domain input Q*/ Word16 Q, - Word32 *powerSpectrum, + Word32 *powerSpectrum, /*Q_power_spectrum*/ Word16 Q_power_spectrum, - Word32 **cldfbBufferReal, /* i/o: real part of the CLDFB buffer */ - Word32 **cldfbBufferImag, /* i/o: imaginary part of the CLDFB buffer */ + Word32 **cldfbBufferReal, /* i/o: real part of the CLDFB buffer cldfbBufferScale*/ + Word32 **cldfbBufferImag, /* i/o: imaginary part of the CLDFB buffer cldfbBufferScale*/ Word16 *cldfbBufferScale, /* o : pointer to the scalefactor for real and imaginary part of the CLDFB buffer */ Decoder_State *st, - const Word16 concealWholeFrame, /* i : binary flag indicating frame loss */ - Word16 is_music ) + const Word16 concealWholeFrame, /* i : binary flag indicating frame loss Q0*/ + Word16 is_music /*Q0*/ ) { Word16 j, k, nBins; Word16 s, s1, s2, num, denom; @@ -1239,7 +1239,7 @@ Word16 ApplyFdCng_ivas_fx( hFdCngDec = st->hFdCngDec; hFdCngCom = hFdCngDec->hFdCngCom; - Word32 *sidNoiseEst = hFdCngCom->sidNoiseEst; + Word32 *sidNoiseEst = hFdCngCom->sidNoiseEst; /*Q31 - hFdCngCom->sidNoiseEstExp*/ /* limit L_frame and core fs values for MDCT-Stereo modes which can have higher core sampling than 16kHz, but use a downsampled buffer */ L_frame = s_min( st->L_frame, L_FRAME16k ); @@ -1336,7 +1336,7 @@ Word16 ApplyFdCng_ivas_fx( j = 0; move16(); // s2 = -( WORD32_BITS - 1 ); - s2 = negate( sub( WORD32_BITS, 1 ) ); + s2 = -( WORD32_BITS - 1 ); move16(); FOR( k = 0; k < hFdCngCom->nFFTpart; k++ ) { @@ -1349,21 +1349,21 @@ Word16 ApplyFdCng_ivas_fx( IF( hFdCngDec->partNoiseShape[k] != 0 ) { s1 = norm_l( hFdCngCom->sidNoiseEst[k] ); - L_tmp = L_shl( hFdCngCom->sidNoiseEst[k], s1 ); + L_tmp = L_shl( hFdCngCom->sidNoiseEst[k], s1 ); /*Q31 - hFdCngCom->sidNoiseEstExp + s1*/ L_tmp_exp = sub( hFdCngCom->sidNoiseEstExp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( L_tmp, L_tmp_exp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); L_tmp = L_shr( L_tmp, 1 ); s = add( L_tmp_exp, 1 ); - num = extract_h( L_tmp ); + num = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ s1 = norm_l( hFdCngDec->partNoiseShape[k] ); - L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); + L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); /*Q31 - hFdCngDec->partNoiseShape_exp + s1*/ L_tmp_exp = sub( hFdCngDec->partNoiseShape_exp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( L_tmp, L_tmp_exp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); s = sub( s, L_tmp_exp ); - denom = extract_h( L_tmp ); + denom = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ - facTab[k] = div_s( num, denom ); + facTab[k] = div_s( num, denom ); /*Q15 - s*/ move16(); facTabExp[k] = s; move16(); @@ -1371,7 +1371,7 @@ Word16 ApplyFdCng_ivas_fx( /* Set unique exponent, if mantissa is equal to zero */ IF( EQ_16( facTab[k], 0 ) ) { - facTabExp[k] = negate( sub( WORD32_BITS, 1 ) ); + facTabExp[k] = -( ( WORD32_BITS - 1 ) ); move16(); } s2 = s_max( s2, facTabExp[k] ); @@ -1380,10 +1380,10 @@ Word16 ApplyFdCng_ivas_fx( FOR( k = 0; k < hFdCngCom->nFFTpart; k++ ) { s = sub( facTabExp[k], s2 ); - s = s_max( s_min( s, sub( WORD32_BITS, 1 ) ), negate( sub( WORD32_BITS, 1 ) ) ); + s = s_max( s_min( s, ( WORD32_BITS - 1 ) ), -( ( WORD32_BITS - 1 ) ) ); FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); + cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); /*Q31 - hFdCngDec->bandNoiseShape_exp*/ move32(); } } @@ -1399,7 +1399,7 @@ Word16 ApplyFdCng_ivas_fx( Word16 q_norm = L_norm_arr( &cngNoiseLevel[j], sub( FFTCLDFBLEN, j ) ); IF( GT_16( s, q_norm ) ) { - scale_sig32( cngNoiseLevel, j, sub( q_norm, s ) ); + scale_sig32( cngNoiseLevel, j, sub( q_norm, s ) ); /*q_norm*/ e_shift = sub( s, q_norm ); } } @@ -1407,7 +1407,7 @@ Word16 ApplyFdCng_ivas_fx( { FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], sub( s, e_shift ) ); + cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], sub( s, e_shift ) ); /*Q: s*/ move32(); } } @@ -1424,7 +1424,7 @@ Word16 ApplyFdCng_ivas_fx( test(); IF( !( EQ_16( st->element_mode, IVAS_CPE_TD ) ) || ( EQ_16( st->element_mode, IVAS_CPE_TD ) && !hFdCngDec->flag_dtx_mode && !st->VAD ) ) { - Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, nBins ); + Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, nBins ); /*Q31 - hFdCngDec->bandNoiseShape_exp*/ *cngNoiseLevel_exp = hFdCngDec->bandNoiseShape_exp; move16(); } @@ -1442,7 +1442,7 @@ Word16 ApplyFdCng_ivas_fx( Carry = 0; move16(); #ifdef BASOP_NOGLOB - L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); + L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); /*Q31*/ #else L_tmp = L_add_c( L_tmp, *( cngNoiseLevel + j ) ); #endif @@ -1451,28 +1451,28 @@ Word16 ApplyFdCng_ivas_fx( IF( *( cngNoiseLevel + j ) < 0 ) { - L_c = L_msuNs( L_c, 0, 0 ); + L_c = L_msuNs( L_c, 0, 0 ); /*Q-1*/ } IF( *( cngNoiseLevel + j ) >= 0 ) { #ifdef BASOP_NOGLOB - L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); + L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Q-1*/ #else L_c = L_macNs( L_c, 0, 0 ); #endif } } - L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); + L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); - L_tmp = Mpy_32_16_1( L_tmp, 1 ); + L_tmp = Mpy_32_16_1( L_tmp, 1 ); /*Q16 - L_tmp_exp*/ L_tmp = Mpy_32_16_1( L_tmp, shr( T_DIV_L_Frame[L_shl( L_mac( -28000, NORM_MDCT_FACTOR, 95 ), 1 - 15 )], 1 ) ); /*Q16,exp -7*/ L_tmp_exp = add( L_tmp_exp, -7 ); /*->Q16, L_tmp_exp */ L_tmp_exp = add( L_tmp_exp, 31 - 16 ); /*->Q31, L_tmp_exp*/ #ifdef BASOP_NOGLOB - st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); + st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ #else st->hTcxDec->conCngLevelBackgroundTrace = round_fx( Sqrt32( L_tmp, &L_tmp_exp ) ); #endif @@ -1493,7 +1493,7 @@ Word16 ApplyFdCng_ivas_fx( Carry = 0; move16(); #ifdef BASOP_NOGLOB - L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); + L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); /*Q31 - L_tmp_exp*/ #else L_tmp = L_add_c( L_tmp, *( cngNoiseLevel + j ) ); #endif @@ -1502,28 +1502,28 @@ Word16 ApplyFdCng_ivas_fx( IF( *( cngNoiseLevel + j ) < 0 ) { - L_c = L_msuNs( L_c, 0, 0 ); + L_c = L_msuNs( L_c, 0, 0 ); /*Q-1*/ } IF( *( cngNoiseLevel + j ) >= 0 ) { #ifdef BASOP_NOGLOB - L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); + L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Q-1*/ #else L_c = L_macNs( L_c, 0, 0 ); #endif } } - L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); + L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); - L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16*/ + L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ L_tmp = Mpy_32_16_1( L_tmp, T_DIV_L_Frame[L_shl( L_mac( -28000, st->L_frame, 95 ), 1 - 15 )] ); /*Q16,exp -7*/ L_tmp_exp = add( L_tmp_exp, -7 ); /*->Q16, L_tmp_exp */ L_tmp_exp = add( L_tmp_exp, 31 - 16 ); /*->Q31, L_tmp_exp*/ #ifdef BASOP_NOGLOB - st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); + st->hTcxDec->conCngLevelBackgroundTrace = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ move16(); #else st->hTcxDec->conCngLevelBackgroundTrace = round_fx( Sqrt32( L_tmp, &L_tmp_exp ) ); @@ -1542,7 +1542,7 @@ Word16 ApplyFdCng_ivas_fx( Carry = 0; move16(); #ifdef BASOP_NOGLOB - L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); + L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); /*Q31 - L_tmp_exp*/ #else L_tmp = L_add_c( L_tmp, *( cngNoiseLevel + j ) ); #endif @@ -1551,28 +1551,28 @@ Word16 ApplyFdCng_ivas_fx( IF( *( cngNoiseLevel + j ) < 0 ) { - L_c = L_msuNs( L_c, 0, 0 ); + L_c = L_msuNs( L_c, 0, 0 ); /*Q-1*/ } IF( *( cngNoiseLevel + j ) >= 0 ) { #ifdef BASOP_NOGLOB - L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); + L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Q-1*/ #else L_c = L_macNs( L_c, 0, 0 ); #endif } } - L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); + L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); - L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16*/ + L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ L_tmp = Mpy_32_16_1( L_tmp, T_DIV_L_Frame[L_shl( L_mac( -28000, st->L_frame, 95 ), 1 - 15 )] ); /*Q16,exp -7*/ L_tmp_exp = add( L_tmp_exp, -7 ); /*->Q16, L_tmp_exp */ L_tmp_exp = add( L_tmp_exp, 31 - 16 ); /*->Q31, L_tmp_exp*/ #ifdef BASOP_NOGLOB - st->cngTDLevel = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); + st->cngTDLevel = round_fx_sat( Sqrt32( L_tmp, &L_tmp_exp ) ); /*Q15 - L_tmp_exp*/ #else st->cngTDLevel = round_fx( Sqrt32( L_tmp, &L_tmp_exp ) ); #endif @@ -1604,7 +1604,7 @@ Word16 ApplyFdCng_ivas_fx( move32(); FOR( j = hFdCngCom->startBand; j < hFdCngCom->stopFFTbin; j++ ) { - L_tmp = L_add_sat( L_tmp, L_shl_sat( cngNoiseLevel[j], sub( 31, *cngNoiseLevel_exp ) ) ); + L_tmp = L_add_sat( L_tmp, L_shl_sat( cngNoiseLevel[j], sub( 31, *cngNoiseLevel_exp ) ) ); /*Q31*/ } L_tmp_exp = 0; move16(); @@ -1624,9 +1624,9 @@ Word16 ApplyFdCng_ivas_fx( { lpc_from_spectrum( hFdCngCom, hFdCngCom->startBand, hFdCngCom->stopFFTbin, 0 ); E_LPC_a_lsp_conversion( hFdCngCom->A_cng, lsp_cng, st->lspold_cng, M ); - Copy( lsp_cng, st->lspold_cng, M ); + Copy( lsp_cng, st->lspold_cng, M ); /*Q15*/ - lsp2lsf_fx( lsp_cng, st->lsf_cng, M, st->sr_core ); + lsp2lsf_fx( lsp_cng, st->lsf_cng, M, st->sr_core ); /*x2.56*/ } st->plcBackgroundNoiseUpdated = 1; @@ -1659,7 +1659,7 @@ Word16 ApplyFdCng_ivas_fx( hFdCngDec->bandNoiseShape_exp = hFdCngDec->msNoiseEst_exp; move16(); /* This sets the new CNG levels until a SID update overwrites it */ - Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ) ); /* This sets the new CNG levels until a SID update overwrites it */ + Copy32( hFdCngDec->bandNoiseShape, cngNoiseLevel, sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ) ); /* This sets the new CNG levels until a SID update overwrites it */ /*Q31 - hFdCngDec->bandNoiseShape_exp*/ *cngNoiseLevel_exp = hFdCngDec->bandNoiseShape_exp; move16(); @@ -1672,18 +1672,18 @@ Word16 ApplyFdCng_ivas_fx( Carry = 0; move16(); -#ifdef BASOP_NOGLOB /* Critical Carry/Overflow */ - L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); +#ifdef BASOP_NOGLOB /* Critical Carry/Overflow */ + L_tmp = L_add_co( L_tmp, *( cngNoiseLevel + j ), &Carry, &Overflow ); /*Q31 - L_tmp_exp*/ Overflow = 0; move16(); IF( *( cngNoiseLevel + j ) < 0 ) { - L_c = L_msuNs_co( L_c, 0, 0, &Carry, &Overflow ); + L_c = L_msuNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Q-1*/ } IF( *( cngNoiseLevel + j ) >= 0 ) { - L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); + L_c = L_macNs_co( L_c, 0, 0, &Carry, &Overflow ); /*Q-1*/ } #else L_tmp = L_add_c( L_tmp, *( cngNoiseLevel + j ) ); @@ -1699,17 +1699,17 @@ Word16 ApplyFdCng_ivas_fx( } #endif } - L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); + L_tmp = norm_llQ31( L_c, L_tmp, &L_tmp_exp ); /*Q31 - L_tmp_exp*/ L_tmp_exp = sub( add( L_tmp_exp, *cngNoiseLevel_exp ), 1 ); - L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16*/ + L_tmp = Mpy_32_16_1( L_tmp, hFdCngCom->fftlen ); /*Q16 - L_tmp_exp*/ L_tmp = Mpy_32_16_1( L_tmp, T_DIV_L_Frame[L_shl( L_mac( -28000, st->L_frame, 95 ), 1 - 15 )] ); /*Q16,exp -7*/ L_tmp_exp = add( L_tmp_exp, -7 ); /*->Q16, L_tmp_exp */ L_tmp_exp = add( L_tmp_exp, 31 - 16 ); /*->Q31, L_tmp_exp*/ -#ifdef BASOP_NOGLOB /* Critical Carry/Overflow */ - st->cngTDLevel = round_fx_o( Sqrt32( L_tmp, &L_tmp_exp ), &Overflow ); +#ifdef BASOP_NOGLOB /* Critical Carry/Overflow */ + st->cngTDLevel = round_fx_o( Sqrt32( L_tmp, &L_tmp_exp ), &Overflow ); /*Q15 - L_tmp_exp*/ #else st->cngTDLevel = round_fx( Sqrt32( L_tmp, &L_tmp_exp ) ); #endif @@ -1740,7 +1740,7 @@ Word16 ApplyFdCng_ivas_fx( &hFdCngDec->partNoiseShape_exp ); IF( EQ_16( st->element_mode, IVAS_CPE_DFT ) ) { - Copy32( hFdCngDec->hFdCngCom->sidNoiseEst, hFdCngDec->hFdCngCom->sidNoiseEstLp, NPART ); + Copy32( hFdCngDec->hFdCngCom->sidNoiseEst, hFdCngDec->hFdCngCom->sidNoiseEstLp, NPART ); /*Q31 - hFdCngDec->sidNoiseEstExp*/ } } @@ -1758,7 +1758,7 @@ Word16 ApplyFdCng_ivas_fx( { if ( EQ_16( st->element_mode, IVAS_CPE_DFT ) ) { - sidNoiseEst = hFdCngCom->sidNoiseEstLp; + sidNoiseEst = hFdCngCom->sidNoiseEstLp; /*Q31 - hFdCngDec->sidNoiseEstExp*/ } /* Interpolate the CLDFB band levels from the SID (partition) levels */ IF( GT_16( hFdCngCom->regularStopBand, hFdCngCom->numCoreBands ) ) @@ -1770,7 +1770,7 @@ Word16 ApplyFdCng_ivas_fx( move16(); } - s2 = negate( sub( WORD32_BITS, 1 ) ); + s2 = -( ( WORD32_BITS - 1 ) ); move16(); /* Shape the SID noise levels in each FFT bin */ j = 0; @@ -1785,21 +1785,21 @@ Word16 ApplyFdCng_ivas_fx( IF( hFdCngDec->partNoiseShape[k] != 0 ) { s1 = norm_l( sidNoiseEst[k] ); - L_tmp = L_shl( sidNoiseEst[k], s1 ); + L_tmp = L_shl( sidNoiseEst[k], s1 ); /*Q31 - ( hFdCngCom->sidNoiseEstExp - s1 )*/ L_tmp_exp = sub( hFdCngCom->sidNoiseEstExp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( sidNoiseEst[k], hFdCngCom->sidNoiseEstExp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); L_tmp = L_shr( L_tmp, 1 ); s = add( L_tmp_exp, 1 ); - num = extract_h( L_tmp ); + num = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ s1 = norm_l( hFdCngDec->partNoiseShape[k] ); - L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); + L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); /*Q31 - ( hFdCngDec->partNoiseShape_ex - s1 )*/ L_tmp_exp = sub( hFdCngDec->partNoiseShape_exp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( L_tmp, L_tmp_exp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); s = sub( s, L_tmp_exp ); - denom = extract_h( L_tmp ); + denom = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ - facTab[k] = div_s( num, denom ); + facTab[k] = div_s( num, denom ); /*Q15 - s*/ move16(); facTabExp[k] = s; move16(); @@ -1807,7 +1807,7 @@ Word16 ApplyFdCng_ivas_fx( /* Set unique exponent, IF mantissa is equal to zero */ IF( EQ_16( facTab[k], 0 ) ) { - facTabExp[k] = negate( sub( WORD32_BITS, 1 ) ); + facTabExp[k] = -( ( WORD32_BITS - 1 ) ); move16(); } s2 = s_max( s2, facTabExp[k] ); @@ -1820,10 +1820,10 @@ Word16 ApplyFdCng_ivas_fx( FOR( k = 0; k < hFdCngCom->nFFTpart; k++ ) { s = sub( facTabExp[k], s2 ); - s = s_max( s_min( s, sub( WORD32_BITS, 1 ) ), negate( sub( WORD32_BITS, 1 ) ) ); + s = s_max( s_min( s, ( WORD32_BITS - 1 ) ), -( ( WORD32_BITS - 1 ) ) ); FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); + cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); /*Q31 - hFdCngDec->bandNoiseShape_exp*/ move32(); } } @@ -1833,7 +1833,7 @@ Word16 ApplyFdCng_ivas_fx( { FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); + cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); /*Q31 - hFdCngDec->bandNoiseShape_exp + s*/ move32(); } } @@ -1845,7 +1845,7 @@ Word16 ApplyFdCng_ivas_fx( { IF( !( LT_16( hFdCngCom->msFrCnt_init_counter, hFdCngCom->msFrCnt_init_thresh ) ) ) { - s2 = negate( sub( WORD32_BITS, 1 ) ); + s2 = -( ( WORD32_BITS - 1 ) ); /* Shape the SID noise levels in each FFT bin */ j = 0; move16(); @@ -1859,21 +1859,21 @@ Word16 ApplyFdCng_ivas_fx( IF( hFdCngDec->partNoiseShape[k] != 0 ) { s1 = norm_l( hFdCngCom->sidNoiseEstLp[k] ); - L_tmp = L_shl( hFdCngCom->sidNoiseEstLp[k], s1 ); + L_tmp = L_shl( hFdCngCom->sidNoiseEstLp[k], s1 ); /*Q31 - ( hFdCngCom->sidNoiseEstExp - s1 )*/ L_tmp_exp = sub( hFdCngCom->sidNoiseEstExp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( hFdCngCom->sidNoiseEstLp[k], hFdCngCom->sidNoiseEstExp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); L_tmp = L_shr( L_tmp, 1 ); s = add( L_tmp_exp, 1 ); - num = extract_h( L_tmp ); + num = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ s1 = norm_l( hFdCngDec->partNoiseShape[k] ); - L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); + L_tmp = L_shl( hFdCngDec->partNoiseShape[k], s1 ); /*Q31 - ( hFdCngDec->partNoiseShape_exp - s1 )*/ L_tmp_exp = sub( hFdCngDec->partNoiseShape_exp, s1 ); L_tmp = BASOP_Util_Add_Mant32Exp( L_tmp, L_tmp_exp, DELTA_MANTISSA_W32, DELTA_EXPONENT, &L_tmp_exp ); s = sub( s, L_tmp_exp ); - denom = extract_h( L_tmp ); + denom = extract_h( L_tmp ); /*Q15 - L_tmp_exp*/ - facTab[k] = div_s( num, denom ); + facTab[k] = div_s( num, denom ); /*Q15 - s*/ move16(); facTabExp[k] = s; move16(); @@ -1897,7 +1897,7 @@ Word16 ApplyFdCng_ivas_fx( s = s_max( s_min( s, sub( WORD32_BITS, 1 ) ), negate( sub( WORD32_BITS, 1 ) ) ); FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); + cngNoiseLevel[j] = L_shl( Mpy_32_16_1( hFdCngDec->bandNoiseShape[j], facTab[k] ), s ); /*Q31 - hFdCngDec->bandNoiseShape_exp*/ move32(); } } @@ -1907,7 +1907,7 @@ Word16 ApplyFdCng_ivas_fx( { FOR( ; j <= hFdCngCom->part[k]; j++ ) { - cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); + cngNoiseLevel[j] = L_shl( cngNoiseLevel[j], s ); /*Q31 - hFdCngDec->bandNoiseShape_exp + s*/ move32(); } } @@ -1948,7 +1948,7 @@ Word16 ApplyFdCng_ivas_fx( void */ void perform_noise_estimation_dec_fx( - const Word16 *timeDomainInput, /* i: pointer to time domain input */ + const Word16 *timeDomainInput, /* i: pointer to time domain input Q*/ const Word16 Q, #ifdef IVAS_CODE_CNG_FIX185_PLC_FADEOUT float *power_spectrum, @@ -1977,22 +1977,22 @@ void perform_noise_estimation_dec_fx( /* pointer initialization */ - periodog = hFdCngDec->hFdCngCom->periodog; - fftBuffer = hFdCngDec->hFdCngCom->fftBuffer; + periodog = hFdCngDec->hFdCngCom->periodog; /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ + fftBuffer = hFdCngDec->hFdCngCom->fftBuffer; /*Q31 - hFdCngDec->hFdCngCom->fftBuffer_exp*/ - part = hFdCngDec->part_shaping; - psize_inv = hFdCngDec->psize_inv_shaping; - psize_norm = hFdCngDec->psize_shaping_norm; + part = hFdCngDec->part_shaping; /*Q0*/ + psize_inv = hFdCngDec->psize_inv_shaping; /*Q15*/ + psize_norm = hFdCngDec->psize_shaping_norm; /*Q15 - hFdCngDec->psize_shaping_norm_exp*/ /* variable initialization */ - startBand = hFdCngDec->hFdCngCom->startBand; + startBand = hFdCngDec->hFdCngCom->startBand; /*Q0*/ move16(); - stopFFTbin = hFdCngDec->hFdCngCom->stopFFTbin; + stopFFTbin = hFdCngDec->hFdCngCom->stopFFTbin; /*Q0*/ move16(); - npart = hFdCngDec->npart_shaping; + npart = hFdCngDec->npart_shaping; /*Q0*/ move16(); - nFFTpart = hFdCngDec->nFFTpart_shaping; + nFFTpart = hFdCngDec->nFFTpart_shaping; /*Q0*/ move16(); /* Perform STFT analysis */ @@ -2278,36 +2278,36 @@ void perform_noise_estimation_dec_fx( len = sub( stopFFTbin, startBand ); - s = getScaleFactor32( &fftBuffer[shl( startBand, 1 )], shl( len, 1 ) ); + s = getScaleFactor32( &fftBuffer[( startBand * 2 )], shl( len, 1 ) ); s = sub( s, 1 ); ptr_per = periodog; IF( startBand == 0 ) { /* DC component */ - tmp_r = extract_h( L_shl( fftBuffer[0], s ) ); + tmp_r = extract_h( L_shl( fftBuffer[0], s ) ); /*Q15 - fftBuffer_exp + s*/ - tmp = L_mult( tmp_r, tmp_r ); - *ptr_per = tmp; + tmp = L_mult( tmp_r, tmp_r ); /*Q31 - 2*(fftBuffer_exp - s)*/ + *ptr_per = tmp; /*Q31 - 2*(fftBuffer_exp - s)*/ move32(); ptr_per++; - ptr_r = fftBuffer + 2; + ptr_r = fftBuffer + 2; /*Q31 - fftBuffer_exp*/ len = sub( len, 1 ); } ELSE { - ptr_r = fftBuffer + shl( startBand, 1 ); + ptr_r = fftBuffer + shl( startBand, 1 ); /*fftBuffer_exp*/ } ptr_i = ptr_r + 1; FOR( i = 0; i < len; i++ ) { - tmp_r = extract_h( L_shl( *ptr_r, s ) ); - tmp_i = extract_h( L_shl( *ptr_i, s ) ); + tmp_r = extract_h( L_shl( *ptr_r, s ) ); /*Q15 - fftBuffer_exp + s*/ + tmp_i = extract_h( L_shl( *ptr_i, s ) ); /*Q15 - fftBuffer_exp + s*/ - tmp = L_mac( L_mult( tmp_r, tmp_r ), tmp_i, tmp_i ); - *ptr_per = tmp; + tmp = L_mac( L_mult( tmp_r, tmp_r ), tmp_i, tmp_i ); /*Q31 - 2*(fftBuffer_exp - s)*/ + *ptr_per = tmp; /*Q31 - 2*(fftBuffer_exp - s)*/ move32(); ptr_r += 2; @@ -2348,7 +2348,7 @@ void perform_noise_estimation_dec_fx( len = sub( stopFFTbin, startBand ); FOR( i = 0; i < len; i++ ) { - hFdCngDec->hFdCngCom->periodog[i] = Mpy_32_16_1( hFdCngDec->hFdCngCom->periodog[i], fac ); + hFdCngDec->hFdCngCom->periodog[i] = Mpy_32_16_1( hFdCngDec->hFdCngCom->periodog[i], fac ); /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ move32(); } hFdCngDec->hFdCngCom->periodog_exp = add( hFdCngDec->hFdCngCom->periodog_exp, sub( 2, s ) ); @@ -2404,17 +2404,17 @@ void perform_noise_estimation_dec_fx( #ifdef IVAS_FLOAT_FIXED void perform_noise_estimation_dec_ivas_fx( - const Word16 *timeDomainInput, /* i: pointer to time domain input */ + const Word16 *timeDomainInput, /* i: pointer to time domain input Q*/ const Word16 Q, - Word32 *power_spectrum, + Word32 *power_spectrum, /*Q_power_spectrum*/ Word16 Q_power_spectrum, HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure containing all buffers and variables */ - const Word16 element_mode, /* i : element mode */ - const Word16 bwidth, /* i : audio bandwidth */ - const Word16 L_frame, /* i : frame length at internal Fs */ - const Word16 last_L_frame, /* i : frame length of the last frame at internal Fs */ - const Word32 last_core_brate, /* i : previous frame core bitrate */ - const Word16 VAD /* i : VAD flag in the decoder */ + const Word16 element_mode, /* i : element mode Q0*/ + const Word16 bwidth, /* i : audio bandwidth Q0*/ + const Word16 L_frame, /* i : frame length at internal Fs Q0*/ + const Word16 last_L_frame, /* i : frame length of the last frame at internal Fs Q0*/ + const Word32 last_core_brate, /* i : previous frame core bitrate Q0*/ + const Word16 VAD /* i : VAD flag in the decoder Q0*/ ) { Word16 i, p, fftBuffer_exp = 0; @@ -2442,15 +2442,15 @@ void perform_noise_estimation_dec_ivas_fx( /* pointer initialization */ - periodog = hFdCngDec->hFdCngCom->periodog; - fftBuffer = hFdCngDec->hFdCngCom->fftBuffer; - ptr_per = periodog; - msPeriodog = hFdCngDec->msPeriodog; - msNoiseEst = hFdCngDec->msNoiseEst; + periodog = hFdCngDec->hFdCngCom->periodog; /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ + fftBuffer = hFdCngDec->hFdCngCom->fftBuffer; /*Q31 - hFdCngDec->hFdCngCom->fftBuffer_exp*/ + ptr_per = periodog; /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ + msPeriodog = hFdCngDec->msPeriodog; /*Q31 - hFdCngDec->msPeriodog_exp*/ + msNoiseEst = hFdCngDec->msNoiseEst; /*Q31 - hFdCngDec->msNoiseEst_exp*/ - part = hFdCngDec->part_shaping; - psize_inv = hFdCngDec->psize_inv_shaping; - psize_norm = hFdCngDec->psize_shaping_norm; + part = hFdCngDec->part_shaping; /*Q0*/ + psize_inv = hFdCngDec->psize_inv_shaping; /*Q15*/ + psize_norm = hFdCngDec->psize_shaping_norm; /*Q15 - hFdCngDec->psize_shaping_norm_exp*/ /* variable initialization */ startBand = hFdCngDec->hFdCngCom->startBand; @@ -2494,39 +2494,39 @@ void perform_noise_estimation_dec_ivas_fx( /* Calculate periodogram (squared magnitude in each FFT bin) */ IF( startBand == 0 ) { - W_tmp = W_mult0_32_32( fftBuffer[0], fftBuffer[0] ); + W_tmp = W_mult0_32_32( fftBuffer[0], fftBuffer[0] ); /*Q31 - 2*fftBuffer_exp*/ tmp_s = W_norm( W_tmp ); - ( *ptr_per ) = W_extract_h( W_shl( W_tmp, tmp_s ) ); + ( *ptr_per ) = W_extract_h( W_shl( W_tmp, tmp_s ) ); /*tmp_q*/ tmp_q = sub( add( i_mult( sub( 31, fftBuffer_exp ), 2 ), tmp_s ), 32 ); min_q = tmp_q; move16(); ptr_per++; - ptr_r = fftBuffer + 2; + ptr_r = fftBuffer + 2; /*Q31 - fftBuffer_exp*/ } ELSE { - ptr_r = fftBuffer + i_mult( 2, startBand ); + ptr_r = fftBuffer + i_mult( 2, startBand ); /*Q31 - fftBuffer_exp*/ } - ptr_i = ptr_r + 1; + ptr_i = ptr_r + 1; /*Q31 - fftBuffer_exp*/ FOR( ; ptr_per < periodog + sub( stopFFTbin, startBand ); ptr_per++ ) { - W_tmp = W_add( W_mult0_32_32( ( *ptr_r ), ( *ptr_r ) ), W_mult0_32_32( ( *ptr_i ), ( *ptr_i ) ) ); + W_tmp = W_add( W_mult0_32_32( ( *ptr_r ), ( *ptr_r ) ), W_mult0_32_32( ( *ptr_i ), ( *ptr_i ) ) ); /*Q31 - 2*(fftBuffer_exp)*/ tmp_s = W_norm( W_tmp ); tmp_q = sub( add( i_mult( sub( 31, fftBuffer_exp ), 2 ), tmp_s ), 32 ); - *ptr_per = W_extract_h( W_shl( W_tmp, tmp_s ) ); + *ptr_per = W_extract_h( W_shl( W_tmp, tmp_s ) ); /*tmp_q*/ IF( LT_16( tmp_q, min_q ) ) { - reIter = ptr_per; + reIter = ptr_per; /*tmp_q*/ Word16 diff; diff = sub( min_q, tmp_q ); WHILE( reIter > periodog ) { reIter--; - *reIter = L_shr( *reIter, diff ); + *reIter = L_shr( *reIter, diff ); /*tmp_q*/ move32(); } min_q = tmp_q; @@ -2536,7 +2536,7 @@ void perform_noise_estimation_dec_ivas_fx( { Word16 diff; diff = sub( tmp_q, min_q ); - ( *ptr_per ) = L_shr( ( *ptr_per ), diff ); + ( *ptr_per ) = L_shr( ( *ptr_per ), diff ); /*min_q*/ } /* Rescale to get energy/sample: it should be 2*(1/N)*(2/N), parseval relation with 1/N,*2 for nrg computed till Nyquist only, 2/N as windowed samples correspond to half a frame*/ @@ -2560,7 +2560,7 @@ void perform_noise_estimation_dec_ivas_fx( move16(); FOR( p = 0; p < stopFFTbin - startBand; p++ ) { - periodog[p] = L_shl( periodog[p], tmp_s ); + periodog[p] = L_shl( periodog[p], tmp_s ); /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ move32(); } } @@ -2576,9 +2576,9 @@ void perform_noise_estimation_dec_ivas_fx( move16(); FOR( ; i <= part[p]; i++ ) { - temp = L_add( temp, periodog[i] ); + temp = L_add( temp, periodog[i] ); /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ } - msPeriodog[p] = Mpy_32_16_1( temp, psize_inv[p] ); // Qtemp = Qperiodog + msPeriodog[p] = Mpy_32_16_1( temp, psize_inv[p] ); /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ move32(); } @@ -2596,7 +2596,7 @@ void perform_noise_estimation_dec_ivas_fx( { FOR( p = 0; p < NPART_SHAPING; p++ ) { - msPeriodog[p] = L_shr( msPeriodog[p], sub( -16, hFdCngDec->msPeriodog_exp ) ); + msPeriodog[p] = L_shr( msPeriodog[p], sub( -16, hFdCngDec->msPeriodog_exp ) ); /*Q31 - (-16)*/ move32(); } hFdCngDec->msPeriodog_exp = -16; @@ -2612,8 +2612,8 @@ void perform_noise_estimation_dec_ivas_fx( move64(); FOR( ; i <= part[p]; i++ ) { - delta = L_sub( periodog[i], msPeriodog[p] ); - W_tmp = W_add( W_tmp, W_mult0_32_32( delta, delta ) ); + delta = L_sub( periodog[i], msPeriodog[p] ); /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ + W_tmp = W_add( W_tmp, W_mult0_32_32( delta, delta ) ); /*Q31 - 2*(hFdCngDec->hFdCngCom->periodog_exp)*/ } tmp_s = W_norm( W_tmp ); temp = W_extract_h( W_shl( W_tmp, tmp_s ) ); // Q = 63 - 2*(31-exp) - tmp_s @@ -2622,25 +2622,25 @@ void perform_noise_estimation_dec_ivas_fx( /* compensate for the loss of variance */ e_temp = sub( 63, add( i_mult( sub( 31, hFdCngDec->hFdCngCom->periodog_exp ), 2 ), tmp_s ) ); - temp = Sqrt32( temp, &e_temp ); + temp = Sqrt32( temp, &e_temp ); /*Q31 - e_temp*/ IF( LT_16( e_temp, 0 ) ) { - temp = L_shr( temp, abs_s( e_temp ) ); + temp = L_shr( temp, abs_s( e_temp ) ); /*Q31*/ e_temp = 0; move16(); } - ftemp = rand_gauss( &hFdCngDec->cna_seed ); + ftemp = rand_gauss( &hFdCngDec->cna_seed ); /*Q29*/ - L_tmp = Mpy_32_32( temp, ftemp ); - L_tmp = L_shr( L_tmp, sub( sub( hFdCngDec->hFdCngCom->periodog_exp, e_temp ), 2 ) ); + L_tmp = Mpy_32_32( temp, ftemp ); /*Q29*/ + L_tmp = L_shr( L_tmp, sub( sub( hFdCngDec->hFdCngCom->periodog_exp, e_temp ), 2 ) ); /*Q31 - hFdCngDec->msPeriodog_exp*/ - msPeriodog[p] = L_add( msPeriodog[p], L_tmp ); + msPeriodog[p] = L_add( msPeriodog[p], L_tmp ); /*Q31 - hFdCngDec->msPeriodog_exp*/ move32(); - IF( LT_32( msPeriodog[p], L_shr( 21474, hFdCngDec->msPeriodog_exp ) ) ) + IF( LT_32( msPeriodog[p], L_shr( 21474 /*Q31*/, hFdCngDec->msPeriodog_exp ) ) ) { - msPeriodog[p] = L_shr( 21474, hFdCngDec->msPeriodog_exp ); + msPeriodog[p] = L_shr( 21474 /*Q31*/, hFdCngDec->msPeriodog_exp ); /*Q31 - hFdCngDec->msPeriodog_exp*/ move32(); } } @@ -2652,7 +2652,7 @@ void perform_noise_estimation_dec_ivas_fx( { FOR( p = 0; p < npart; p++ ) { - msPeriodog[p] = L_shr( msPeriodog[p], sub( 5, tmp_s ) ); + msPeriodog[p] = L_shr( msPeriodog[p], sub( 5, tmp_s ) ); /*Q31 - hFdCngDec->msPeriodog_exp - 5 + tmp_s*/ move32(); } hFdCngDec->msPeriodog_exp = add( hFdCngDec->msPeriodog_exp, sub( 5, tmp_s ) ); @@ -2664,13 +2664,13 @@ void perform_noise_estimation_dec_ivas_fx( move32(); IF( GE_16( hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_exp ) ) { - enr_tot = L_add_sat( L_shr( sum32_fx( msPeriodog, npart ), sub( hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_exp ) ), 1 ); + enr_tot = L_add_sat( L_shr( sum32_fx( msPeriodog, npart ), sub( hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_exp ) ), 1 ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ enr_tot0 = L_add_sat( sum32_fx( msNoiseEst, npart ), 1 ); } ELSE IF( LT_16( hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_exp ) ) { enr_tot = L_add_sat( sum32_fx( msPeriodog, npart ), 1 ); - enr_tot0 = L_add_sat( L_shr( sum32_fx( msNoiseEst, npart ), sub( hFdCngDec->msPeriodog_exp, hFdCngDec->msNoiseEst_exp ) ), 1 ); + enr_tot0 = L_add_sat( L_shr( sum32_fx( msNoiseEst, npart ), sub( hFdCngDec->msPeriodog_exp, hFdCngDec->msNoiseEst_exp ) ), 1 ); /*Q31 - hFdCngDec->msPeriodog_exp*/ } /* update short-term periodogram on larger partitions */ @@ -2680,7 +2680,7 @@ void perform_noise_estimation_dec_ivas_fx( test(); IF( max_l && GT_16( q_shift, norm_shift ) ) { - scale_sig32( hFdCngDec->msPeriodog_ST_fx, NPART_SHAPING, sub( norm_shift, q_shift ) ); + scale_sig32( hFdCngDec->msPeriodog_ST_fx, NPART_SHAPING, sub( norm_shift, q_shift ) ); /*Q31 - hFdCngDec->msPeriodog_ST_exp + ( norm_shift - q_shift )*/ hFdCngDec->msPeriodog_ST_exp = sub( hFdCngDec->msPeriodog_ST_exp, sub( norm_shift, q_shift ) ); move16(); q_shift = norm_shift; @@ -2693,14 +2693,14 @@ void perform_noise_estimation_dec_ivas_fx( IF( NE_16( L_frame, last_L_frame ) || LE_32( last_core_brate, SID_2k40 ) ) { /* core Fs has changed or last frame was SID/NO_DATA -> re-initialize short-term periodogram */ - hFdCngDec->msPeriodog_ST_fx[p] = L_shl( msPeriodog[p], q_shift ); + hFdCngDec->msPeriodog_ST_fx[p] = L_shl( msPeriodog[p], q_shift ); /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ move32(); } ELSE { #ifdef IVAS_ENH32_CADENCE_CHANGES - temp = L_shl( msPeriodog[p], q_shift ); - hFdCngDec->msPeriodog_ST_fx[p] = Madd_32_16( Mpy_32_16_1( hFdCngDec->msPeriodog_ST_fx[p], ST_PERIODOG_FACT_Q15 ), temp, MAX_16 - ST_PERIODOG_FACT_Q15 ); + temp = L_shl( msPeriodog[p], q_shift ); /*Q31 - hFdCngDec->hFdCngCom->periodog_exp*/ + hFdCngDec->msPeriodog_ST_fx[p] = Madd_32_16( Mpy_32_16_1( hFdCngDec->msPeriodog_ST_fx[p], ST_PERIODOG_FACT_Q15 ), temp, MAX_16 - ST_PERIODOG_FACT_Q15 ); /*Q31 - hFdCngDec->msPeriodog_ST_exp*/ #else hFdCngDec->msPeriodog_ST_fx[p] = L_add( Mpy_32_16_1( hFdCngDec->msPeriodog_ST_fx[p], ST_PERIODOG_FACT_Q15 ), Mpy_32_16_1( temp, sub( MAX_16, ST_PERIODOG_FACT_Q15 ) ) ); #endif @@ -2711,7 +2711,7 @@ void perform_noise_estimation_dec_ivas_fx( IF( max_l ) { q_shift = sub( norm_l( max_l ), 2 ); - scale_sig32( hFdCngDec->msPeriodog_ST_fx, NPART_SHAPING, q_shift ); + scale_sig32( hFdCngDec->msPeriodog_ST_fx, NPART_SHAPING, q_shift ); /*Q31 - hFdCngDec->msPeriodog_ST_exp + q_shift*/ hFdCngDec->msPeriodog_ST_exp = sub( hFdCngDec->msPeriodog_ST_exp, q_shift ); move16(); } @@ -2731,32 +2731,32 @@ void perform_noise_estimation_dec_ivas_fx( test(); IF( EQ_16( last_L_frame, L_FRAME16k ) && EQ_16( L_frame, L_FRAME ) ) { - msNoiseEst[61] = msNoiseEst[58]; + msNoiseEst[61] = msNoiseEst[58]; /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[60] = L_min( msNoiseEst[58], msNoiseEst[57] ); + msNoiseEst[60] = L_min( msNoiseEst[58], msNoiseEst[57] ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[59] = msNoiseEst[57]; + msNoiseEst[59] = msNoiseEst[57]; /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[58] = msNoiseEst[56]; + msNoiseEst[58] = msNoiseEst[56]; /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[57] = msNoiseEst[56]; + msNoiseEst[57] = msNoiseEst[56]; /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[56] = L_min( msNoiseEst[56], msNoiseEst[55] ); + msNoiseEst[56] = L_min( msNoiseEst[56], msNoiseEst[55] ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); } ELSE IF( EQ_16( last_L_frame, L_FRAME ) && EQ_16( L_frame, L_FRAME16k ) ) { - msNoiseEst[56] = L_min( msNoiseEst[56], msNoiseEst[57] ); + msNoiseEst[56] = L_min( msNoiseEst[56], msNoiseEst[57] ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[57] = L_min( msNoiseEst[58], msNoiseEst[59] ); + msNoiseEst[57] = L_min( msNoiseEst[58], msNoiseEst[59] ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[58] = L_min( msNoiseEst[60], msNoiseEst[61] ); + msNoiseEst[58] = L_min( msNoiseEst[60], msNoiseEst[61] ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[59] = 0; + msNoiseEst[59] = 0; /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[60] = 0; + msNoiseEst[60] = 0; /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); - msNoiseEst[61] = 0; + msNoiseEst[61] = 0; /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); hFdCngDec->ms_cnt_bw_up = FIRST_CNA_NOISE_UPD_FRAMES; @@ -2773,15 +2773,15 @@ void perform_noise_estimation_dec_ivas_fx( /* background noise update with moving average */ IF( hFdCngDec->first_cna_noise_update_cnt != 0 ) { - alpha = Inv16( add( hFdCngDec->first_cna_noise_update_cnt, 1 ), &e ); - alpha = shl_sat( alpha, e ); // Q15 + alpha = Inv16( add( hFdCngDec->first_cna_noise_update_cnt, 1 ), &e ); /*Q15*/ + alpha = shl_sat( alpha, e ); // Q15 maximum_32_fx( msPeriodog, npart, &max_l ); q_shift = sub( hFdCngDec->hFdCngCom->periodog_exp, hFdCngDec->msNoiseEst_exp ); norm_shift = norm_l( max_l ); test(); IF( max_l && GT_16( q_shift, norm_shift ) ) { - scale_sig32( msNoiseEst, NPART_SHAPING, sub( norm_shift, q_shift ) ); + scale_sig32( msNoiseEst, NPART_SHAPING, sub( norm_shift, q_shift ) ); /*Q31 - hFdCngDec->msNoiseEst_exp + ( norm_shift - q_shift )*/ hFdCngDec->msNoiseEst_exp = sub( hFdCngDec->msNoiseEst_exp, sub( norm_shift, q_shift ) ); move16(); q_shift = norm_shift; @@ -2791,7 +2791,7 @@ void perform_noise_estimation_dec_ivas_fx( { temp = L_shl( msPeriodog[p], q_shift ); #ifdef IVAS_ENH32_CADENCE_CHANGES - msNoiseEst[p] = Madd_32_16( Mpy_32_16_1( msNoiseEst[p], sub( MAX_16, alpha ) ), temp, alpha ); + msNoiseEst[p] = Madd_32_16( Mpy_32_16_1( msNoiseEst[p], sub( MAX_16, alpha ) ), temp, alpha ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ #else msNoiseEst[p] = L_add( Mpy_32_16_1( msNoiseEst[p], sub( MAX_16, alpha ) ), Mpy_32_16_1( temp, alpha ) ); #endif @@ -2801,8 +2801,8 @@ void perform_noise_estimation_dec_ivas_fx( ELSE { Word16 tmp = s_max( sub( hFdCngDec->msPeriodog_exp, getScaleFactor32( msPeriodog, npart ) ), sub( hFdCngDec->msNoiseEst_exp, getScaleFactor32( &msNoiseEst[npart], sub( NPART_SHAPING, npart ) ) ) ); - Copy_Scale_sig32( msPeriodog, msNoiseEst, npart, sub( hFdCngDec->msPeriodog_exp, tmp ) ); - scale_sig32( &msNoiseEst[npart], sub( NPART_SHAPING, npart ), sub( hFdCngDec->msNoiseEst_exp, tmp ) ); + Copy_Scale_sig32( msPeriodog, msNoiseEst, npart, sub( hFdCngDec->msPeriodog_exp, tmp ) ); /*Q31 - tmp*/ + scale_sig32( &msNoiseEst[npart], sub( NPART_SHAPING, npart ), sub( hFdCngDec->msNoiseEst_exp, tmp ) ); /*Q31 - tmp*/ hFdCngDec->msNoiseEst_exp = tmp; move16(); } @@ -2810,7 +2810,7 @@ void perform_noise_estimation_dec_ivas_fx( /* check, if we reached the required number of first CNA noise update frames */ IF( LT_16( hFdCngDec->first_cna_noise_update_cnt, FIRST_CNA_NOISE_UPD_FRAMES - 1 ) ) { - hFdCngDec->first_cna_noise_update_cnt = add( hFdCngDec->first_cna_noise_update_cnt, 1 ); + hFdCngDec->first_cna_noise_update_cnt = add( hFdCngDec->first_cna_noise_update_cnt, 1 ); /*Q0*/ move16(); } ELSE @@ -2838,10 +2838,10 @@ void perform_noise_estimation_dec_ivas_fx( { Word16 scale; /* no updates during active frames except for significant energy drops */ - enr_ratio = BASOP_Util_Divide3232_Scale( enr_tot, enr_tot0, &scale ); + enr_ratio = BASOP_Util_Divide3232_Scale( enr_tot, enr_tot0, &scale ); /*Q15 - scale*/ IF( scale <= 0 ) { - enr_ratio = shl( enr_ratio, scale ); + enr_ratio = shl( enr_ratio, scale ); /*Q15*/ scale = 15; move16(); } @@ -2852,7 +2852,7 @@ void perform_noise_estimation_dec_ivas_fx( IF( LT_16( enr_ratio, shl( 1, sub( scale, 1 ) ) ) ) { /* total energy significantly decreases during active frames -> downward update */ - wght = lin_interp_fx( enr_ratio, 0, shr( 26214, sub( 15, scale ) ) /*0.8f in Q15*/, shr( 16384, sub( 15, scale ) ) /*0.5f in Q15*/, shr( 31130, sub( 15, scale ) ) /*0.95f in Q15*/, shr( 32767, sub( 15, scale ) ) /*1 in Q15*/ ); + wght = lin_interp_fx( enr_ratio, 0, shr( 26214, sub( 15, scale ) ) /*0.8f in Q15*/, shr( 16384, sub( 15, scale ) ) /*0.5f in Q15*/, shr( 31130, sub( 15, scale ) ) /*0.95f in Q15*/, shr( 32767, sub( 15, scale ) ) /*1 in Q15*/ ); /*scale*/ Word16 temp_q_msNoiseEst[NPART_SHAPING]; Word16 min_q_msNoiseEst = MAX_16; move16(); @@ -2867,7 +2867,7 @@ void perform_noise_estimation_dec_ivas_fx( IF( LT_32( L_tmp, msNoiseEst[p] ) ) { #ifdef IVAS_ENH32_CADENCE_CHANGES - msNoiseEst[p] = Madd_32_16( Mpy_32_16_1( msNoiseEst[p], wght ), L_tmp, (Word16) L_sub( shr( MAX_16, sub( 15, scale ) ), wght ) ); + msNoiseEst[p] = Madd_32_16( Mpy_32_16_1( msNoiseEst[p], wght ), L_tmp, (Word16) L_sub( shr( MAX_16, sub( 15, scale ) ), wght ) ); /*temp_q_msNoiseEst[p]*/ #else msNoiseEst[p] = L_add( Mpy_32_16_1( msNoiseEst[p], wght ), Mpy_32_16_1( L_tmp, (Word16) L_sub( shr( MAX_16, sub( 15, scale ) ), wght ) ) ); #endif @@ -2879,7 +2879,7 @@ void perform_noise_estimation_dec_ivas_fx( } FOR( p = 0; p < NPART_SHAPING; p++ ) { - msNoiseEst[p] = L_shl( msNoiseEst[p], sub( min_q_msNoiseEst, temp_q_msNoiseEst[p] ) ); + msNoiseEst[p] = L_shl( msNoiseEst[p], sub( min_q_msNoiseEst, temp_q_msNoiseEst[p] ) ); /*min_q_msNoiseEst*/ move32(); } hFdCngDec->msNoiseEst_exp = min_q_msNoiseEst; @@ -2890,11 +2890,11 @@ void perform_noise_estimation_dec_ivas_fx( /* energy significantly decreases in one of the larger partitions during active frames -> downward update */ FOR( p = CNA_ACT_DN_LARGE_PARTITION; p < npart; p++ ) { - L_tmp = L_shr_sat( hFdCngDec->msPeriodog_ST_fx[p], sub( hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_ST_exp ) ); + L_tmp = L_shr_sat( hFdCngDec->msPeriodog_ST_fx[p], sub( hFdCngDec->msNoiseEst_exp, hFdCngDec->msPeriodog_ST_exp ) ); /*Q31 - hFdCngDec->msPeriodog_ST_exp*/ IF( LT_32( L_tmp, msNoiseEst[p] ) ) { #ifdef IVAS_ENH32_CADENCE_CHANGES - msNoiseEst[p] = Madd_32_16( Mpy_32_16_1( msNoiseEst[p], CNA_ACT_DN_FACT_Q15 ), L_tmp, ONE_IN_Q15 - CNA_ACT_DN_FACT_Q15 ); + msNoiseEst[p] = Madd_32_16( Mpy_32_16_1( msNoiseEst[p], CNA_ACT_DN_FACT_Q15 ), L_tmp, ONE_IN_Q15 - CNA_ACT_DN_FACT_Q15 ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ #else msNoiseEst[p] = L_add( Mpy_32_16_1( msNoiseEst[p], CNA_ACT_DN_FACT_Q15 ), Mpy_32_16_1( L_tmp, ONE_IN_Q15 - CNA_ACT_DN_FACT_Q15 ) ); #endif @@ -2915,12 +2915,12 @@ void perform_noise_estimation_dec_ivas_fx( hFdCngDec->ms_last_inactive_bwidth = bwidth; move16(); /* update background noise during inactive frames */ - ptr_per = msNoiseEst; + ptr_per = msNoiseEst; /*Q31 - hFdCngDec->msNoiseEst_exp*/ FOR( p = 0; p < npart; p++ ) { Word16 i_e = 15; move16(); - enr = msPeriodog[p]; + enr = msPeriodog[p]; /*Q31 - hFdCngDec->msPeriodog_exp*/ move32(); enr_e = hFdCngDec->msPeriodog_exp; move16(); @@ -2930,7 +2930,7 @@ void perform_noise_estimation_dec_ivas_fx( test(); IF( GT_16( hFdCngDec->ms_cnt_bw_up, 0 ) && GT_16( p, 55 ) ) { - alpha = Inv16( add( hFdCngDec->ms_cnt_bw_up, 1 ), &i_e ); + alpha = Inv16( add( hFdCngDec->ms_cnt_bw_up, 1 ), &i_e ); /*Q15 - i_e*/ IF( i_e < 0 ) { alpha = shr( alpha, negate( i_e ) ); // Q15 @@ -2948,14 +2948,14 @@ void perform_noise_estimation_dec_ivas_fx( test(); IF( ( norm_l( *ptr_per ) == 0 ) && *ptr_per ) { - enr = *ptr_per; + enr = *ptr_per; /*Q31 - hFdCngDec->msNoiseEst_exp*/ scale_sig32( msNoiseEst, NPART_SHAPING, -1 ); hFdCngDec->msNoiseEst_exp = add( hFdCngDec->msNoiseEst_exp, 1 ); move16(); } ELSE { - enr = L_shl( *ptr_per, 1 ); + enr = L_shl( *ptr_per, 1 ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ } enr_e = hFdCngDec->msNoiseEst_exp; move16(); @@ -2965,7 +2965,7 @@ void perform_noise_estimation_dec_ivas_fx( test(); IF( *ptr_per != 0 && alpha != 0 ) { - *ptr_per = Mpy_32_16_1( ( *ptr_per ), alpha ); + *ptr_per = Mpy_32_16_1( ( *ptr_per ), alpha ); /*Q31 - hFdCngDec->msNoiseEst_exp*/ move32(); if ( *ptr_per == 0 ) { @@ -2985,19 +2985,19 @@ void perform_noise_estimation_dec_ivas_fx( norm_shift = norm_l( enr ); IF( LE_16( q_shift, norm_shift ) ) { - enr = L_shl( enr, q_shift ); + enr = L_shl( enr, q_shift ); /*Q31 - hFdCngDec->msNoiseEst_exp + q_shift*/ move32(); } ELSE { enr_e = sub( enr_e, norm_shift ); - enr = L_shl( enr, norm_shift ); - scale_sig32( msNoiseEst, NPART_SHAPING, sub( norm_shift, q_shift ) ); + enr = L_shl( enr, norm_shift ); /*Q31 - hFdCngDec->msNoiseEst_exp + norm_shift*/ + scale_sig32( msNoiseEst, NPART_SHAPING, sub( norm_shift, q_shift ) ); /*Q31 - ( hFdCngDec->msNoiseEst_exp - ( norm_shift - q_shift ) )*/ hFdCngDec->msNoiseEst_exp = sub( hFdCngDec->msNoiseEst_exp, sub( norm_shift, q_shift ) ); move16(); } } - *ptr_per = Madd_32_16( ( *ptr_per ), enr, sub( MAX_16, alpha ) ); + *ptr_per = Madd_32_16( ( *ptr_per ), enr, sub( MAX_16, alpha ) ); /*Q31 - enr_e*/ move32(); #else *ptr_per = L_add( ( *ptr_per ), Mpy_32_16_1( enr, sub( MAX_16, alpha ) ) ); @@ -3016,12 +3016,12 @@ void perform_noise_estimation_dec_ivas_fx( IF( max_l ) { q_shift = sub( norm_l( max_l ), 2 ); - scale_sig32( msNoiseEst, NPART_SHAPING, q_shift ); + scale_sig32( msNoiseEst, NPART_SHAPING, q_shift ); /*Q31 - ( hFdCngDec->msNoiseEst_exp - q_shift )*/ hFdCngDec->msNoiseEst_exp = sub( hFdCngDec->msNoiseEst_exp, q_shift ); move16(); } - Copy32( msNoiseEst, hFdCngDec->msPsd_fx, npart ); + Copy32( msNoiseEst, hFdCngDec->msPsd_fx, npart ); /*Q31 - ( hFdCngDec->msNoiseEst_exp )*/ hFdCngDec->msPsd_exp_fft = hFdCngDec->msNoiseEst_exp; move16(); @@ -3029,7 +3029,7 @@ void perform_noise_estimation_dec_ivas_fx( scalebands_fx( msNoiseEst, part, nFFTpart, hFdCngDec->midband_shaping, nFFTpart, sub( stopFFTbin, startBand ), hFdCngDec->bandNoiseShape, 1 ); hFdCngDec->bandNoiseShape_exp = hFdCngDec->msNoiseEst_exp; move16(); - Copy32( hFdCngDec->bandNoiseShape, &hFdCngDec->smoothed_psd_fx[startBand], sub( stopFFTbin, startBand ) ); + Copy32( hFdCngDec->bandNoiseShape, &hFdCngDec->smoothed_psd_fx[startBand], sub( stopFFTbin, startBand ) ); /*Q31 - hFdCngDec->bandNoiseShape_exp*/ hFdCngDec->smoothed_psd_exp = hFdCngDec->bandNoiseShape_exp; move16(); set32_fx( &hFdCngDec->smoothed_psd_fx[stopFFTbin], 0, sub( L_FRAME16k, stopFFTbin ) ); @@ -3040,7 +3040,7 @@ void perform_noise_estimation_dec_ivas_fx( IF( EQ_16( element_mode, IVAS_CPE_MDCT ) && power_spectrum != NULL ) { /* use power spectrum calculated in the MDCT-domain instead of calculating new power spectrum */ - periodog = power_spectrum; + periodog = power_spectrum; /*Q_power_spectrum*/ periodog_exp = sub( 31, Q_power_spectrum ); } ELSE @@ -3048,20 +3048,20 @@ void perform_noise_estimation_dec_ivas_fx( /* Compute the squared magnitude in each FFT bin */ IF( startBand == 0 ) { - W_tmp = W_mult0_32_32( fftBuffer[0], fftBuffer[0] ); /* DC component */ + W_tmp = W_mult0_32_32( fftBuffer[0], fftBuffer[0] ); /* DC component */ /*Q31 - 2*fftBuffer_exp*/ min_q = 2; move16(); ( *ptr_per ) = W_extract_l( W_shr( W_tmp, sub( i_mult( sub( 31, fftBuffer_exp ), 2 ), min_q ) ) ); move32(); ptr_per++; - ptr_r = fftBuffer + 2; + ptr_r = fftBuffer + 2; /*Q31 - fftBuffer_exp*/ } ELSE { - ptr_r = fftBuffer + i_mult( 2, startBand ); + ptr_r = fftBuffer + i_mult( 2, startBand ); /*Q31 - fftBuffer_exp*/ } - ptr_i = ptr_r + 1; + ptr_i = ptr_r + 1; /*Q31 - fftBuffer_exp*/ SWITCH( hFdCngDec->hFdCngCom->fftlen ) { @@ -3083,17 +3083,17 @@ void perform_noise_estimation_dec_ivas_fx( FOR( ; ptr_per < periodog + stopFFTbin - startBand; ptr_per++ ) { - W_tmp = W_add( W_mult0_32_32( ( *ptr_r ), ( *ptr_r ) ), W_mult0_32_32( ( *ptr_i ), ( *ptr_i ) ) ); + W_tmp = W_add( W_mult0_32_32( ( *ptr_r ), ( *ptr_r ) ), W_mult0_32_32( ( *ptr_i ), ( *ptr_i ) ) ); /*Q31 - 2*(fftBuffer_exp)*/ - tmp_s = W_norm( W_tmp ); + tmp_s = W_norm( W_tmp ); /*tmp_q*/ tmp_q = sub( add( i_mult( sub( 31, fftBuffer_exp ), 2 ), tmp_s ), 32 ); IF( tmp_q < 0 ) { - W_tmp = W_shr( W_tmp, negate( tmp_q ) ); + W_tmp = W_shr( W_tmp, negate( tmp_q ) ); /*Q31 - 2*(fftBuffer_exp) + tmp_q*/ } IF( LT_16( tmp_q, min_q ) ) { - reIter = ptr_per; + reIter = ptr_per; /*tmp_q*/ Word16 diff; IF( ( tmp_q <= 0 ) ) { @@ -3107,7 +3107,7 @@ void perform_noise_estimation_dec_ivas_fx( WHILE( reIter > periodog ) { reIter--; - *reIter = L_shr( *reIter, diff ); + *reIter = L_shr( *reIter, diff ); /*tmp_q*/ move32(); } IF( tmp_q >= 0 ) @@ -3150,7 +3150,7 @@ void perform_noise_estimation_dec_ivas_fx( move16(); FOR( p = 0; p < stopFFTbin - startBand; p++ ) { - periodog[p] = L_shl( periodog[p], tmp_s ); + periodog[p] = L_shl( periodog[p], tmp_s ); /*Q31 - hFdCngDec->hFdCngCom->periodog_exp + tmp_s*/ move32(); } } @@ -3245,24 +3245,24 @@ void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) invTrfMatrix_fx = (Word32 *) tmpRAM_fx; - sidNoiseEst = st->sidNoiseEst; + sidNoiseEst = st->sidNoiseEst; /*Q31 - st->sidNoiseEstExp*/ move16(); - preemph_fac = corest->preemph_fac; + preemph_fac = corest->preemph_fac; /*Q15*/ move16(); - N = st->npart; + N = st->npart; /*Q0*/ move16(); - st->sid_frame_counter = add( st->sid_frame_counter, 1 ); + st->sid_frame_counter = add( st->sid_frame_counter, 1 ); /*Q15*/ move16(); /* Read bitstream */ FOR( i = 0; i < stages_37bits; i++ ) { - indices[i] = get_next_indice_fx( corest, bits_37bits[i] ); + indices[i] = get_next_indice_fx( corest, bits_37bits[i] ); /*Q0*/ move16(); } - index = get_next_indice_fx( corest, 7 ); + index = get_next_indice_fx( corest, 7 ); /*Q0*/ /* MSVQ decoder */ IF( corest->element_mode != EVS_MONO ) @@ -3282,7 +3282,7 @@ void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) FOR( i = 0; i < N; i++ ) { - v[i] = L_deposit_h( v16[i] ); + v[i] = L_deposit_h( v16[i] ); /*Q23*/ move32(); } } @@ -3290,8 +3290,8 @@ void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) /* decode gain, format gain: Q9.23 */ gain = L_shl( L_deposit_l( index ), WORD32_BITS - 1 - 8 ); - gain = L_sub( gain, 503316480l /*60.0 Q23*/ ); - gain = Mpy_32_16_1( gain, 21845 /*2.0f/3.0f Q15*/ ); + gain = L_sub( gain, 503316480l /*60.0 Q23*/ ); /*Q23*/ + gain = Mpy_32_16_1( gain, 21845 /*2.0f/3.0f Q15*/ ); /*Q23*/ /* Apply gain and undo log */ @@ -3300,11 +3300,11 @@ void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) maxVal = L_add( 0x80000000 /*-1.0 Q31*/, 0 ); FOR( i = 0; i < N; i++ ) { - maxVal = L_max( maxVal, v[i] ); + maxVal = L_max( maxVal, v[i] ); /*Q23*/ } - maxVal = L_add( maxVal, gain ); - maxVal = L_shl( Mpy_32_16_1( maxVal, 21771 /*0.66438561897 Q15*/ ), 1 ); + maxVal = L_add( maxVal, gain ); /*Q23*/ + maxVal = L_shl( Mpy_32_16_1( maxVal, 21771 /*0.66438561897 Q15*/ ), 1 ); /*Q23*/ sidNoiseEst_Exp = 0; move16(); @@ -3319,25 +3319,25 @@ void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) /* format v: Q9.23, format sidNoiseEst: Q6.26, 0.66438561897 = log10(10)/log10(2.0) / 10.0 * 2.0 */ FOR( i = 0; i < N; i++ ) { - tmp = L_add( v[i], gain ); - tmp = L_shl( Mpy_32_16_1( tmp, 21771 /*0.66438561897 Q15*/ ), 1 ); + tmp = L_add( v[i], gain ); /*Q23*/ + tmp = L_shl( Mpy_32_16_1( tmp, 21771 /*0.66438561897 Q15*/ ), 1 ); /*Q23*/ tmp = L_sub( tmp, E_ExpLd64 ); assert( tmp < 0 ); - st->sidNoiseEst[i] = BASOP_Util_InvLog2( tmp ); + st->sidNoiseEst[i] = BASOP_Util_InvLog2( tmp ); /*Q31 - st->sidNoiseEstExp*/ move32(); } /* NB last band energy compensation */ IF( st->CngBandwidth == NB ) { - st->sidNoiseEst[sub( N, 1 )] = Mpy_32_16_1( st->sidNoiseEst[sub( N, 1 )], NB_LAST_BAND_SCALE ); + st->sidNoiseEst[( N - 1 )] = Mpy_32_16_1( st->sidNoiseEst[( N - 1 )], NB_LAST_BAND_SCALE ); /*Q31 - st->sidNoiseEstExp*/ move32(); } test(); IF( EQ_16( st->CngBandwidth, SWB ) && LE_32( st->CngBitrate, ACELP_13k20 ) ) { - st->sidNoiseEst[sub( N, 1 )] = Mpy_32_16_1( st->sidNoiseEst[sub( N, 1 )], SWB_13k2_LAST_BAND_SCALE ); + st->sidNoiseEst[( N - 1 )] = Mpy_32_16_1( st->sidNoiseEst[( N - 1 )], SWB_13k2_LAST_BAND_SCALE ); /*Q31 - st->sidNoiseEstExp*/ move32(); } @@ -3374,8 +3374,8 @@ void FdCng_decodeSID_fx( HANDLE_FD_CNG_COM st, Decoder_State *corest ) #ifdef IVAS_FLOAT_FIXED void noisy_speech_detection_fx( HANDLE_FD_CNG_DEC hFdCngDec, /* i/o: FD_CNG structure */ - const Word16 vad, - const Word16 *syn, /* i : input time-domain frame */ + const Word16 vad, /*Q0*/ + const Word16 *syn, /* i : input time-domain frame Q*/ const Word16 Q ) { Word16 i; @@ -3392,7 +3392,7 @@ void noisy_speech_detection_fx( IF( vad == 0 ) { - totalNoise = dotWord32_16_Mant32Exp( hFdCngDec->msNoiseEst, hFdCngDec->msNoiseEst_exp, hFdCngDec->psize_shaping_norm, hFdCngDec->psize_shaping_norm_exp, hFdCngDec->nFFTpart_shaping, &totalNoise_exp ); + totalNoise = dotWord32_16_Mant32Exp( hFdCngDec->msNoiseEst, hFdCngDec->msNoiseEst_exp, hFdCngDec->psize_shaping_norm, hFdCngDec->psize_shaping_norm_exp, hFdCngDec->nFFTpart_shaping, &totalNoise_exp ); /*Q31 - totalNoise_exp*/ /* - logTotalNoise is scaled by LD_DATA_SCALE+2 @@ -3402,16 +3402,16 @@ void noisy_speech_detection_fx( */ IF( totalNoise == 0 ) { - logTotalNoise = L_add( -1677721600l /*-0.78125 Q31*/, 0 ); + logTotalNoise = L_add( -1677721600l /*-0.78125 Q31*/, 0 ); /*Q31*/ } ELSE { - logTotalNoise = BASOP_Util_Log2( totalNoise ); + logTotalNoise = BASOP_Util_Log2( totalNoise ); /*Q25*/ logTotalNoiseExp = L_shl( L_deposit_l( totalNoise_exp ), WORD32_BITS - 1 - LD_DATA_SCALE ); - logTotalNoise = Mpy_32_16_1( L_add( logTotalNoise, logTotalNoiseExp ), 24660 /*0.75257498916 Q15*/ ); + logTotalNoise = Mpy_32_16_1( L_add( logTotalNoise, logTotalNoiseExp ), 24660 /*0.75257498916 Q15*/ ); /*Q31 - logTotalNoiseExp*/ } - hFdCngDec->lp_noise = L_add( Mpy_32_16_1( hFdCngDec->lp_noise, 32604 /*0.995 Q15*/ ), L_shr( Mpy_32_16_1( logTotalNoise, 20972 /*0.64 Q15*/ ), 7 ) ); + hFdCngDec->lp_noise = L_add( Mpy_32_16_1( hFdCngDec->lp_noise, 32604 /*0.995 Q15*/ ), L_shr( Mpy_32_16_1( logTotalNoise, 20972 /*0.64 Q15*/ ), 7 ) ); /*hFdCngDec->q_lp_noise*/ move32(); } ELSE @@ -3422,11 +3422,11 @@ void noisy_speech_detection_fx( move16(); FOR( i = 0; i < hFdCngDec->hFdCngCom->frameSize; i++ ) { - tmp = L_shr_r( L_mult0( syn[i], syn[i] ), sub( Etot_exp, 31 ) ); + tmp = L_shr_r( L_mult0( syn[i], syn[i] ), sub( Etot_exp, 31 ) ); /*2*(Q) - (Etot_exp - 31)*/ IF( LT_32( L_sub( maxWord32, tmp ), Etot ) ) { Etot_exp = add( Etot_exp, 1 ); - Etot = L_shr_r( Etot, 1 ); + Etot = L_shr_r( Etot, 1 ); /*Q31 - Etot_exp*/ tmp = L_shr_r( tmp, 1 ); } Etot = L_add( Etot, tmp ); @@ -3441,32 +3441,32 @@ void noisy_speech_detection_fx( */ IF( Etot == 0 ) { - logEtot = L_add( -1677721600l /*-0.78125 Q31*/, 0 ); + logEtot = L_add( -1677721600l /*-0.78125 Q31*/, 0 ); /*Q31*/ } ELSE { - logEtot = BASOP_Util_Log2( Etot ); + logEtot = BASOP_Util_Log2( Etot ); /*Q25*/ logEtotExp = L_shl( L_deposit_l( Etot_exp ), WORD32_BITS - 1 - LD_DATA_SCALE ); - logEtot = Mpy_32_16_1( L_add( logEtot, logEtotExp ), 24660 /*0.75257498916 Q15*/ ); + logEtot = Mpy_32_16_1( L_add( logEtot, logEtotExp ), 24660 /*0.75257498916 Q15*/ ); /*Q31 - logEtotExp*/ IF( EQ_16( hFdCngDec->hFdCngCom->frameSize, L_FRAME16k ) ) { - logEtot = L_add( logEtot, -184894985l /*-0.086098436822497 Q31*/ ); + logEtot = L_add( logEtot, -184894985l /*-0.086098436822497 Q31*/ ); /*Q31 - logEtotExp*/ } ELSE { - logEtot = L_add( logEtot, -176765584l /*-0.082312889439370 Q31*/ ); + logEtot = L_add( logEtot, -176765584l /*-0.082312889439370 Q31*/ ); /*Q31 - logEtotExp*/ } } - hFdCngDec->lp_speech = L_add( Mpy_32_16_1( hFdCngDec->lp_speech, 32604 /*0.995 Q15*/ ), L_shr( Mpy_32_16_1( logEtot, 20972 /*0.64 Q15*/ ), 7 ) ); + hFdCngDec->lp_speech = L_add( Mpy_32_16_1( hFdCngDec->lp_speech, 32604 /*0.995 Q15*/ ), L_shr( Mpy_32_16_1( logEtot, 20972 /*0.64 Q15*/ ), 7 ) ); /*hFdCngDec->q_lp_speech*/ move32(); } - tmp = L_sub( hFdCngDec->lp_speech, 377487360l /*45.0 Q23*/ ); + tmp = L_sub( hFdCngDec->lp_speech, 377487360l /*45.0 Q23*/ ); /*Q23*/ if ( LT_32( hFdCngDec->lp_noise, tmp ) ) { - hFdCngDec->lp_noise = tmp; + hFdCngDec->lp_noise = tmp; /*Q23*/ move32(); } @@ -3485,13 +3485,13 @@ void noisy_speech_detection_fx( #ifdef IVAS_FLOAT_FIXED void generate_comfort_noise_dec_fx( - Word32 **bufferReal, /* o : matrix to real part of input bands */ - Word32 **bufferImag, /* o : matrix to imaginary part of input bands */ + Word32 **bufferReal, /* o : matrix to real part of input bands bufferScale*/ + Word32 **bufferImag, /* o : matrix to imaginary part of input bands bufferScale*/ Word16 *bufferScale, /* o : pointer to scalefactor for real and imaginary part of input bands */ Decoder_State *st, Word16 *Q_new, - Word16 gen_exc, - const Word16 nchan_out /* i : number of output channels */ + Word16 gen_exc, /*Q0*/ + const Word16 nchan_out /* i : number of output channels Q0*/ ) { Word16 i, j, s, sc, sn, cnt; @@ -3525,15 +3525,15 @@ void generate_comfort_noise_dec_fx( /* pointer initialization */ - cngNoiseLevel = hFdCngCom->cngNoiseLevel; + cngNoiseLevel = hFdCngCom->cngNoiseLevel; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ cngNoiseLevelExp = hFdCngCom->cngNoiseLevelExp; - ptr_level = cngNoiseLevel; + ptr_level = cngNoiseLevel; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ seed = &( hFdCngCom->seed ); - fftBuffer = hFdCngCom->fftBuffer; + fftBuffer = hFdCngCom->fftBuffer; /*Q31 - hFdCngCom->fftBuffer_exp*/ timeDomainOutput = hFdCngCom->timeDomainBuffer; /* scaleCLDFB: CLDFBinvScalingFactor_EXP + 1 */ - scaleCLDFB = mult( hFdCngCom->invScalingFactor, CLDFB_SCALING ); + scaleCLDFB = mult( hFdCngCom->invScalingFactor, CLDFB_SCALING ); /*CLDFBinvScalingFactor_EXP + 1*/ /* Generate Gaussian random noise in real and imaginary parts of the FFT bins @@ -3557,32 +3557,32 @@ void generate_comfort_noise_dec_fx( /* DC component in FFT */ s = 0; move16(); - sqrtNoiseLevel = Sqrt32( L_shr( *ptr_level, sn ), &s ); + sqrtNoiseLevel = Sqrt32( L_shr( *ptr_level, sn ), &s ); /*Q31 - s*/ - fftBuffer[0] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); + fftBuffer[0] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); /*Q31 - hFdCngCom->fftBuffer_exp*/ move32(); /* Nyquist frequency is discarded */ fftBuffer[1] = L_deposit_l( 0 ); ptr_level = ptr_level + 1; - ptr_r = fftBuffer + 2; + ptr_r = fftBuffer + 2; /*Q31 - hFdCngCom->fftBuffer_exp*/ cnt = sub( cnt, 1 ); } ELSE { - startBand2 = shl( hFdCngCom->startBand, 1 ); + startBand2 = shl( hFdCngCom->startBand, 1 ); /*Q0*/ set32_fx( fftBuffer, 0, startBand2 ); - ptr_r = fftBuffer + startBand2; + ptr_r = fftBuffer + startBand2; /*Q31 - hFdCngCom->fftBuffer_exp*/ } sn = add( sn, 1 ); - ptr_i = ptr_r + 1; + ptr_i = ptr_r + 1; /*Q31 - hFdCngCom->fftBuffer_exp*/ FOR( i = 0; i < cnt; i++ ) { s = 0; move16(); - sqrtNoiseLevel = Sqrt32( L_shr( *ptr_level, sn ), &s ); + sqrtNoiseLevel = Sqrt32( L_shr( *ptr_level, sn ), &s ); /*Q31 - s*/ /* Real part in FFT bins */ *ptr_r = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); @@ -3627,16 +3627,16 @@ void generate_comfort_noise_dec_fx( /* calculate the residual signal energy */ /*enr = dotp( hFdCngCom->exc_cng, hFdCngCom->exc_cng, hFdCngCom->frameSize ) / hFdCngCom->frameSize;*/ - Lener = Dot_productSq16HQ( 1, hFdCngCom->exc_cng, st->L_frame, &exp ); - exp = add( sub( shl( sub( 15, *Q_new ), 1 ), 8 ), exp ); /*8 = log2(256)*/ + Lener = Dot_productSq16HQ( 1, hFdCngCom->exc_cng, st->L_frame, &exp ); /*Q31 - exp*/ + exp = add( sub( shl( sub( 15, *Q_new ), 1 ), 8 ), exp ); /*8 = log2(256)*/ /* convert log2 of residual signal energy */ /*(float)log10( enr + 0.1f ) / (float)log10( 2.0f );*/ - Lener = BASOP_Util_Log2( Lener ); + Lener = BASOP_Util_Log2( Lener ); /*Q25*/ Lener = L_add( Lener, L_shl( L_deposit_l( exp ), WORD32_BITS - 1 - LD_DATA_SCALE ) ); /*Q25*/ if ( EQ_16( st->L_frame, L_FRAME16k ) ) { - Lener = L_sub( Lener, 10802114l /*0.3219280949f Q25*/ ); /*log2(320) = 8.3219280949f*/ + Lener = L_sub( Lener, 10802114l /*0.3219280949f Q25*/ ); /*log2(320) = 8.3219280949f Q25*/ } /* decrease the energy in case of WB input */ IF( st->bwidth != NB ) @@ -3646,24 +3646,24 @@ void generate_comfort_noise_dec_fx( IF( st->CNG_mode >= 0 ) { /* Bitrate adapted attenuation */ - att = L_shl( L_deposit_l( ENR_ATT_fx[st->CNG_mode] ), 17 ); + att = L_shl( L_deposit_l( ENR_ATT_fx[st->CNG_mode] ), 17 ); /*Q23*/ } ELSE { /* Use least attenuation for higher bitrates */ - att = L_shl( L_deposit_l( ENR_ATT_fx[4] ), 17 ); + att = L_shl( L_deposit_l( ENR_ATT_fx[4] ), 17 ); /*Q23*/ } } ELSE { - att = 384 << 17; - move16(); /*1.5 Q8<<17=Q25*/ + att = 384 << 17; /*1.5 Q8<<17=Q25*/ + move16(); } - Lener = L_sub( Lener, att ); + Lener = L_sub( Lener, att ); /*Q23*/ } /*st->lp_ener = 0.8f * stcod->lp_ener + 0.2f * pow( 2.0f, enr );*/ - Lener = BASOP_util_Pow2( Lener, 6, &exp ); - Lener = Mult_32_16( Lener, 6554 /*0.2f Q15*/ ); + Lener = BASOP_util_Pow2( Lener, 6, &exp ); /*Q31 - exp*/ + Lener = Mult_32_16( Lener, 6554 /*0.2f Q15*/ ); /*Q31 - exp*/ exp = sub( 25, exp ); Lener = L_shr( Lener, exp ); /*Q6*/ st->lp_ener_fx = L_add( Mult_32_16( st->lp_ener_fx, 26214 /*0.8f Q15*/ ), Lener ); /*Q6*/ @@ -3688,17 +3688,17 @@ void generate_comfort_noise_dec_fx( /* scaleCLDFB: CLDFBinvScalingFactor_EXP + 1 */ s = 0; move16(); - sqrtNoiseLevel = Sqrt32( L_shr( Mpy_32_16_1( *ptr_level, scaleCLDFB ), sn ), &s ); + sqrtNoiseLevel = Sqrt32( L_shr( Mpy_32_16_1( *ptr_level, scaleCLDFB ), sn ), &s ); /*Q31 - s*/ FOR( i = 0; i < hFdCngCom->numSlots; i++ ) { /* Real part in CLDFB band */ - bufferReal[i][j] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); + bufferReal[i][j] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); /*bufferScale*/ move32(); /*fprintf(pFile,"%13.10f\n",WORD322FL_SCALE(bufferReal[i][j],sc));*/ /* Imaginary part in CLDFB band */ - bufferImag[i][j] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); + bufferImag[i][j] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); /*bufferScale*/ move32(); /*fprintf(pFile,"%13.10f\n",WORD322FL_SCALE(bufferImag[i][j],sc));*/ } @@ -3726,14 +3726,14 @@ void generate_comfort_noise_dec_fx( seed_loc = hFdCngCom->seed; move16(); - N = hFdCngCom->frameSize; + N = hFdCngCom->frameSize; /*Q0*/ move16(); N2 = shr( hFdCngCom->frameSize, 1 ); IF( st->last_core_bfi > ACELP_CORE ) { Word16 left_overlap_mode; - left_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode; + left_overlap_mode = st->hTcxCfg->tcx_last_overlap_mode; /*Q0*/ move16(); if ( EQ_16( left_overlap_mode, ALDO_WINDOW ) ) { @@ -3747,7 +3747,7 @@ void generate_comfort_noise_dec_fx( { FOR( i = 0; i < sub( hFdCngCom->frameSize, NS2SA( st->sr_core, N_ZERO_MDCT_NS ) ); i++ ) { - timeDomainOutput[i] = add( timeDomainOutput[i], shr_r( st->hHQ_core->old_out_LB_fx[i + NS2SA( st->sr_core, N_ZERO_MDCT_NS )], st->hHQ_core->Q_old_wtda_LB ) ); + timeDomainOutput[i] = add( timeDomainOutput[i], shr_r( st->hHQ_core->old_out_LB_fx[i + NS2SA( st->sr_core, N_ZERO_MDCT_NS )], st->hHQ_core->Q_old_wtda_LB ) ); /*st->q_old_outLB_fx*/ move16(); } } @@ -3758,7 +3758,7 @@ void generate_comfort_noise_dec_fx( FOR( i = 0; i < st->hTcxCfg->tcx_mdct_window_length; i++ ) { - timeDomainOutput[i] = add( timeDomainOutput[i], shl( hTcxDec->syn_Overl[i], TCX_IMDCT_HEADROOM ) ); + timeDomainOutput[i] = add( timeDomainOutput[i], shl( hTcxDec->syn_Overl[i], TCX_IMDCT_HEADROOM ) ); /*st->q_old_outLB_fx*/ move16(); } } @@ -3780,12 +3780,12 @@ void generate_comfort_noise_dec_fx( lpcorder = M; move16(); - old_Aq = st->old_Aq_12_8_fx; - old_exc = st->old_exc_fx + sub( L_EXC_MEM_DEC, N2 ); - old_syn_pe = st->mem_syn2_fx; - old_syn = st->syn[lpcorder]; + old_Aq = st->old_Aq_12_8_fx; /*Q12*/ + old_exc = st->old_exc_fx + sub( L_EXC_MEM_DEC, N2 ); /*Q_exc*/ + old_syn_pe = st->mem_syn2_fx; /*Q_syn*/ + old_syn = st->syn[lpcorder]; /*Q_syn*/ move16(); - preemph_fac = st->preemph_fac; + preemph_fac = st->preemph_fac; /*Q15*/ move16(); Q_exc = st->Q_exc; move16(); @@ -3802,16 +3802,16 @@ void generate_comfort_noise_dec_fx( normShiftEM1 = sub( normShiftE, 1 ); normShiftP2 = add( normShiftE, CNG_NORM_RECIPROCAL_RANGE_SHIFT ); - old_exc_ener = L_shr( L_mult( old_exc[0], old_exc[0] ), normShiftP2 ); + old_exc_ener = L_shr( L_mult( old_exc[0], old_exc[0] ), normShiftP2 ); /*2*(Q_exc)+1+normShiftP2*/ FOR( i = 1; i < N2; i++ ) { - old_exc_ener = L_add( old_exc_ener, L_shr( L_mult( old_exc[i], old_exc[i] ), normShiftP2 ) ); + old_exc_ener = L_add( old_exc_ener, L_shr( L_mult( old_exc[i], old_exc[i] ), normShiftP2 ) ); /*2*(Q_exc)+1+normShiftP2*/ } - old_exc_ener = L_shl( Mpy_32_16_1( old_exc_ener, shl( normFacE, normShiftEM1 ) ), 1 ); + old_exc_ener = L_shl( Mpy_32_16_1( old_exc_ener, shl( normFacE, normShiftEM1 ) ), 1 ); /*Q31*/ old_exc_ener_exp = 0; move16(); - old_exc_ener = Sqrt32( old_exc_ener, &old_exc_ener_exp ); + old_exc_ener = Sqrt32( old_exc_ener, &old_exc_ener_exp ); /*Q31 - old_exc_ener_exp*/ old_exc_ener_exp = add( old_exc_ener_exp, ( sub( 15, Q_exc ) ) ); /* shift to be in the range of values supported by getNormReciprocalWord16() */ @@ -3832,14 +3832,14 @@ void generate_comfort_noise_dec_fx( move16(); gain = L_add( gain, L_shr( L_mult( noise[i], noise[i] ), normShiftP2 ) ); } - gain = L_shl( Mpy_32_16_1( gain, shl( normFacG, normShiftGM1 ) ), 1 ); + gain = L_shl( Mpy_32_16_1( gain, shl( normFacG, normShiftGM1 ) ), 1 ); /*Q31 - gain_exp*/ gain_exp = 2 * CNG_RAND_GAUSS_SHIFT; move16(); - gain = ISqrt32( gain, &gain_exp ); + gain = ISqrt32( gain, &gain_exp ); /*Q31 - gain_exp*/ - gain = Mpy_32_32( old_exc_ener, gain ); - gain16 = extract_h( gain ); + gain = Mpy_32_32( old_exc_ener, gain ); /*Q31 - old_exc_ener_exp - gain_exp*/ + gain16 = extract_h( gain ); /*Q15 - old_exc_ener_exp - gain_exp*/ gain_exp = add( old_exc_ener_exp, gain_exp ); noiseExp = add( CNG_RAND_GAUSS_SHIFT, gain_exp ); @@ -3848,7 +3848,7 @@ void generate_comfort_noise_dec_fx( FOR( i = 0; i < N; i++ ) { #ifdef BASOP_NOGLOB - noise[i] = shr_sat( mult( noise[i], gain16 ), s ); + noise[i] = shr_sat( mult( noise[i], gain16 ), s ); /*Q15 - noiseExp*/ #else noise[i] = shr( mult( noise[i], gain16 ), s ); #endif @@ -3861,7 +3861,7 @@ void generate_comfort_noise_dec_fx( FOR( i = 0; i < lpcorder; i++ ) { #ifdef BASOP_NOGLOB - old_syn_pe_tmp[i] = shr_sat( old_syn_pe[i], s ); + old_syn_pe_tmp[i] = shr_sat( old_syn_pe[i], s ); /*Q0*/ #else old_syn_pe_tmp[i] = shr( old_syn_pe[i], s ); #endif @@ -3892,11 +3892,11 @@ void generate_comfort_noise_dec_fx( FOR( i = 0; i < N4; i++ ) { - tmp = mult( noise[i], hFdCngCom->olapWinSyn[i].v.re ); + tmp = mult( noise[i], hFdCngCom->olapWinSyn[i].v.re ); /*Q15 - noiseExp*/ timeDomainOutput[i] = add( timeDomainOutput[i], tmp ); move16(); - tmp = mult( noise[add( i, N4 )], hFdCngCom->olapWinSyn[sub( sub( N4, 1 ), i )].v.im ); - timeDomainOutput[add( i, N4 )] = add( timeDomainOutput[add( i, N4 )], tmp ); + tmp = mult( noise[( i + N4 )], hFdCngCom->olapWinSyn[( ( N4 - 1 ) - i )].v.im ); /*Q15 - noiseExp*/ + timeDomainOutput[( i + N4 )] = add( timeDomainOutput[( i + N4 )], tmp ); move16(); } } @@ -3904,13 +3904,13 @@ void generate_comfort_noise_dec_fx( } void generate_comfort_noise_dec_ivas_fx( - Word32 **bufferReal, /* o : Real part of input bands */ - Word32 **bufferImag, /* o : Imaginary part of input bands */ + Word32 **bufferReal, /* o : Real part of input bands bufferScale*/ + Word32 **bufferImag, /* o : Imaginary part of input bands bufferScale*/ Word16 *bufferScale, /* o : pointer to scalefactor for real and imaginary part of input bands */ Decoder_State *st, /* i/o: decoder state structure */ Word16 *Q_new, - Word16 gen_exc, - const Word16 nchan_out /* i : number of output channels */ + Word16 gen_exc, /*Q0*/ + const Word16 nchan_out /* i : number of output channels Q0*/ ) { Word16 i, j, s; @@ -3927,7 +3927,7 @@ void generate_comfort_noise_dec_ivas_fx( Word16 c1, c2; Word32 tmp1, tmp2; Word16 scaleCldfb; - Word32 *fftBuffer = hFdCngCom->fftBuffer; + Word32 *fftBuffer = hFdCngCom->fftBuffer; /*hFdCngCom->fftBuffer_exp*/ Word16 fftBuffer_exp = hFdCngCom->fftBuffer_exp; Word16 fftBuffer_temp_exp[FFTLEN]; Word16 *timeDomainOutput = hFdCngCom->timeDomainBuffer; @@ -3944,19 +3944,19 @@ void generate_comfort_noise_dec_ivas_fx( hTcxDec = st->hTcxDec; - scaleCldfb = mult( hFdCngCom->invScalingFactor, CLDFB_SCALING ); + scaleCldfb = mult( hFdCngCom->invScalingFactor, CLDFB_SCALING ); /*CLDFBinvScalingFactor_EXP + 1*/ temp = 0; move16(); - c1 = Sqrt16( hFdCngCom->coherence_fx, &temp ); - c1 = shl( c1, temp ); + c1 = Sqrt16( hFdCngCom->coherence_fx, &temp ); /*Q15 - temp*/ + c1 = shl( c1, temp ); /*Q15*/ temp = 0; move16(); - c2 = Sqrt16( sub( MAX_16, hFdCngCom->coherence_fx ), &temp ); - c2 = shl( c2, temp ); + c2 = Sqrt16( sub( MAX_16, hFdCngCom->coherence_fx ), &temp ); /*Q15 - temp*/ + c2 = shl( c2, temp ); /*Q15*/ temp = getScaleFactor32( fftBuffer, FFTLEN ); - scale_sig32( fftBuffer, FFTLEN, temp ); + scale_sig32( fftBuffer, FFTLEN, temp ); /*Q31 - hFdCngCom->fftBuffer_exp + temp*/ fftBuffer_exp = sub( fftBuffer_exp, temp ); hFdCngCom->fftBuffer_exp = fftBuffer_exp; move16(); @@ -3982,7 +3982,7 @@ void generate_comfort_noise_dec_ivas_fx( { rand_gauss_fx( &tmp1, seed, Q15 ); rand_gauss_fx( &tmp2, seed2, Q15 ); - fftBuffer[0] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); + fftBuffer[0] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); /*Q0*/ move32(); fftBuffer_temp_exp[0] = Q16 + Q15; move16(); @@ -3995,13 +3995,13 @@ void generate_comfort_noise_dec_ivas_fx( } sqrtNoiseLevel_exp = cngNoiseLevel_exp; move16(); - sqrtNoiseLevel = Sqrt32( *ptr_level, &sqrtNoiseLevel_exp ); - fftBuffer[0] = Mpy_32_32( fftBuffer[0], sqrtNoiseLevel ); + sqrtNoiseLevel = Sqrt32( *ptr_level, &sqrtNoiseLevel_exp ); /*Q31 - sqrtNoiseLevel_exp*/ + fftBuffer[0] = Mpy_32_32( fftBuffer[0], sqrtNoiseLevel ); /*Q31 - (sqrtNoiseLevel_exp + fftBuffer_temp_exp[0])*/ move32(); fftBuffer_temp_exp[0] = add( sqrtNoiseLevel_exp, fftBuffer_temp_exp[0] ); move16(); ptr_level++; - ptr_r = fftBuffer + 2; + ptr_r = fftBuffer + 2; /*Q31 - (fftBuffer_temp_exp)*/ idx = 2; } ELSE @@ -4009,11 +4009,11 @@ void generate_comfort_noise_dec_ivas_fx( fftBuffer[0] = 0; move16(); set32_fx( fftBuffer + 2, 0, shl( sub( hFdCngCom->startBand, 1 ), 1 ) ); - ptr_r = fftBuffer + shl( hFdCngCom->startBand, 1 ); - idx = shl( hFdCngCom->startBand, 1 ); + ptr_r = fftBuffer + shl( hFdCngCom->startBand, 1 ); /*Q31 - fftBuffer_exp*/ + idx = shl( hFdCngCom->startBand, 1 ); /*Q0*/ } - ptr_i = ptr_r + 1; + ptr_i = ptr_r + 1; /*Q31 - fftBuffer_exp*/ FOR( ; ptr_level < cngNoiseLevel + sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); ptr_level++ ) { /* Real part in FFT bins */ @@ -4021,23 +4021,23 @@ void generate_comfort_noise_dec_ivas_fx( test(); IF( EQ_16( st->element_mode, IVAS_CPE_MDCT ) || ( EQ_16( st->element_mode, IVAS_SCE ) && st->cng_ism_flag ) ) { - rand_gauss_fx( &tmp1, seed, Q15 ); - rand_gauss_fx( &tmp2, seed2, Q15 ); - *ptr_r = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); + rand_gauss_fx( &tmp1, seed, Q15 ); /*Q15*/ + rand_gauss_fx( &tmp2, seed2, Q15 ); /*Q15*/ + *ptr_r = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); /*Q15*/ move32(); fftBuffer_temp_exp[idx] = Q16; move16(); } ELSE { - rand_gauss_fx( ptr_r, seed, Q15 ); + rand_gauss_fx( ptr_r, seed, Q15 ); /*Q15*/ fftBuffer_temp_exp[idx] = Q16; move16(); } sqrtNoiseLevel_exp = sub( cngNoiseLevel_exp, 1 ); - sqrtNoiseLevel = Sqrt32( *ptr_level, &sqrtNoiseLevel_exp ); - ( *ptr_r ) = Mpy_32_32( ( *ptr_r ), sqrtNoiseLevel ); + sqrtNoiseLevel = Sqrt32( *ptr_level, &sqrtNoiseLevel_exp ); /*Q31 - sqrtNoiseLevel_exp*/ + ( *ptr_r ) = Mpy_32_32( ( *ptr_r ), sqrtNoiseLevel ); /*Q15 - sqrtNoiseLevel_exp*/ move32(); fftBuffer_temp_exp[idx] = add( fftBuffer_temp_exp[idx], sqrtNoiseLevel_exp ); move16(); @@ -4049,22 +4049,22 @@ void generate_comfort_noise_dec_ivas_fx( test(); IF( EQ_16( st->element_mode, IVAS_CPE_MDCT ) || ( EQ_16( st->element_mode, IVAS_SCE ) && st->cng_ism_flag ) ) { - rand_gauss_fx( &tmp1, seed, Q15 ); - rand_gauss_fx( &tmp2, seed2, Q15 ); - *ptr_i = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); + rand_gauss_fx( &tmp1, seed, Q15 ); /*Q15*/ + rand_gauss_fx( &tmp2, seed2, Q15 ); /*Q15*/ + *ptr_i = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); /*Q15*/ move32(); fftBuffer_temp_exp[idx] = Q16; move16(); } ELSE { - rand_gauss_fx( ptr_i, seed, Q15 ); + rand_gauss_fx( ptr_i, seed, Q15 ); /*Q15*/ fftBuffer_temp_exp[idx] = Q16; move16(); } sqrtNoiseLevel_exp = sub( cngNoiseLevel_exp, 1 ); - sqrtNoiseLevel = Sqrt32( *ptr_level, &sqrtNoiseLevel_exp ); - ( *ptr_i ) = Mpy_32_32( ( *ptr_i ), sqrtNoiseLevel ); + sqrtNoiseLevel = Sqrt32( *ptr_level, &sqrtNoiseLevel_exp ); /*Q31 - sqrtNoiseLevel_exp*/ + ( *ptr_i ) = Mpy_32_32( ( *ptr_i ), sqrtNoiseLevel ); /*Q15 - sqrtNoiseLevel_exp*/ move32(); fftBuffer_temp_exp[idx] = add( fftBuffer_temp_exp[idx], sqrtNoiseLevel_exp ); move16(); @@ -4082,7 +4082,7 @@ void generate_comfort_noise_dec_ivas_fx( fftBuffer_exp = MAX_16; move16(); - FOR( i = 0; i < FFTLEN; i++ ) + FOR( i = 0; i < hFdCngCom->fftlen; i++ ) { IF( fftBuffer[i] != 0 ) { @@ -4095,9 +4095,9 @@ void generate_comfort_noise_dec_ivas_fx( move16(); } fftBuffer_exp = sub( 31, fftBuffer_exp ); - FOR( i = 0; i < FFTLEN; i++ ) + FOR( i = 0; i < hFdCngCom->fftlen; i++ ) { - fftBuffer[i] = L_shr( fftBuffer[i], sub( fftBuffer_exp, fftBuffer_temp_exp[i] ) ); + fftBuffer[i] = L_shr( fftBuffer[i], sub( fftBuffer_exp, fftBuffer_temp_exp[i] ) ); /*Q31 - fftBuffer_temp_exp[i]*/ move32(); } @@ -4119,7 +4119,7 @@ void generate_comfort_noise_dec_ivas_fx( /* Perform STFT synthesis */ SynthesisSTFT_ivas_fx( fftBuffer, fftBuffer_exp, timeDomainOutput, hFdCngCom->olapBufferSynth, hFdCngCom->olapWinSyn, tcx_transition, hFdCngCom, gen_exc, Q_new, st->element_mode, nchan_out ); - scale_sig32( fftBuffer + hFdCngCom->fftlen, sub( FFTLEN, hFdCngCom->fftlen ), sub( fftBuffer_exp, hFdCngCom->fftBuffer_exp ) ); + scale_sig32( fftBuffer + hFdCngCom->fftlen, sub( FFTLEN, hFdCngCom->fftlen ), sub( fftBuffer_exp, hFdCngCom->fftBuffer_exp ) ); /*Q31 - fftBuffer_exp*/ { Word32 Lener, att; @@ -4128,12 +4128,12 @@ void generate_comfort_noise_dec_ivas_fx( /* calculate the residual signal energy */ /*enr = dotp( hFdCngCom->exc_cng, hFdCngCom->exc_cng, hFdCngCom->frameSize ) / hFdCngCom->frameSize;*/ - Lener = Dot_productSq16HQ( 1, hFdCngCom->exc_cng, st->L_frame, &exp ); - exp = add( sub( shl( sub( 15, *Q_new ), 1 ), 8 ), exp ); /*8 = log2(256)*/ + Lener = Dot_productSq16HQ( 1, hFdCngCom->exc_cng, st->L_frame, &exp ); /*Q31 - exp*/ + exp = add( sub( shl( sub( 15, *Q_new ), 1 ), 8 ), exp ); /*8 = log2(256)*/ /* convert log2 of residual signal energy */ /*(float)log10( enr + 0.1f ) / (float)log10( 2.0f );*/ - Lener = BASOP_Util_Log2( Lener ); + Lener = BASOP_Util_Log2( Lener ); /*Q25*/ Lener = L_add( Lener, L_shl( L_deposit_l( exp ), WORD32_BITS - 1 - LD_DATA_SCALE ) ); /*Q25*/ if ( EQ_16( st->L_frame, L_FRAME16k ) ) { @@ -4147,24 +4147,24 @@ void generate_comfort_noise_dec_ivas_fx( IF( st->CNG_mode >= 0 ) { /* Bitrate adapted attenuation */ - att = L_shl( L_deposit_l( ENR_ATT_fx[st->CNG_mode] ), 17 ); + att = L_shl( L_deposit_l( ENR_ATT_fx[st->CNG_mode] ), 17 ); /*Q25*/ } ELSE { /* Use least attenuation for higher bitrates */ - att = L_shl( L_deposit_l( ENR_ATT_fx[4] ), 17 ); + att = L_shl( L_deposit_l( ENR_ATT_fx[4] ), 17 ); /*Q25*/ } } ELSE { - att = 384 << 17; - move16(); /*1.5 Q8<<17=Q25*/ + att = 384 << 17; /*1.5 Q8<<17=Q25*/ + move16(); } Lener = L_sub( Lener, att ); } /*st->lp_ener = 0.8f * stcod->lp_ener + 0.2f * pow( 2.0f, enr );*/ - Lener = BASOP_util_Pow2( Lener, 6, &exp ); - Lener = Mult_32_16( Lener, 6554 /*0.2f Q15*/ ); + Lener = BASOP_util_Pow2( Lener, 6, &exp ); /*Q31 - exp*/ + Lener = Mult_32_16( Lener, 6554 /*0.2f Q15*/ ); /*Q31 - exp*/ exp = sub( 25, exp ); Lener = L_shr( Lener, exp ); /*Q6*/ st->lp_ener_fx = L_add( Mult_32_16( st->lp_ener_fx, 26214 /*0.8f Q15*/ ), Lener ); /*Q6*/ @@ -4184,29 +4184,29 @@ void generate_comfort_noise_dec_ivas_fx( FOR( j = hFdCngCom->numCoreBands; j < hFdCngCom->regularStopBand; j++ ) { sqrtNoiseLevel_exp = add( CLDFBinvScalingFactor_EXP, sub( cngNoiseLevel_exp, 1 ) ); - sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *ptr_level, scaleCldfb ), &sqrtNoiseLevel_exp ); + sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *ptr_level, scaleCldfb ), &sqrtNoiseLevel_exp ); /*Q31 - sqrtNoiseLevel_exp*/ FOR( i = 0; i < hFdCngCom->numSlots; i++ ) { /* Real part in CLDFB band */ IF( EQ_16( st->element_mode, IVAS_CPE_MDCT ) || ( EQ_16( st->element_mode, IVAS_SCE ) && st->cng_ism_flag ) ) { - rand_gauss_fx( &tmp1, seed, Q15 ); - rand_gauss_fx( &tmp2, seed2, Q15 ); - bufferReal[i][j] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); + rand_gauss_fx( &tmp1, seed, Q15 ); /*Q15*/ + rand_gauss_fx( &tmp2, seed2, Q15 ); /*Q15*/ + bufferReal[i][j] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); /*Q15*/ move32(); bufferReal_exp[j] = Q16; move16(); } ELSE { - rand_gauss_fx( &bufferReal[i][j], seed, Q15 ); + rand_gauss_fx( &bufferReal[i][j], seed, Q15 ); /*Q15*/ move32(); bufferReal_exp[j] = Q16; move16(); } - bufferReal[i][j] = Mpy_32_32( bufferReal[i][j], sqrtNoiseLevel ); + bufferReal[i][j] = Mpy_32_32( bufferReal[i][j], sqrtNoiseLevel ); /*Q31 - ( bufferReal_exp[j] + sqrtNoiseLevel_exp )*/ move32(); bufferReal_exp[j] = add( bufferReal_exp[j], sqrtNoiseLevel_exp ); move16(); @@ -4214,20 +4214,20 @@ void generate_comfort_noise_dec_ivas_fx( /* Imaginary part in CLDFB band */ IF( EQ_16( st->element_mode, IVAS_CPE_MDCT ) || ( EQ_16( st->element_mode, IVAS_SCE ) && st->cng_ism_flag ) ) { - rand_gauss_fx( &tmp1, seed, Q15 ); - rand_gauss_fx( &tmp2, seed2, Q15 ); - bufferImag[i][j] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); + rand_gauss_fx( &tmp1, seed, Q15 ); /*Q15*/ + rand_gauss_fx( &tmp2, seed2, Q15 ); /*Q15*/ + bufferImag[i][j] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); /*Q15*/ move32(); bufferImag_exp[j] = Q16; move16(); } ELSE { - rand_gauss_fx( &bufferImag[i][j], seed, Q15 ); + rand_gauss_fx( &bufferImag[i][j], seed, Q15 ); /*Q15*/ bufferImag_exp[j] = Q16; move16(); } - bufferImag[i][j] = Mpy_32_32( bufferImag[i][j], sqrtNoiseLevel ); + bufferImag[i][j] = Mpy_32_32( bufferImag[i][j], sqrtNoiseLevel ); /*Q31 - ( bufferReal_exp[j] + sqrtNoiseLevel_exp )*/ bufferImag_exp[j] = add( bufferImag_exp[j], sqrtNoiseLevel_exp ); move16(); @@ -4248,9 +4248,9 @@ void generate_comfort_noise_dec_ivas_fx( { FOR( i = 0; i < hFdCngCom->numSlots; i++ ) { - bufferImag[i][j] = L_shr( bufferImag[i][j], sub( *bufferScale, bufferImag_exp[j] ) ); + bufferImag[i][j] = L_shr( bufferImag[i][j], sub( *bufferScale, bufferImag_exp[j] ) ); /*bufferImag_exp*/ move32(); - bufferReal[i][j] = L_shr( bufferReal[i][j], sub( *bufferScale, bufferReal_exp[j] ) ); + bufferReal[i][j] = L_shr( bufferReal[i][j], sub( *bufferScale, bufferReal_exp[j] ) ); /*bufferReal_exp*/ move32(); } } @@ -4271,9 +4271,9 @@ void generate_comfort_noise_dec_ivas_fx( assert( hFdCngCom->frameSize <= 640 ); - seed_loc = hFdCngCom->seed; + seed_loc = hFdCngCom->seed; /*Q0*/ move16(); - N = hFdCngCom->frameSize; + N = hFdCngCom->frameSize; /*Q0*/ move16(); N2 = shr( hFdCngCom->frameSize, 1 ); @@ -4294,7 +4294,7 @@ void generate_comfort_noise_dec_ivas_fx( { FOR( i = 0; i < sub( hFdCngCom->frameSize, NS2SA( st->sr_core, N_ZERO_MDCT_NS ) ); i++ ) { - timeDomainOutput[i] = add( timeDomainOutput[i], shr_r( st->hHQ_core->old_out_LB_fx[i + NS2SA( st->sr_core, N_ZERO_MDCT_NS )], st->hHQ_core->Q_old_wtda_LB ) ); + timeDomainOutput[i] = add( timeDomainOutput[i], shr_r( st->hHQ_core->old_out_LB_fx[i + NS2SA( st->sr_core, N_ZERO_MDCT_NS )], st->hHQ_core->Q_old_wtda_LB ) ); /*st->q_old_outLB_fx*/ move16(); } } @@ -4305,7 +4305,7 @@ void generate_comfort_noise_dec_ivas_fx( FOR( i = 0; i < st->hTcxCfg->tcx_mdct_window_length; i++ ) { - timeDomainOutput[i] = add( timeDomainOutput[i], shl( hTcxDec->syn_Overl[i], TCX_IMDCT_HEADROOM ) ); + timeDomainOutput[i] = add( timeDomainOutput[i], shl( hTcxDec->syn_Overl[i], TCX_IMDCT_HEADROOM ) ); /*st->q_old_outLB_fx*/ move16(); } } @@ -4327,12 +4327,12 @@ void generate_comfort_noise_dec_ivas_fx( lpcorder = M; move16(); - old_Aq = st->old_Aq_12_8_fx; - old_exc = st->old_exc_fx + sub( L_EXC_MEM_DEC, N2 ); - old_syn_pe = st->mem_syn2_fx; - old_syn = st->syn[lpcorder]; + old_Aq = st->old_Aq_12_8_fx; /*Q12*/ + old_exc = st->old_exc_fx + sub( L_EXC_MEM_DEC, N2 ); /*Q_exc*/ + old_syn_pe = st->mem_syn2_fx; /*Q_syn*/ + old_syn = st->syn[lpcorder]; /*Q_syn*/ move16(); - preemph_fac = st->preemph_fac; + preemph_fac = st->preemph_fac; /*Q15*/ move16(); Q_exc = st->Q_exc; move16(); @@ -4349,16 +4349,16 @@ void generate_comfort_noise_dec_ivas_fx( normShiftEM1 = sub( normShiftE, 1 ); normShiftP2 = add( normShiftE, CNG_NORM_RECIPROCAL_RANGE_SHIFT ); - old_exc_ener = L_shr( L_mult( old_exc[0], old_exc[0] ), normShiftP2 ); + old_exc_ener = L_shr( L_mult( old_exc[0], old_exc[0] ), normShiftP2 ); /*2*(Q_exc)+1+normShiftP2*/ FOR( i = 1; i < N2; i++ ) { - old_exc_ener = L_add( old_exc_ener, L_shr( L_mult( old_exc[i], old_exc[i] ), normShiftP2 ) ); + old_exc_ener = L_add( old_exc_ener, L_shr( L_mult( old_exc[i], old_exc[i] ), normShiftP2 ) ); /*2*(Q_exc)+1+normShiftP2*/ } - old_exc_ener = L_shl( Mpy_32_16_1( old_exc_ener, shl( normFacE, normShiftEM1 ) ), 1 ); + old_exc_ener = L_shl( Mpy_32_16_1( old_exc_ener, shl( normFacE, normShiftEM1 ) ), 1 ); /*Q31*/ old_exc_ener_exp = 0; move16(); - old_exc_ener = Sqrt32( old_exc_ener, &old_exc_ener_exp ); + old_exc_ener = Sqrt32( old_exc_ener, &old_exc_ener_exp ); /*Q31 - old_exc_ener_exp*/ old_exc_ener_exp = add( old_exc_ener_exp, ( sub( 15, Q_exc ) ) ); /* shift to be in the range of values supported by getNormReciprocalWord16() */ @@ -4379,14 +4379,14 @@ void generate_comfort_noise_dec_ivas_fx( move16(); gain = L_add( gain, L_shr( L_mult( noise[i], noise[i] ), normShiftP2 ) ); } - gain = L_shl( Mpy_32_16_1( gain, shl( normFacG, normShiftGM1 ) ), 1 ); + gain = L_shl( Mpy_32_16_1( gain, shl( normFacG, normShiftGM1 ) ), 1 ); /*Q31 - gain_exp*/ gain_exp = 2 * CNG_RAND_GAUSS_SHIFT; move16(); - gain = ISqrt32( gain, &gain_exp ); + gain = ISqrt32( gain, &gain_exp ); /*Q31 - gain_exp*/ - gain = Mpy_32_32( old_exc_ener, gain ); - gain16 = extract_h( gain ); + gain = Mpy_32_32( old_exc_ener, gain ); /*Q31 - old_exc_ener_exp - gain_exp*/ + gain16 = extract_h( gain ); /*Q15 - old_exc_ener_exp - gain_exp*/ gain_exp = add( old_exc_ener_exp, gain_exp ); noiseExp = add( CNG_RAND_GAUSS_SHIFT, gain_exp ); @@ -4395,7 +4395,7 @@ void generate_comfort_noise_dec_ivas_fx( FOR( i = 0; i < N; i++ ) { #ifdef BASOP_NOGLOB - noise[i] = shr_sat( mult( noise[i], gain16 ), s ); + noise[i] = shr_sat( mult( noise[i], gain16 ), s ); /*Q15 - noiseExp*/ #else noise[i] = shr( mult( noise[i], gain16 ), s ); #endif @@ -4408,7 +4408,7 @@ void generate_comfort_noise_dec_ivas_fx( FOR( i = 0; i < lpcorder; i++ ) { #ifdef BASOP_NOGLOB - old_syn_pe_tmp[i] = shr_sat( old_syn_pe[i], s ); + old_syn_pe_tmp[i] = shr_sat( old_syn_pe[i], s ); /*Q0*/ #else old_syn_pe_tmp[i] = shr( old_syn_pe[i], s ); #endif @@ -4439,11 +4439,11 @@ void generate_comfort_noise_dec_ivas_fx( FOR( i = 0; i < N4; i++ ) { - tmp = mult( noise[i], hFdCngCom->olapWinSyn[i].v.re ); + tmp = mult( noise[i], hFdCngCom->olapWinSyn[i].v.re ); /*Q15 - noiseExp*/ timeDomainOutput[i] = add( timeDomainOutput[i], tmp ); move16(); - tmp = mult( noise[add( i, N4 )], hFdCngCom->olapWinSyn[sub( sub( N4, 1 ), i )].v.im ); - timeDomainOutput[add( i, N4 )] = add( timeDomainOutput[add( i, N4 )], tmp ); + tmp = mult( noise[( i + N4 )], hFdCngCom->olapWinSyn[( ( N4 - 1 ) - i )].v.im ); /*Q15 - noiseExp*/ + timeDomainOutput[( i + N4 )] = add( timeDomainOutput[( i + N4 )], tmp ); move16(); move16(); } @@ -4453,8 +4453,8 @@ void generate_comfort_noise_dec_ivas_fx( } void generate_comfort_noise_dec_hf_fx( - Word32 **bufferReal, /* o : matrix to real part of input bands */ - Word32 **bufferImag, /* o : matrix to imaginary part of input bands */ + Word32 **bufferReal, /* o : matrix to real part of input bands bufferScale*/ + Word32 **bufferImag, /* o : matrix to imaginary part of input bands bufferScale*/ Word16 *bufferScale, /* o : pointer to scalefactor for real and imaginary part of input bands */ Decoder_State *st ) { @@ -4468,14 +4468,14 @@ void generate_comfort_noise_dec_hf_fx( Word32 *ptr_level; HANDLE_FD_CNG_COM hFdCngCom = st->hFdCngDec->hFdCngCom; - cngNoiseLevel = hFdCngCom->cngNoiseLevel + sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); + cngNoiseLevel = hFdCngCom->cngNoiseLevel + sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); /*Q31 - hFdCngCom->cngNoiseLevelExp*/ cngNoiseLevelExp = hFdCngCom->cngNoiseLevelExp; move16(); - ptr_level = cngNoiseLevel; + ptr_level = cngNoiseLevel; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ seed = &( hFdCngCom->seed ); /* scaleCLDFB: CLDFBinvScalingFactor_EXP + 1 */ - scaleCLDFB = mult( hFdCngCom->invScalingFactor, CLDFB_SCALING ); + scaleCLDFB = mult( hFdCngCom->invScalingFactor, CLDFB_SCALING ); /*CLDFBinvScalingFactor_EXP + 1*/ sn = 0; move16(); @@ -4500,21 +4500,21 @@ void generate_comfort_noise_dec_hf_fx( /* scaleCLDFB: CLDFBinvScalingFactor_EXP + 1 */ s = 0; move16(); - sqrtNoiseLevel = Sqrt32( L_shr( Mpy_32_16_1( *ptr_level, scaleCLDFB ), sn ), &s ); + sqrtNoiseLevel = Sqrt32( L_shr( Mpy_32_16_1( *ptr_level, scaleCLDFB ), sn ), &s ); /*Q31 - s*/ FOR( i = 0; i < hFdCngCom->numSlots; i++ ) { /* Real part in CLDFB band */ - bufferReal[i][j] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); + bufferReal[i][j] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); /*bufferScale*/ move32(); /*fprintf(pFile,"%13.10f\n",WORD322FL_SCALE(bufferReal[i][j],sc));*/ /* Imaginary part in CLDFB band */ - bufferImag[i][j] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); + bufferImag[i][j] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), s ); /*bufferScale*/ move32(); /*fprintf(pFile,"%13.10f\n",WORD322FL_SCALE(bufferImag[i][j],sc));*/ } - ptr_level = ptr_level + 1; + ptr_level = ptr_level + 1; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ } *bufferScale = sub( sc, 15 ); move16(); @@ -4522,11 +4522,11 @@ void generate_comfort_noise_dec_hf_fx( } void generate_comfort_noise_dec_hf_ivas_fx( - Word32 **bufferReal, /* o : matrix to real part of input bands */ - Word32 **bufferImag, /* o : matrix to imaginary part of input bands */ + Word32 **bufferReal, /* o : matrix to real part of input bands bufferScale*/ + Word32 **bufferImag, /* o : matrix to imaginary part of input bands bufferScale*/ Word16 *bufferScale, /* o : pointer to scalefactor for real and imaginary part of input bands */ HANDLE_FD_CNG_COM hFdCngCom, /* i/o: FD_CNG structure containing all buffers and variables */ - const Word16 cng_coh_flag /* i : CNG Flag for coherence handling */ + const Word16 cng_coh_flag /* i : CNG Flag for coherence handling Q0*/ ) { Word16 i, j, s, sc, sn; @@ -4541,15 +4541,15 @@ void generate_comfort_noise_dec_hf_ivas_fx( Word32 *cngNoiseLevel; Word32 tmp1, tmp2; - cngNoiseLevel = hFdCngCom->cngNoiseLevel + sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); + cngNoiseLevel = hFdCngCom->cngNoiseLevel + sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); /*Q31 - hFdCngCom->cngNoiseLevelExp*/ cngNoiseLevelExp = hFdCngCom->cngNoiseLevelExp; move16(); - ptr_level = cngNoiseLevel; + ptr_level = cngNoiseLevel; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ seed = &( hFdCngCom->seed ); /* scaleCLDFB: CLDFBinvScalingFactor_EXP + 1 */ - scaleCLDFB = mult( hFdCngCom->invScalingFactor, CLDFB_SCALING ); + scaleCLDFB = mult( hFdCngCom->invScalingFactor, CLDFB_SCALING ); /*CLDFBinvScalingFactor_EXP + 1*/ seed2 = &( hFdCngCom->seed ); @@ -4567,13 +4567,13 @@ void generate_comfort_noise_dec_hf_ivas_fx( s = 0; move16(); - c1 = Sqrt16( hFdCngCom->coherence_fx, &s ); - c1 = shl( c1, s ); // Q15 + c1 = Sqrt16( hFdCngCom->coherence_fx, &s ); /*Q15 - s*/ + c1 = shl( c1, s ); // Q15 s = 0; move16(); - c2 = Sqrt16( sub( MAX16B, hFdCngCom->coherence_fx ), &s ); - c2 = shl( c2, s ); // Q15 + c2 = Sqrt16( sub( MAX16B, hFdCngCom->coherence_fx ), &s ); /*Q15 - s*/ + c2 = shl( c2, s ); // Q15 } sn = 0; @@ -4605,38 +4605,38 @@ void generate_comfort_noise_dec_hf_ivas_fx( /* scaleCLDFB: CLDFBinvScalingFactor_EXP + 1 */ s = 0; move16(); - sqrtNoiseLevel = Sqrt32( L_shr( Mpy_32_16_1( *ptr_level, scaleCLDFB ), sn ), &s ); + sqrtNoiseLevel = Sqrt32( L_shr( Mpy_32_16_1( *ptr_level, scaleCLDFB ), sn ), &s ); /*Q31 - s*/ IF( cng_coh_flag ) { - rand_gauss_fx( &tmp1, seed, Q28 ); - rand_gauss_fx( &tmp2, seed2, Q28 ); + rand_gauss_fx( &tmp1, seed, Q28 ); /*Q28*/ + rand_gauss_fx( &tmp2, seed2, Q28 ); /*Q28*/ - bufferReal[i][j] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); + bufferReal[i][j] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); /*bufferScale*/ move32(); - bufferReal[i][j] = L_shl( Mpy_32_32( bufferReal[i][j], sqrtNoiseLevel ), s ); + bufferReal[i][j] = L_shl( Mpy_32_32( bufferReal[i][j], sqrtNoiseLevel ), s ); /*bufferScale*/ move32(); - rand_gauss_fx( &tmp1, seed, Q28 ); - rand_gauss_fx( &tmp2, seed2, Q28 ); + rand_gauss_fx( &tmp1, seed, Q28 ); /*Q28*/ + rand_gauss_fx( &tmp2, seed2, Q28 ); /*Q28*/ - bufferImag[i][j] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); + bufferImag[i][j] = L_add( Mpy_32_16_1( tmp1, c1 ), Mpy_32_16_1( tmp2, c2 ) ); /*bufferScale*/ move32(); - bufferImag[i][j] = L_shl( Mpy_32_32( bufferImag[i][j], sqrtNoiseLevel ), s ); + bufferImag[i][j] = L_shl( Mpy_32_32( bufferImag[i][j], sqrtNoiseLevel ), s ); /*bufferScale*/ move32(); } ELSE { /* Real part in CLDFB band */ - bufferReal[i][j] = L_shl( Mpy_32_32( L_shr( rand_gauss( seed ), 1 ), sqrtNoiseLevel ), s ); + bufferReal[i][j] = L_shl( Mpy_32_32( L_shr( rand_gauss( seed ), 1 ), sqrtNoiseLevel ), s ); /*bufferScale*/ move32(); /* Imaginary part in CLDFB band */ - bufferImag[i][j] = L_shl( Mpy_32_32( L_shr( rand_gauss( seed ), 1 ), sqrtNoiseLevel ), s ); + bufferImag[i][j] = L_shl( Mpy_32_32( L_shr( rand_gauss( seed ), 1 ), sqrtNoiseLevel ), s ); /*bufferScale*/ move32(); } } - ptr_level = ptr_level + 1; + ptr_level = ptr_level + 1; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ } *bufferScale = sub( sc, 15 ); move16(); @@ -4669,8 +4669,8 @@ void generate_masking_noise_fx( Word16 Q, HANDLE_FD_CNG_COM hFdCngCom /* i/o : pointer to FD_CNG_COM structure */ , - Word16 length, - Word16 core ) + Word16 length, /*Q0*/ + Word16 core /*Q0*/ ) { Word16 i, s, s1, s2, sq, cnt, startBand2, stopFFTbin2; Word16 scaleExp, fftBufferExp, cngNoiseLevelExp; @@ -4684,8 +4684,8 @@ void generate_masking_noise_fx( // PMTE(); /*IVAS CODE need to be added */ /* pointer initializations */ - cngNoiseLevel = hFdCngCom->cngNoiseLevel; - fftBuffer = hFdCngCom->fftBuffer; + cngNoiseLevel = hFdCngCom->cngNoiseLevel; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ + fftBuffer = hFdCngCom->fftBuffer; /*Q31 - hFdCngCom->fftBuffer_exp*/ seed = &( hFdCngCom->seed ); /* Compute additional CN level */ @@ -4707,7 +4707,7 @@ void generate_masking_noise_fx( IF( ( EQ_16( hFdCngCom->CngBandwidth, scaleTable_cn_only[i].bwmode ) ) && ( GE_32( hFdCngCom->CngBitrate, scaleTable_cn_only[i].bitrateFrom ) ) && ( LT_32( hFdCngCom->CngBitrate, scaleTable_cn_only[i].bitrateTo ) ) ) { - scale = scaleTable_cn_only[i].scale; + scale = scaleTable_cn_only[i].scale; /*Q14*/ move16(); BREAK; } @@ -4726,7 +4726,7 @@ void generate_masking_noise_fx( { IF( GE_32( hFdCngCom->CngBitrate, scaleTable_cn_only_amrwbio[i][0] ) ) { - scale = scaleTable_cn_only_amrwbio[i][1]; + scale = scaleTable_cn_only_amrwbio[i][1]; /*Q14*/ move16(); BREAK; } @@ -4740,7 +4740,7 @@ void generate_masking_noise_fx( /* scaleTable_cn_only[i].scale is scaled by 1 bit */ scaleExp = sub( 1, add( s1, s2 ) ); - scale = mult_r( shl( scale, s1 ), shl( hFdCngCom->likelihood_noisy_speech, s2 ) ); + scale = mult_r( shl( scale, s1 ), shl( hFdCngCom->likelihood_noisy_speech, s2 ) ); /*Q15 - scaleExp*/ { /* add exponent of scale and cngNoiseLevel */ @@ -4756,7 +4756,7 @@ void generate_masking_noise_fx( /* consider scaling of random noise */ fftBufferExp = add( fftBufferExp, CNG_RAND_GAUSS_SHIFT ); - cnt = sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); + cnt = sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); /*Q0*/ /* Generate Gaussian random noise in real and imaginary parts of the FFT bins Amplitudes are adjusted to the estimated noise level cngNoiseLevel in each bin @@ -4769,8 +4769,8 @@ void generate_masking_noise_fx( /* -s => consider scalefactor adaptation for sqrt calculation */ sq = sub( 0, s ); - sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *cngNoiseLevel, scale ), &sq ); - hFdCngCom->fftBuffer[0] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); + sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *cngNoiseLevel, scale ), &sq ); /*Q31 - sq*/ + hFdCngCom->fftBuffer[0] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); /*q31 - hFdCngCom->fftBuffer_exp*/ move32(); hFdCngCom->fftBuffer[1] = 0; move32(); @@ -4784,26 +4784,26 @@ void generate_masking_noise_fx( { startBand2 = shl( hFdCngCom->startBand, 1 ); set32_fx( hFdCngCom->fftBuffer, 0, startBand2 ); - fftBuffer = hFdCngCom->fftBuffer + startBand2; + fftBuffer = hFdCngCom->fftBuffer + startBand2; /*Q31 - hFdCngCom->fftBuffer_exp*/ } FOR( i = 0; i < cnt; i++ ) { /* -1 => weighting with 0.5, -s => consider scalefactor adaptation for sqrt calculation */ sq = sub( -1, s ); - sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *cngNoiseLevel, scale ), &sq ); + sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *cngNoiseLevel, scale ), &sq ); /*Q31 - sq*/ /* real part in FFT bins */ /* random noise is scaled by CNG_RAND_GAUSS_SHIFT bits */ - *fftBuffer = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); + *fftBuffer = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); /*Q31 - hFdCngCom->fftBuffer_exp*/ move32(); fftBuffer++; /* imaginary part in FFT bins */ /* random noise is scaled by CNG_RAND_GAUSS_SHIFT bits */ - *fftBuffer = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); + *fftBuffer = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); /*Q31 - hFdCngCom->fftBuffer_exp*/ move32(); fftBuffer++; @@ -4827,7 +4827,7 @@ void generate_masking_noise_fx( { FOR( i = 0; i < length; i++ ) { - timeDomainBuffer[i] = add( timeDomainBuffer[i], shr_r( maskingNoise[i], -Q ) ); + timeDomainBuffer[i] = add( timeDomainBuffer[i], shr_r( maskingNoise[i], -Q ) ); /*Q0*/ move16(); } } @@ -4836,7 +4836,7 @@ void generate_masking_noise_fx( FOR( i = 0; i < hFdCngCom->frameSize; i++ ) { #ifdef BASOP_NOGLOB - timeDomainBuffer[i] = add_sat( timeDomainBuffer[i], shr_r_sat( maskingNoise[i], -Q ) ); + timeDomainBuffer[i] = add_sat( timeDomainBuffer[i], shr_r_sat( maskingNoise[i], -Q ) ); /*Q0*/ #else timeDomainBuffer[i] = add( timeDomainBuffer[i], shr_r( maskingNoise[i], -Q ) ); #endif @@ -4865,18 +4865,18 @@ void generate_masking_noise_update_seed_fx( /* pointer initializations */ seed = &( hFdCngCom->seed ); - cnt = sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); + cnt = sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); /*Q0*/ IF( hFdCngCom->startBand == 0 ) { - rand_gauss( seed ); + rand_gauss( seed ); /*Q15*/ cnt = sub( cnt, 1 ); } FOR( i = 0; i < cnt; i++ ) { - rand_gauss( seed ); - rand_gauss( seed ); + rand_gauss( seed ); /*Q15*/ + rand_gauss( seed ); /*Q15*/ } @@ -4889,7 +4889,7 @@ void generate_masking_noise_update_seed_fx( ************************************************************/ #ifdef IVAS_FLOAT_FIXED void generate_masking_noise_mdct_fx( - Word32 *mdctBuffer, /* i/o: time-domain signal */ + Word32 *mdctBuffer, /* i/o: time-domain signal Q31 - mdctBuffer_e*/ Word16 *mdctBuffer_e, /* i/o: exponent time-domain signal */ HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ , @@ -4907,7 +4907,7 @@ void generate_masking_noise_mdct_fx( // PMTE(); /*IVAS CODE need to be added */ /* pointer initializations */ - cngNoiseLevel = hFdCngCom->cngNoiseLevel; + cngNoiseLevel = hFdCngCom->cngNoiseLevel; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ seed = &( hFdCngCom->seed ); /* Compute additional CN level */ @@ -4927,7 +4927,7 @@ void generate_masking_noise_mdct_fx( test(); IF( ( EQ_16( hFdCngCom->CngBandwidth, scaleTable_cn_only[i].bwmode ) ) && ( GE_32( hFdCngCom->CngBitrate, scaleTable_cn_only[i].bitrateFrom ) ) && ( LT_32( hFdCngCom->CngBitrate, scaleTable_cn_only[i].bitrateTo ) ) ) { - scale = scaleTable_cn_only[i].scale; + scale = scaleTable_cn_only[i].scale; /*Q14*/ move16(); BREAK; } @@ -4940,7 +4940,7 @@ void generate_masking_noise_mdct_fx( /* scaleTable_cn_only[i].scale is scaled by 1 bit */ scaleExp = sub( 1, add( s1, s2 ) ); - scale = mult_r( shl( scale, s1 ), shl( hFdCngCom->likelihood_noisy_speech, s2 ) ); + scale = mult_r( shl( scale, s1 ), shl( hFdCngCom->likelihood_noisy_speech, s2 ) ); /*Q15 - scaleExp*/ /* add exponent of scale and cngNoiseLevel */ maskingNoiseExp = add( scaleExp, cngNoiseLevelExp ); @@ -4955,7 +4955,7 @@ void generate_masking_noise_mdct_fx( /* consider scaling of random noise */ maskingNoiseExp = add( maskingNoiseExp, CNG_RAND_GAUSS_SHIFT ); - cnt = sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); + cnt = sub( hFdCngCom->stopFFTbin, hFdCngCom->startBand ); /*Q0*/ /* Generate Gaussian random noise in real and imaginary parts of the FFT bins @@ -4969,11 +4969,11 @@ void generate_masking_noise_mdct_fx( /* -1 => weighting with 0.5, -s => consider scalefactor adaptation for sqrt calculation */ sq = sub( -1, s ); - sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *cngNoiseLevel, scale ), &sq ); - maskingNoise[0] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); + sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *cngNoiseLevel, scale ), &sq ); /*Q31 - sq*/ + maskingNoise[0] = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); /*Q15*/ move32(); - pMaskingNoise = &maskingNoise[1]; + pMaskingNoise = &maskingNoise[1]; /*Q15*/ cngNoiseLevel++; cnt = sub( cnt, 1 ); @@ -4981,19 +4981,19 @@ void generate_masking_noise_mdct_fx( ELSE { set32_fx( maskingNoise, 0, hFdCngCom->startBand ); - pMaskingNoise = maskingNoise + hFdCngCom->startBand; + pMaskingNoise = maskingNoise + hFdCngCom->startBand; /*Q15*/ } FOR( i = 0; i < cnt; i++ ) { /* -1 => weighting with 0.5, -s => consider scalefactor adaptation for sqrt calculation */ sq = sub( -1, s ); - sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *cngNoiseLevel, scale ), &sq ); + sqrtNoiseLevel = Sqrt32( Mpy_32_16_1( *cngNoiseLevel, scale ), &sq ); /*Q31 - sq*/ /* real part in FFT bins */ /* random noise is scaled by CNG_RAND_GAUSS_SHIFT bits */ - *pMaskingNoise = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); + *pMaskingNoise = L_shl( Mpy_32_32( rand_gauss( seed ), sqrtNoiseLevel ), sq ); /*Q15*/ move32(); pMaskingNoise++; @@ -5022,14 +5022,14 @@ void generate_masking_noise_mdct_fx( { /* If shifting negative noise values the lowest result is -1 but never 0. Shift positive noise values to avoid unwanted amplification of these small values later */ - noise = L_shr( Mpy_32_16_1( L_abs( maskingNoise[i] ), 25905 /*0.79056941504 Q15*/ ), s2 ); + noise = L_shr( Mpy_32_16_1( L_abs( maskingNoise[i] ), 25905 /*0.79056941504 Q15*/ ), s2 ); /*Q31 - maskingNoiseExp - s2*/ if ( maskingNoise[i] < 0 ) { noise = L_negate( noise ); } - mdctBuffer[i] = L_add( mdctBuffer[i], noise ); + mdctBuffer[i] = L_add( mdctBuffer[i], noise ); /*Q31 - s*/ move32(); } } @@ -5038,12 +5038,12 @@ void generate_masking_noise_mdct_fx( FOR( i = 0; i < hFdCngCom->stopFFTbin; i++ ) { mdctBuffer[i] = L_add( L_shr( mdctBuffer[i], s1 ), - Mpy_32_16_1( maskingNoise[i], 25905 /*0.79056941504 Q15*/ ) ); + Mpy_32_16_1( maskingNoise[i], 25905 /*0.79056941504 Q15*/ ) ); /*Q31 - s*/ move32(); } FOR( i = hFdCngCom->stopFFTbin; i < L_frame; i++ ) { - mdctBuffer[i] = L_shr( mdctBuffer[i], s1 ); + mdctBuffer[i] = L_shr( mdctBuffer[i], s1 ); /*Q31 - s*/ move32(); } *mdctBuffer_e = s; @@ -5053,7 +5053,7 @@ void generate_masking_noise_mdct_fx( } void generate_masking_noise_mdct_ivas_fx( - Word32 *mdctBuffer, /* i/o: time-domain signal */ + Word32 *mdctBuffer, /* i/o: time-domain signal Q31 - mdctBuffer_e*/ Word16 *mdctBuffer_e, /* i/o: exponent time-domain signal */ HANDLE_FD_CNG_COM hFdCngCom /* i/o: FD_CNG structure containing all buffers and variables */ ) { @@ -5068,7 +5068,7 @@ void generate_masking_noise_mdct_ivas_fx( // PMTE(); /*IVAS CODE need to be added */ /* pointer initializations */ - cngNoiseLevel = hFdCngCom->cngNoiseLevel; + cngNoiseLevel = hFdCngCom->cngNoiseLevel; /*Q31 - hFdCngCom->cngNoiseLevelExp*/ seed = &( hFdCngCom->seed ); /* Compute additional CN level */ @@ -5109,21 +5109,21 @@ void generate_masking_noise_mdct_ivas_fx( sq = cngNoiseLevelExp; move16(); - sqrtNoiseLevel = Sqrt32( temp, &sq ); + sqrtNoiseLevel = Sqrt32( temp, &sq ); /*Q31 - sq*/ rand_gauss_fx( &temp, seed, Q15 ); // Q15 maskingNoise[0] = L_shl( Mpy_32_32( temp, sqrtNoiseLevel ), sq ); // Q15 move32(); - pMaskingNoise = &maskingNoise[1]; + pMaskingNoise = &maskingNoise[1]; /*Q15*/ cngNoiseLevel++; cnt = sub( cnt, 1 ); } ELSE { set32_fx( maskingNoise, 0, hFdCngCom->startBand ); - pMaskingNoise = maskingNoise + hFdCngCom->startBand; + pMaskingNoise = maskingNoise + hFdCngCom->startBand; /*Q15*/ } FOR( i = 0; i < cnt; i++ ) @@ -5134,7 +5134,7 @@ void generate_masking_noise_mdct_ivas_fx( sq = cngNoiseLevelExp; move16(); - sqrtNoiseLevel = Sqrt32( temp, &sq ); + sqrtNoiseLevel = Sqrt32( temp, &sq ); /*Q31 - sq*/ rand_gauss_fx( &temp, seed, Q15 ); // Q15 -- GitLab