Loading lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -152,6 +152,7 @@ /* NTT switches */ #define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix*/ #define BOOL5 /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading lib_enc/ivas_stereo_dmx_evs.c +165 −2 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ static void calc_poc( float aR, aI; /*real and imaginary values for searching phase angle*/ int16_t j; int16_t index_angles, mult_angle; int16_t mult_angle; bool diffIR; const float *cos_reverse; Loading @@ -169,6 +169,13 @@ static void calc_poc( float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; float rfft_buf[L_FRAME48k]; int16_t step, bias; #ifdef BOOL5 bool diffIR0; /*angle */ float up_down; int16_t index_angles; #else int16_t index_angles; #endif #else float specPOr[L_FRAME48k], specPOi[L_FRAME48k]; float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; Loading Loading @@ -305,6 +312,159 @@ static void calc_poc( specPOr[i] = sign( specPOr[i] ) * tmp1; specPOi[i] = sign( specPOi[i] ) * tmp1; /* low accuracy is adequate for low frequency */ } #ifdef BOOL5 for ( i = n0 >> 4; i<n0>> 3; i++ ) /* binary search from 8 angles */ { aR = specPOr[i]; aR *= aR; aI = specPOi[i]; aI *= aI; diffIR = aR > aI; /* index_angles = 120 - (int16_t) diffIR * 80;*/ tmp1 = wnd[i * step + bias] * gamma; gamma -= igamma; specPOr[i] = sign( specPOr[i] ) * cos_reverse[-( 120 - (int16_t) diffIR * 80 ) * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; specPOi[i] = sign( specPOi[i] ) * s[( 120 - (int16_t) diffIR * 80 ) * mult_angle] * tmp1; } for ( i = n0 >> 3; i<n0>> 2; i++ ) /* binary search from 16 angles */ { aR = specPOr[i]; aR *= aR; aI = specPOi[i]; aI *= aI; diffIR0 = aR > aI; /*index_angles = 140 - (int16_t) diffIR0*80; */ up_down = ( /* 1.0f - 0.1715724f */ 0.82842759f ) * (float) diffIR0; diffIR = aR * ( 1.0f - up_down ) > aI * ( up_down + 0.1715724f ); /* equivalent if{} else{}*/ /* if ( aR > aI ) { if (aR * tanf(PI/8)* tanf(PI/8)> aI){ index_angles = 60 - (int16_t) diffIR * 40; } else{......} } */ tmp1 = wnd[i * step + bias] * gamma; gamma -= igamma; specPOr[i] = sign( specPOr[i] ) /*((float)(aR>0)*2.f- 1.0f)*/ * cos_reverse[-( 140 - (int16_t) diffIR0 * 80 - (int16_t) diffIR * 40 ) * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; specPOi[i] = sign( specPOi[i] ) /*( (float) ( aI > 0 ) * 2.f - 1.0f )*/ * s[( 140 - (int16_t) diffIR0 * 80 - (int16_t) diffIR * 40 ) * mult_angle] * tmp1; } for ( i = n0 >> 2; i</*min( n0, 320 )*/ n0>> 1; i++ ) /* binary search from 32 angles */ { aR = specPOr[i]; aR *= aR; aI = specPOi[i]; aI *= aI; if ( aR > aI ) { if ( aR * 0.1715724f /* tanf(PI/8)**2 = 0.414213f**2 */ > aI ) { diffIR = aR * 0.039565188f /* tanf(PI/16)**2 */ > aI; index_angles = 30; } else { diffIR = aR * 0.446463176f /* tanf(PI*3/16)**2 */ > aI; index_angles = 70; } } else { if ( aR > aI * 0.1715724f /* tanf(PI/8)**2 */ ) { diffIR = aR > aI * 0.446463176f /* tanf(PI*3/16)**2 */; index_angles = 110; } else { diffIR = aR > aI * 0.039565188f /* tanf(PI/16)**2 */; index_angles = 150; } } { tmp1 = wnd[i * step + bias] * gamma; gamma -= igamma; specPOr[i] = sign( specPOr[i] ) * cos_reverse[-( index_angles - (int16_t) diffIR * 20 ) * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; specPOi[i] = sign( specPOi[i] ) * s[( index_angles - (int16_t) diffIR * 20 ) * mult_angle] * tmp1; } } for ( ; i < min( n0, 320 ); i++ ) /* binary search from 64 angles */ { aR = specPOr[i]; aR *= aR; aI = specPOi[i]; aI *= aI; if ( aR > aI ) { if ( aR * 0.1715724f /* tanf(PI/8)**2 */ > aI ) { if ( aR * 0.039565188f /* tanf(PI/16)**2 */ > aI ) { diffIR = aR * 0.00970f /*0.098491f * 0.098491f*/ /*tanf(PI/32)*/ > aI; index_angles = 15; } else { diffIR = aR * 0.09201922 /* tanf(PI*3/32)**2 */ > aI; index_angles = 35; } } else { if ( aR * 0.446463176f /* tanf(PI*3/16)**2 */ > aI ) { diffIR = aR * 0.285702f /*0.5345111f*0.5345111f*/ /* tanf(PI*5/32)**2 */ > aI; index_angles = 55; } else { diffIR = aR * 0.6735137f /*0.8206788f*0.8206788f */ /* tanf(PI*7/32)**2 */ > aI; index_angles = 75; } } } else { if ( aR > aI * 0.1715724f /* tanf(PI/8)**2 */ ) { if ( aR > aI * 0.446463176f /* tanf(PI*3/16)**2 */ ) { diffIR = aR > aI * 0.6735137f /*0.8206788f*0.8206788f */ /* tanf(PI*7/32)**2 */; index_angles = 95; } else { diffIR = aR > aI * 0.285702f /*0.5345111f*0.5345111f*/ /*tanf(PI*5/32)*/; index_angles = 115; } } else { if ( aR > aI * 0.039565188f /* tanf(PI/16)**2 */ ) // { diffIR = aR > aI * 0.09201922 /*0.3033467f*0.3033467f*/ /* tanf(PI*3/32)**2 */; index_angles = 135; } else { diffIR = aR > aI * 0.00970f /*0.098491f * 0.098491f*/ /* tanf(PI/32)**2 */; index_angles = 155; } } } { tmp1 = wnd[i * step + bias] * gamma; gamma -= igamma; specPOr[i] = sign( specPOr[i] ) * cos_reverse[-( index_angles - (int16_t) diffIR * 10 ) * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; specPOi[i] = sign( specPOi[i] ) * s[( index_angles - (int16_t) diffIR * 10 ) * mult_angle] * tmp1; } } #else /*BOOL5*/ for ( i = n0 >> 4; i<n0>> 3; i++ ) /* binary search from 8 angles */ { aR = fabsf( specPOr[i] ); Loading Loading @@ -450,6 +610,8 @@ static void calc_poc( specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; } } #endif /*BOOL5*/ if ( i < n0 ) { gamma -= igamma * ( n0 - 320 ); Loading @@ -460,7 +622,8 @@ static void calc_poc( specPOi[i] = 0.f; } specPOr[n0] = sign( specLr[n0] ) * sign( specRr[n0] ) * wnd[i * step + bias] * gamma; #else #else /*end NTT_REDUC_COMP*/ if ( input_frame == L_FRAME16k ) { step = 3; Loading Loading
lib_com/options.h +1 −0 Original line number Diff line number Diff line Loading @@ -152,6 +152,7 @@ /* NTT switches */ #define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix*/ #define BOOL5 /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading
lib_enc/ivas_stereo_dmx_evs.c +165 −2 Original line number Diff line number Diff line Loading @@ -161,7 +161,7 @@ static void calc_poc( float aR, aI; /*real and imaginary values for searching phase angle*/ int16_t j; int16_t index_angles, mult_angle; int16_t mult_angle; bool diffIR; const float *cos_reverse; Loading @@ -169,6 +169,13 @@ static void calc_poc( float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; float rfft_buf[L_FRAME48k]; int16_t step, bias; #ifdef BOOL5 bool diffIR0; /*angle */ float up_down; int16_t index_angles; #else int16_t index_angles; #endif #else float specPOr[L_FRAME48k], specPOi[L_FRAME48k]; float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; Loading Loading @@ -305,6 +312,159 @@ static void calc_poc( specPOr[i] = sign( specPOr[i] ) * tmp1; specPOi[i] = sign( specPOi[i] ) * tmp1; /* low accuracy is adequate for low frequency */ } #ifdef BOOL5 for ( i = n0 >> 4; i<n0>> 3; i++ ) /* binary search from 8 angles */ { aR = specPOr[i]; aR *= aR; aI = specPOi[i]; aI *= aI; diffIR = aR > aI; /* index_angles = 120 - (int16_t) diffIR * 80;*/ tmp1 = wnd[i * step + bias] * gamma; gamma -= igamma; specPOr[i] = sign( specPOr[i] ) * cos_reverse[-( 120 - (int16_t) diffIR * 80 ) * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; specPOi[i] = sign( specPOi[i] ) * s[( 120 - (int16_t) diffIR * 80 ) * mult_angle] * tmp1; } for ( i = n0 >> 3; i<n0>> 2; i++ ) /* binary search from 16 angles */ { aR = specPOr[i]; aR *= aR; aI = specPOi[i]; aI *= aI; diffIR0 = aR > aI; /*index_angles = 140 - (int16_t) diffIR0*80; */ up_down = ( /* 1.0f - 0.1715724f */ 0.82842759f ) * (float) diffIR0; diffIR = aR * ( 1.0f - up_down ) > aI * ( up_down + 0.1715724f ); /* equivalent if{} else{}*/ /* if ( aR > aI ) { if (aR * tanf(PI/8)* tanf(PI/8)> aI){ index_angles = 60 - (int16_t) diffIR * 40; } else{......} } */ tmp1 = wnd[i * step + bias] * gamma; gamma -= igamma; specPOr[i] = sign( specPOr[i] ) /*((float)(aR>0)*2.f- 1.0f)*/ * cos_reverse[-( 140 - (int16_t) diffIR0 * 80 - (int16_t) diffIR * 40 ) * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; specPOi[i] = sign( specPOi[i] ) /*( (float) ( aI > 0 ) * 2.f - 1.0f )*/ * s[( 140 - (int16_t) diffIR0 * 80 - (int16_t) diffIR * 40 ) * mult_angle] * tmp1; } for ( i = n0 >> 2; i</*min( n0, 320 )*/ n0>> 1; i++ ) /* binary search from 32 angles */ { aR = specPOr[i]; aR *= aR; aI = specPOi[i]; aI *= aI; if ( aR > aI ) { if ( aR * 0.1715724f /* tanf(PI/8)**2 = 0.414213f**2 */ > aI ) { diffIR = aR * 0.039565188f /* tanf(PI/16)**2 */ > aI; index_angles = 30; } else { diffIR = aR * 0.446463176f /* tanf(PI*3/16)**2 */ > aI; index_angles = 70; } } else { if ( aR > aI * 0.1715724f /* tanf(PI/8)**2 */ ) { diffIR = aR > aI * 0.446463176f /* tanf(PI*3/16)**2 */; index_angles = 110; } else { diffIR = aR > aI * 0.039565188f /* tanf(PI/16)**2 */; index_angles = 150; } } { tmp1 = wnd[i * step + bias] * gamma; gamma -= igamma; specPOr[i] = sign( specPOr[i] ) * cos_reverse[-( index_angles - (int16_t) diffIR * 20 ) * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; specPOi[i] = sign( specPOi[i] ) * s[( index_angles - (int16_t) diffIR * 20 ) * mult_angle] * tmp1; } } for ( ; i < min( n0, 320 ); i++ ) /* binary search from 64 angles */ { aR = specPOr[i]; aR *= aR; aI = specPOi[i]; aI *= aI; if ( aR > aI ) { if ( aR * 0.1715724f /* tanf(PI/8)**2 */ > aI ) { if ( aR * 0.039565188f /* tanf(PI/16)**2 */ > aI ) { diffIR = aR * 0.00970f /*0.098491f * 0.098491f*/ /*tanf(PI/32)*/ > aI; index_angles = 15; } else { diffIR = aR * 0.09201922 /* tanf(PI*3/32)**2 */ > aI; index_angles = 35; } } else { if ( aR * 0.446463176f /* tanf(PI*3/16)**2 */ > aI ) { diffIR = aR * 0.285702f /*0.5345111f*0.5345111f*/ /* tanf(PI*5/32)**2 */ > aI; index_angles = 55; } else { diffIR = aR * 0.6735137f /*0.8206788f*0.8206788f */ /* tanf(PI*7/32)**2 */ > aI; index_angles = 75; } } } else { if ( aR > aI * 0.1715724f /* tanf(PI/8)**2 */ ) { if ( aR > aI * 0.446463176f /* tanf(PI*3/16)**2 */ ) { diffIR = aR > aI * 0.6735137f /*0.8206788f*0.8206788f */ /* tanf(PI*7/32)**2 */; index_angles = 95; } else { diffIR = aR > aI * 0.285702f /*0.5345111f*0.5345111f*/ /*tanf(PI*5/32)*/; index_angles = 115; } } else { if ( aR > aI * 0.039565188f /* tanf(PI/16)**2 */ ) // { diffIR = aR > aI * 0.09201922 /*0.3033467f*0.3033467f*/ /* tanf(PI*3/32)**2 */; index_angles = 135; } else { diffIR = aR > aI * 0.00970f /*0.098491f * 0.098491f*/ /* tanf(PI/32)**2 */; index_angles = 155; } } } { tmp1 = wnd[i * step + bias] * gamma; gamma -= igamma; specPOr[i] = sign( specPOr[i] ) * cos_reverse[-( index_angles - (int16_t) diffIR * 10 ) * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; specPOi[i] = sign( specPOi[i] ) * s[( index_angles - (int16_t) diffIR * 10 ) * mult_angle] * tmp1; } } #else /*BOOL5*/ for ( i = n0 >> 4; i<n0>> 3; i++ ) /* binary search from 8 angles */ { aR = fabsf( specPOr[i] ); Loading Loading @@ -450,6 +610,8 @@ static void calc_poc( specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; } } #endif /*BOOL5*/ if ( i < n0 ) { gamma -= igamma * ( n0 - 320 ); Loading @@ -460,7 +622,8 @@ static void calc_poc( specPOi[i] = 0.f; } specPOr[n0] = sign( specLr[n0] ) * sign( specRr[n0] ) * wnd[i * step + bias] * gamma; #else #else /*end NTT_REDUC_COMP*/ if ( input_frame == L_FRAME16k ) { step = 3; Loading