From 9786a7a727b9c05460680d394e0f4fee3a80291a Mon Sep 17 00:00:00 2001 From: Hiromi Sekine Date: Thu, 8 Sep 2022 18:08:39 +0900 Subject: [PATCH 1/6] Reduction of complexity for phase only correlation in stereo downmix for EVS. --- lib_com/options.h | 4 + lib_enc/ivas_stereo_dmx_evs.c | 325 +++++++++++++++++++++++++++++++++- 2 files changed, 328 insertions(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 9a564035bf..9938929f9b 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -151,6 +151,10 @@ #define FIX_I2_BWD /* Issue 2: BWD fix to more quickly react to WB -> SWB/FB change */ + +/* NTT switches */ +#define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix */ + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index a6773bc64c..4164845dbf 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -155,7 +155,15 @@ static void calc_poc( const float *s; float *P; float tmp1, tmp2, Lr, Li, Rr, Ri, gamma, igamma, iN; + +#ifdef NTT_REDUC_COMP_POC + float specPOr[L_FRAME48k / 2 + 1], specPOi[L_FRAME48k / 2]; /*real and imaginary part of spectrum*/ + float aR, aI; /*real and imaginary values for searching phase angle*/ + int16_t j; +#else float specPOr[L_FRAME48k], specPOi[L_FRAME48k]; +#endif + float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; float rfft_buf[L_FRAME48k]; int16_t step, bias; @@ -194,12 +202,326 @@ static void calc_poc( cos_step = 4; cos_max = input_frame; } - else /* for 32 kHz & 48 kHz */ + else /* for 32 kHz & 48 kHz*/ { cos_step = 2; cos_max = n0; } +#ifdef NTT_REDUC_COMP_POC + /*apploximation of phase angle on an unit circle without using sqrt()*/ + for ( i = 1; i < n0 / 2; i++ ) + { + Lr = specLr[i]; + Li = specLi[i]; + Rr = specRr[i]; + Ri = specRi[i]; + + i_for = i * cos_step; + eps_cos = s[cos_max - i_for] * EPS; + eps_sin = s[i_for] * EPS; + Lr += ( specRr[i] * eps_cos + specRi[i] * eps_sin ); + Li += ( -specRr[i] * eps_sin + specRi[i] * eps_cos ); + Rr += ( specLr[i] * eps_cos + specLi[i] * eps_sin ); + Ri += ( -specLr[i] * eps_sin + specLi[i] * eps_cos ); + + specPOr[i] = ( Lr * Rr + Li * Ri ); + specPOi[i] = ( Lr * Ri - Li * Rr ); + + j = n0 - i; + Lr = specLr[j]; + Li = specLi[j]; + Rr = specRr[j]; + Ri = specRi[j]; + Lr += ( -specRr[j] * eps_cos + specRi[j] * eps_sin ); + Li += ( -specRr[j] * eps_sin - specRi[j] * eps_cos ); + Rr += ( -specLr[j] * eps_cos + specLi[j] * eps_sin ); + Ri += ( -specLr[j] * eps_sin - specLi[j] * eps_cos ); + + specPOr[j] = ( Lr * Rr + Li * Ri ); + specPOi[j] = ( Lr * Ri - Li * Rr ); + } + { + i = n0 / 2; + Lr = specLr[i] + specRi[i] * EPS; + Li = specLi[i] - specRr[i] * EPS; + Rr = specRr[i] + specLi[i] * EPS; + Ri = specRi[i] - specLr[i] * EPS; + + specPOr[i] = ( Lr * Rr + Li * Ri ); + specPOi[i] = ( Lr * Ri - Li * Rr ); + } + /* complex spectrum (specPOr[i], specPOi[i]) are placed on an unit circle without using srqt()*/ + for ( i = 1; i < 10; i++ ) /*search from 4 angles */ + { + specPOr[i] = sign( specPOr[i] ) * 0.866f; /* low angles are more frequent for low frequency */ + specPOi[i] = sign( specPOi[i] ) * 0.5f; + } + for ( i = 10; i> 4; i++ ) /*search from 4 angles */ + { + specPOr[i] = sign( specPOr[i] ) * 0.7071f; /* low accuracy is adequate for low frequency */ + specPOi[i] = sign( specPOi[i] ) * 0.7071f; + } + for ( i = n0 >> 4; i> 3; i++ ) /* binary search from 8 angles */ + { + aR = fabsf( specPOr[i] ); + aI = fabsf( specPOi[i] ); + if ( aR > aI ) + { + specPOr[i] = sign( specPOr[i] ) * 0.92388f; /* (wnd[n0>>2]+wnd[(n0>>2)-1])*0.5f) */ + specPOi[i] = sign( specPOi[i] ) * 0.382683f; /* (wnd[n0>>2]+wnd[(n0>>2)-1])*0.5f) */ + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.382683f; /* (wnd[n0>>2]+wnd[(n0>>2)-1])*0.5f) */ + specPOi[i] = sign( specPOi[i] ) * 0.92388f; /* (wnd[(n0>>2)*3]+wnd[((n0>>2)*3)-1])*0.5f) */ + } + } + for ( i = n0 >> 3; i> 2; i++ ) /* binary search from 16 angles */ + { + aR = fabsf( specPOr[i] ); + aI = fabsf( specPOi[i] ); + if ( aR > aI ) + { + if ( aR * 0.414213f /*tanf(PI/8)*/ > aI ) + { + specPOr[i] = sign( specPOr[i] ) * 0.980785f; /* (wnd[(n0>>3)*7]+wnd[((n0>>3)*7)-1])*0.5f */ + specPOi[i] = sign( specPOi[i] ) * 0.19509f; /* (wnd[n0>>3]+wnd[(n0>>3)-1])*0.5f) */ + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.83147f; /* (wnd[(n0>>3)*5]+wnd[((n0>>3)*5)-1])*0.5f */ + specPOi[i] = sign( specPOi[i] ) * 0.55557f; /* (wnd[(n0>>3)*3]+wnd[(n0>>3)*3-1])*0.5f */ + } + } + else + { + if ( aR > aI * 0.41421356f /*tanf(PI/8)*/ ) + { + specPOr[i] = sign( specPOr[i] ) * 0.55557f; + specPOi[i] = sign( specPOi[i] ) * 0.83147f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.19509f; + specPOi[i] = sign( specPOi[i] ) * 0.980785f; + } + } + } + + for ( i = n0 >> 2; i> 1; i++ ) /* binary search from 32 angles */ + { + aR = fabsf( specPOr[i] ); + aI = fabsf( specPOi[i] ); + + if ( aR > aI ) + { + if ( aR * 0.4142136f /*tanf(PI/8)*/ > aI ) + { + if ( aR * 0.19891f /*tanf(PI/16)*/ > aI ) + { + specPOr[i] = sign( specPOr[i] ) * 0.995185f; + specPOi[i] = sign( specPOi[i] ) * 0.098017f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.95694f; + specPOi[i] = sign( specPOi[i] ) * 0.290285f; + } + } + else + { + if ( aR * 0.66818f /*tanf(PI*3/16)*/ > aI ) + { + specPOr[i] = sign( specPOr[i] ) * 0.881921f; + specPOi[i] = sign( specPOi[i] ) * 0.471397f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.77301f; + specPOi[i] = sign( specPOi[i] ) * 0.634393f; + } + } + } + else + { + if ( aR > aI * 0.4142136f /*tanf(PI/8)*/ ) + { + if ( aR > aI * 0.668179f /*tanf(PI*3/16)*/ ) + { + specPOr[i] = sign( specPOr[i] ) * 0.634393f; + specPOi[i] = sign( specPOi[i] ) * 0.77301f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.471397f; + specPOi[i] = sign( specPOi[i] ) * 0.881921f; + } + } + else + { + if ( aR > aI * 0.198912f /*tanf(PI/16)*/ ) + { + specPOr[i] = sign( specPOr[i] ) * 0.290285f; + specPOi[i] = sign( specPOi[i] ) * 0.95694f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.098017f; + specPOi[i] = sign( specPOi[i] ) * 0.995158f; + } + } + } + } + + for ( i = n0 >> 1; i < min( n0, 320 ); i++ ) /* binary search from 64 angles */ + { + aR = fabsf( specPOr[i] ); + aI = fabsf( specPOi[i] ); + + if ( aR > aI ) + { + if ( aR * 0.414213f /*tanf(PI/8)*/ > aI ) + { + if ( aR * 0.19891f /*tanf(PI/16)*/ > aI ) + { + if ( aR * 0.0984914f /*tanf(PI/32)*/ > aI ) + { + specPOr[i] = sign( specPOr[i] ) * 0.99879f; + specPOi[i] = sign( specPOi[i] ) * 0.04907f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.98918f; + specPOi[i] = sign( specPOi[i] ) * 0.14763f; + } + } + else + { + if ( aR * 0.303347f /*tanf(PI*3/32)*/ > aI ) + { + specPOr[i] = sign( specPOr[i] ) * 0.970031f; + specPOi[i] = sign( specPOi[i] ) * 0.24298f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.941544f; + specPOi[i] = sign( specPOi[i] ) * 0.33689f; + } + } + } + else + { + if ( aR * 0.66818f /*tanf(PI*3/16)*/ > aI ) + { + if ( aR * 0.534511f /*tanf(PI*5/32)*/ > aI ) + { + specPOr[i] = sign( specPOr[i] ) * 0.903989f; + specPOi[i] = sign( specPOi[i] ) * 0.427555f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.857729f; + specPOi[i] = sign( specPOi[i] ) * 0.514103f; + } + } + else + { + if ( aR * 0.8206788f /*tanf(PI*7/32)*/ > aI ) + { + specPOr[i] = sign( specPOr[i] ) * 0.803208f; + specPOi[i] = sign( specPOi[i] ) * 0.595699f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.740951f; + specPOi[i] = sign( specPOi[i] ) * 0.671559f; + } + } + } + } + else + { + if ( aR > aI * 0.4142136f /*tanf(PI/8)*/ ) + { + if ( aR > aI * 0.6681767f /*tanf(PI*3/16)*/ ) + { + if ( aR > aI * 0.820681f /*tanf(PI*7/32)*/ ) + { + specPOr[i] = sign( specPOr[i] ) * 0.671559f; + specPOi[i] = sign( specPOi[i] ) * 0.740951f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.595699f; + specPOi[i] = sign( specPOi[i] ) * 0.803208f; + } + } + else + { + if ( aR > aI * 0.5345111f /*tanf(PI*5/32)*/ ) + { + specPOr[i] = sign( specPOr[i] ) * 0.514103f; + specPOi[i] = sign( specPOi[i] ) * 0.857729f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.427555f; + specPOi[i] = sign( specPOi[i] ) * 0.903989f; + } + } + } + else + { + if ( aR > aI * 0.1989124f /*tanf(PI/16)*/ ) + { + if ( aR > aI * 0.3033467f /*tanf(PI*3/32)*/ ) + { + specPOr[i] = sign( specPOr[i] ) * 0.33689f; + specPOi[i] = sign( specPOi[i] ) * 0.941544f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.24298f; + specPOi[i] = sign( specPOi[i] ) * 0.970031f; + } + } + else + { + if ( aR > aI * 0.098491f /*tanf(PI/32)*/ ) + { + specPOr[i] = sign( specPOr[i] ) * 0.14673f; + specPOi[i] = sign( specPOi[i] ) * 0.989177f; + } + else + { + specPOr[i] = sign( specPOr[i] ) * 0.049068f; + specPOi[i] = sign( specPOi[i] ) * 0.998795f; + } + } + } + } + } + for ( i = 1; i < min( n0, 320 ); i++ ) /*neglect highest frequency bins when 48 kHz samplng*/ + { + tmp1 = wnd[i * step + bias] * gamma; + specPOr[i] *= tmp1; + specPOi[i] *= tmp1; + gamma -= igamma; + } + if ( i < n0 ) + { + gamma -= igamma * ( n0 - 320 ); + } + for ( /* i = min(n0, 320) */; i < n0; i++ ) /*neglect higher frequency bins when 48 kHz samplng*/ + { + specPOr[i] = 0.f; + specPOi[i] = 0.f; + } + specPOr[n0] = sign( specLr[n0] ) * sign( specRr[n0] ) * wnd[i * step + bias] * gamma; + +#else + for ( i = 1; i < n0 / 2; i++ ) { Lr = specLr[i]; @@ -245,6 +567,7 @@ static void calc_poc( } specPOr[n0] = sign( specLr[i] ) * sign( specRr[i] ) * wnd[i * step + bias] * gamma; +#endif rfft_buf[0] = specPOr[0]; rfft_buf[1] = specPOr[n0]; -- GitLab From 1f59b3289d09f2a1fe8e9f12848c1f21d106978a Mon Sep 17 00:00:00 2001 From: Hiromi Sekine Date: Mon, 26 Sep 2022 14:05:26 +0900 Subject: [PATCH 2/6] Additional reduction of WMOPS for NTT_REDUC_COMP_POC. --- lib_com/options.h | 4 +- lib_enc/ivas_stereo_dmx_evs.c | 387 ++++++++++++++++------------------ 2 files changed, 177 insertions(+), 214 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 9938929f9b..edcd2846aa 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -150,10 +150,8 @@ #define SPAR_SCALING_HARMONIZATION /* Issue 80: Changes to harmonize scaling in spar */ #define FIX_I2_BWD /* Issue 2: BWD fix to more quickly react to WB -> SWB/FB change */ - - /* NTT switches */ -#define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix */ +#define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix*/ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index 4164845dbf..4a09062bc2 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -160,14 +160,23 @@ static void calc_poc( float specPOr[L_FRAME48k / 2 + 1], specPOi[L_FRAME48k / 2]; /*real and imaginary part of spectrum*/ float aR, aI; /*real and imaginary values for searching phase angle*/ int16_t j; + + int16_t index_angles, mult_angle; + + bool diffIR; + const float *cos_reverse; + + float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; + float rfft_buf[L_FRAME48k]; + int16_t step, bias; #else float specPOr[L_FRAME48k], specPOi[L_FRAME48k]; -#endif - float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; float rfft_buf[L_FRAME48k]; int16_t step, bias; int16_t i_for; +#endif + int16_t cos_step, cos_max; float eps_cos, eps_sin, EPS; @@ -181,131 +190,155 @@ static void calc_poc( igamma = STEREO_DMX_EVS_POC_GAMMA * iN; gamma = 1.0f - igamma; +#ifdef NTT_REDUC_COMP_POC /*apploximation of phase angle on an unit circle without using sqrt()*/ if ( input_frame == L_FRAME16k ) { step = 3; bias = 1; + cos_step = 4; + cos_max = input_frame; + mult_angle = 1; } else { step = 1; bias = 0; + cos_step = 2; + cos_max = n0; + mult_angle = 2; + if ( input_frame == L_FRAME48k ) + mult_angle = 3; } + cos_reverse = s + cos_max; specPOr[0] = sign( specLr[0] ) * sign( specRr[0] ) * wnd[bias]; specPOi[0] = 0.0f; - EPS = hPOC->eps; - - if ( input_frame == L_FRAME16k ) + if ( input_frame == L_FRAME48k ) { - cos_step = 4; - cos_max = input_frame; - } - else /* for 32 kHz & 48 kHz*/ - { - cos_step = 2; - cos_max = n0; + for ( i = 1; i < n0 / 2; i++ ) + { + Lr = specLr[i]; + Li = specLi[i]; + Rr = specRr[i]; + Ri = specRi[i]; + + eps_cos = s[cos_max - i * cos_step /*cos_max - i_for*/] * EPS; + eps_sin = s[i * cos_step /*i_for*/] * EPS; + Lr += ( Rr * eps_cos + Ri * eps_sin ); + Li += ( -Rr * eps_sin + Ri * eps_cos ); + Rr += ( specLr[i] * eps_cos + specLi[i] * eps_sin ); + Ri += ( -specLr[i] * eps_sin + specLi[i] * eps_cos ); + + specPOr[i] = ( Lr * Rr + Li * Ri ); + specPOi[i] = ( Lr * Ri - Li * Rr ); + j = n0 - i; + if ( j < 320 ) + { + Lr = specLr[j]; + Li = specLi[j]; + Rr = specRr[j]; + Ri = specRi[j]; + Lr += ( -Rr * eps_cos + Ri * eps_sin ); + Li += ( -Rr * eps_sin - Ri * eps_cos ); + Rr += ( -specLr[j] * eps_cos + specLi[j] * eps_sin ); + Ri += ( -specLr[j] * eps_sin - specLi[j] * eps_cos ); + + specPOr[j] = ( Lr * Rr + Li * Ri ); + specPOi[j] = ( Lr * Ri - Li * Rr ); + } + } } - -#ifdef NTT_REDUC_COMP_POC - /*apploximation of phase angle on an unit circle without using sqrt()*/ - for ( i = 1; i < n0 / 2; i++ ) + else /* 16kHz and 32 kHz*/ { - Lr = specLr[i]; - Li = specLi[i]; - Rr = specRr[i]; - Ri = specRi[i]; - - i_for = i * cos_step; - eps_cos = s[cos_max - i_for] * EPS; - eps_sin = s[i_for] * EPS; - Lr += ( specRr[i] * eps_cos + specRi[i] * eps_sin ); - Li += ( -specRr[i] * eps_sin + specRi[i] * eps_cos ); - Rr += ( specLr[i] * eps_cos + specLi[i] * eps_sin ); - Ri += ( -specLr[i] * eps_sin + specLi[i] * eps_cos ); - - specPOr[i] = ( Lr * Rr + Li * Ri ); - specPOi[i] = ( Lr * Ri - Li * Rr ); - - j = n0 - i; - Lr = specLr[j]; - Li = specLi[j]; - Rr = specRr[j]; - Ri = specRi[j]; - Lr += ( -specRr[j] * eps_cos + specRi[j] * eps_sin ); - Li += ( -specRr[j] * eps_sin - specRi[j] * eps_cos ); - Rr += ( -specLr[j] * eps_cos + specLi[j] * eps_sin ); - Ri += ( -specLr[j] * eps_sin - specLi[j] * eps_cos ); - - specPOr[j] = ( Lr * Rr + Li * Ri ); - specPOi[j] = ( Lr * Ri - Li * Rr ); + for ( i = 1; i < n0 / 2; i++ ) + { + Lr = specLr[i]; + Li = specLi[i]; + Rr = specRr[i]; + Ri = specRi[i]; + eps_cos = s[cos_max - i * cos_step /*cos_max - i_for*/] * EPS; + eps_sin = s[i * cos_step /*i_for*/] * EPS; + Lr += ( Rr * eps_cos + Ri * eps_sin ); + Li += ( -Rr * eps_sin + Ri * eps_cos ); + Rr += ( specLr[i] * eps_cos + specLi[i] * eps_sin ); + Ri += ( -specLr[i] * eps_sin + specLi[i] * eps_cos ); + specPOr[i] = ( Lr * Rr + Li * Ri ); + specPOi[i] = ( Lr * Ri - Li * Rr ); + + j = n0 - i; + Lr = specLr[j]; + Li = specLi[j]; + Rr = specRr[j]; + Ri = specRi[j]; + Lr += ( -Rr * eps_cos + Ri * eps_sin ); + Li += ( -Rr * eps_sin - Ri * eps_cos ); + Rr += ( -specLr[j] * eps_cos + specLi[j] * eps_sin ); + Ri += ( -specLr[j] * eps_sin - specLi[j] * eps_cos ); + specPOr[j] = ( Lr * Rr + Li * Ri ); + specPOi[j] = ( Lr * Ri - Li * Rr ); + } } { - i = n0 / 2; + /* i=n0/2*/ Lr = specLr[i] + specRi[i] * EPS; Li = specLi[i] - specRr[i] * EPS; Rr = specRr[i] + specLi[i] * EPS; Ri = specRi[i] - specLr[i] * EPS; - specPOr[i] = ( Lr * Rr + Li * Ri ); specPOi[i] = ( Lr * Ri - Li * Rr ); } /* complex spectrum (specPOr[i], specPOi[i]) are placed on an unit circle without using srqt()*/ for ( i = 1; i < 10; i++ ) /*search from 4 angles */ { - specPOr[i] = sign( specPOr[i] ) * 0.866f; /* low angles are more frequent for low frequency */ - specPOi[i] = sign( specPOi[i] ) * 0.5f; + tmp1 = wnd[i * step + bias] * gamma; + gamma -= igamma; + + specPOr[i] = sign( specPOr[i] ) * 0.866f * tmp1; /* low angles are more frequent for low frequency */ + specPOi[i] = sign( specPOi[i] ) * 0.5f * tmp1; } for ( i = 10; i> 4; i++ ) /*search from 4 angles */ { - specPOr[i] = sign( specPOr[i] ) * 0.7071f; /* low accuracy is adequate for low frequency */ - specPOi[i] = sign( specPOi[i] ) * 0.7071f; + tmp1 = wnd[i * step + bias] * gamma * 0.7071f; + gamma -= igamma; + + specPOr[i] = sign( specPOr[i] ) * tmp1; + specPOi[i] = sign( specPOi[i] ) * tmp1; /* low accuracy is adequate for low frequency */ } for ( i = n0 >> 4; i> 3; i++ ) /* binary search from 8 angles */ { aR = fabsf( specPOr[i] ); aI = fabsf( specPOi[i] ); - if ( aR > aI ) - { - specPOr[i] = sign( specPOr[i] ) * 0.92388f; /* (wnd[n0>>2]+wnd[(n0>>2)-1])*0.5f) */ - specPOi[i] = sign( specPOi[i] ) * 0.382683f; /* (wnd[n0>>2]+wnd[(n0>>2)-1])*0.5f) */ - } - else + + diffIR = aR > aI; + index_angles = 120 - (int16_t) diffIR * 80; { - specPOr[i] = sign( specPOr[i] ) * 0.382683f; /* (wnd[n0>>2]+wnd[(n0>>2)-1])*0.5f) */ - specPOi[i] = sign( specPOi[i] ) * 0.92388f; /* (wnd[(n0>>2)*3]+wnd[((n0>>2)*3)-1])*0.5f) */ + tmp1 = wnd[i * step + bias] * gamma; + gamma -= igamma; + specPOr[i] = sign( specPOr[i] ) * cos_reverse[-index_angles * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; + specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; } } for ( i = n0 >> 3; i> 2; i++ ) /* binary search from 16 angles */ { aR = fabsf( specPOr[i] ); aI = fabsf( specPOi[i] ); + if ( aR > aI ) { - if ( aR * 0.414213f /*tanf(PI/8)*/ > aI ) - { - specPOr[i] = sign( specPOr[i] ) * 0.980785f; /* (wnd[(n0>>3)*7]+wnd[((n0>>3)*7)-1])*0.5f */ - specPOi[i] = sign( specPOi[i] ) * 0.19509f; /* (wnd[n0>>3]+wnd[(n0>>3)-1])*0.5f) */ - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.83147f; /* (wnd[(n0>>3)*5]+wnd[((n0>>3)*5)-1])*0.5f */ - specPOi[i] = sign( specPOi[i] ) * 0.55557f; /* (wnd[(n0>>3)*3]+wnd[(n0>>3)*3-1])*0.5f */ - } + diffIR = aR * 0.414213f /*tanf(PI/8)*/ > aI; + index_angles = 60 - (int16_t) diffIR * 40; } else { - if ( aR > aI * 0.41421356f /*tanf(PI/8)*/ ) - { - specPOr[i] = sign( specPOr[i] ) * 0.55557f; - specPOi[i] = sign( specPOi[i] ) * 0.83147f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.19509f; - specPOi[i] = sign( specPOi[i] ) * 0.980785f; - } + diffIR = aR > aI * 0.41421356f /*tanf(PI/8)*/; + index_angles = 140 - (int16_t) diffIR * 40; + } + { + tmp1 = wnd[i * step + bias] * gamma; + gamma -= igamma; + specPOr[i] = sign( specPOr[i] ) * cos_reverse[-index_angles * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; + specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; } } @@ -318,125 +351,66 @@ static void calc_poc( { if ( aR * 0.4142136f /*tanf(PI/8)*/ > aI ) { - if ( aR * 0.19891f /*tanf(PI/16)*/ > aI ) - { - specPOr[i] = sign( specPOr[i] ) * 0.995185f; - specPOi[i] = sign( specPOi[i] ) * 0.098017f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.95694f; - specPOi[i] = sign( specPOi[i] ) * 0.290285f; - } + diffIR = aR * 0.19891f /*tanf(PI/16)*/ > aI; + index_angles = 30 - (int16_t) diffIR * 20; } else { - if ( aR * 0.66818f /*tanf(PI*3/16)*/ > aI ) - { - specPOr[i] = sign( specPOr[i] ) * 0.881921f; - specPOi[i] = sign( specPOi[i] ) * 0.471397f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.77301f; - specPOi[i] = sign( specPOi[i] ) * 0.634393f; - } + diffIR = aR * 0.66818f /*tanf(PI*3/16)*/ > aI; + index_angles = 70 - (int16_t) diffIR * 20; } } else { if ( aR > aI * 0.4142136f /*tanf(PI/8)*/ ) { - if ( aR > aI * 0.668179f /*tanf(PI*3/16)*/ ) - { - specPOr[i] = sign( specPOr[i] ) * 0.634393f; - specPOi[i] = sign( specPOi[i] ) * 0.77301f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.471397f; - specPOi[i] = sign( specPOi[i] ) * 0.881921f; - } + diffIR = aR > aI * 0.668179f /*tanf(PI*3/16)*/; + index_angles = 110 - (int16_t) diffIR * 20; } else { - if ( aR > aI * 0.198912f /*tanf(PI/16)*/ ) - { - specPOr[i] = sign( specPOr[i] ) * 0.290285f; - specPOi[i] = sign( specPOi[i] ) * 0.95694f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.098017f; - specPOi[i] = sign( specPOi[i] ) * 0.995158f; - } + diffIR = aR > aI * 0.198912f /*tanf(PI/16)*/; + index_angles = 150 - (int16_t) diffIR * 20; } } + { + tmp1 = wnd[i * step + bias] * gamma; + gamma -= igamma; + specPOr[i] = sign( specPOr[i] ) * cos_reverse[-index_angles * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; + specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; + } } for ( i = n0 >> 1; i < min( n0, 320 ); i++ ) /* binary search from 64 angles */ { aR = fabsf( specPOr[i] ); aI = fabsf( specPOi[i] ); - if ( aR > aI ) { if ( aR * 0.414213f /*tanf(PI/8)*/ > aI ) { if ( aR * 0.19891f /*tanf(PI/16)*/ > aI ) { - if ( aR * 0.0984914f /*tanf(PI/32)*/ > aI ) - { - specPOr[i] = sign( specPOr[i] ) * 0.99879f; - specPOi[i] = sign( specPOi[i] ) * 0.04907f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.98918f; - specPOi[i] = sign( specPOi[i] ) * 0.14763f; - } + diffIR = aR * 0.0984914f /*tanf(PI/32)*/ > aI; + index_angles = 15 - (int16_t) diffIR * 10; } else { - if ( aR * 0.303347f /*tanf(PI*3/32)*/ > aI ) - { - specPOr[i] = sign( specPOr[i] ) * 0.970031f; - specPOi[i] = sign( specPOi[i] ) * 0.24298f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.941544f; - specPOi[i] = sign( specPOi[i] ) * 0.33689f; - } + diffIR = aR * 0.3033467f /*tanf(PI*3/32)*/ > aI; + index_angles = 35 - (int16_t) diffIR * 10; } } else { if ( aR * 0.66818f /*tanf(PI*3/16)*/ > aI ) { - if ( aR * 0.534511f /*tanf(PI*5/32)*/ > aI ) - { - specPOr[i] = sign( specPOr[i] ) * 0.903989f; - specPOi[i] = sign( specPOi[i] ) * 0.427555f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.857729f; - specPOi[i] = sign( specPOi[i] ) * 0.514103f; - } + diffIR = aR * 0.534511f /*tanf(PI*5/32)*/ > aI; + index_angles = 55 - (int16_t) diffIR * 10; } else { - if ( aR * 0.8206788f /*tanf(PI*7/32)*/ > aI ) - { - specPOr[i] = sign( specPOr[i] ) * 0.803208f; - specPOi[i] = sign( specPOi[i] ) * 0.595699f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.740951f; - specPOi[i] = sign( specPOi[i] ) * 0.671559f; - } + diffIR = aR * 0.8206788f /*tanf(PI*7/32)*/ > aI; + index_angles = 75 - (int16_t) diffIR * 10; } } } @@ -446,68 +420,35 @@ static void calc_poc( { if ( aR > aI * 0.6681767f /*tanf(PI*3/16)*/ ) { - if ( aR > aI * 0.820681f /*tanf(PI*7/32)*/ ) - { - specPOr[i] = sign( specPOr[i] ) * 0.671559f; - specPOi[i] = sign( specPOi[i] ) * 0.740951f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.595699f; - specPOi[i] = sign( specPOi[i] ) * 0.803208f; - } + diffIR = aR > aI * 0.820681f /*tanf(PI*7/32)*/; + index_angles = 95 - (int16_t) diffIR * 10; } else { - if ( aR > aI * 0.5345111f /*tanf(PI*5/32)*/ ) - { - specPOr[i] = sign( specPOr[i] ) * 0.514103f; - specPOi[i] = sign( specPOi[i] ) * 0.857729f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.427555f; - specPOi[i] = sign( specPOi[i] ) * 0.903989f; - } + diffIR = aR > aI * 0.5345111f /*tanf(PI*5/32)*/; + index_angles = 115 - (int16_t) diffIR * 10; } } else { if ( aR > aI * 0.1989124f /*tanf(PI/16)*/ ) { - if ( aR > aI * 0.3033467f /*tanf(PI*3/32)*/ ) - { - specPOr[i] = sign( specPOr[i] ) * 0.33689f; - specPOi[i] = sign( specPOi[i] ) * 0.941544f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.24298f; - specPOi[i] = sign( specPOi[i] ) * 0.970031f; - } + diffIR = aR > aI * 0.3033467f /*tanf(PI*3/32)*/; + index_angles = 135 - (int16_t) diffIR * 10; } else { - if ( aR > aI * 0.098491f /*tanf(PI/32)*/ ) - { - specPOr[i] = sign( specPOr[i] ) * 0.14673f; - specPOi[i] = sign( specPOi[i] ) * 0.989177f; - } - else - { - specPOr[i] = sign( specPOr[i] ) * 0.049068f; - specPOi[i] = sign( specPOi[i] ) * 0.998795f; - } + diffIR = aR > aI * 0.098491f /*tanf(PI/32)*/; + index_angles = 155 - (int16_t) diffIR * 10; } } } - } - for ( i = 1; i < min( n0, 320 ); i++ ) /*neglect highest frequency bins when 48 kHz samplng*/ - { - tmp1 = wnd[i * step + bias] * gamma; - specPOr[i] *= tmp1; - specPOi[i] *= tmp1; - gamma -= igamma; + { + tmp1 = wnd[i * step + bias] * gamma; + gamma -= igamma; + specPOr[i] = sign( specPOr[i] ) * cos_reverse[-index_angles * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; + specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; + } } if ( i < n0 ) { @@ -519,9 +460,33 @@ static void calc_poc( specPOi[i] = 0.f; } specPOr[n0] = sign( specLr[n0] ) * sign( specRr[n0] ) * wnd[i * step + bias] * gamma; - #else + if ( input_frame == L_FRAME16k ) + { + step = 3; + bias = 1; + } + else + { + step = 1; + bias = 0; + } + + specPOr[0] = sign( specLr[0] ) * sign( specRr[0] ) * wnd[bias]; + specPOi[0] = 0.0f; + + EPS = hPOC->eps; + if ( input_frame == L_FRAME16k ) + { + cos_step = 4; + cos_max = input_frame; + } + else /* for 32 kHz & 48 kHz */ + { + cos_step = 2; + cos_max = n0; + } for ( i = 1; i < n0 / 2; i++ ) { Lr = specLr[i]; @@ -690,7 +655,7 @@ static float find_poc_peak( cnt[n] = 0; cQ[n] = P[Lh - itd_cand[n]]; - peak_range = (int16_t) ( abs( itd_cand[n] ) + hPOC->shift_limit / STEREO_DMX_EVS_FIND_POC_PEAK_TAU ) / STEREO_DMX_EVS_FIND_POC_PEAK_TAU2; + peak_range = ( int16_t )( abs( itd_cand[n] ) + hPOC->shift_limit / STEREO_DMX_EVS_FIND_POC_PEAK_TAU ) / STEREO_DMX_EVS_FIND_POC_PEAK_TAU2; for ( i = 1; i <= peak_range; i++ ) { @@ -1028,7 +993,7 @@ void stereo_dmx_evs_enc( float dmx_data[L_FRAME48k]; int16_t input_frame; - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + input_frame = ( int16_t )( input_Fs / FRAMES_PER_SEC ); for ( n = 0; n < input_frame; n++ ) { @@ -1075,7 +1040,7 @@ ivas_error stereo_dmx_evs_init_encoder( STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS; int16_t n, input_frame; - input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); + input_frame = ( int16_t )( input_Fs / FRAMES_PER_SEC ); hStereoDmxEVS = NULL; if ( ( hStereoDmxEVS = (STEREO_DMX_EVS_ENC_HANDLE) count_malloc( sizeof( STEREO_DMX_EVS_ENC_DATA ) ) ) == NULL ) @@ -1117,7 +1082,7 @@ ivas_error stereo_dmx_evs_init_encoder( return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_POC_DATA\n" ) ); } - hStereoDmxEVS->hPOC->shift_limit = (int16_t) ( STEREO_DMX_EVS_SHIFT_LIMIT * input_Fs / 1000 ); + hStereoDmxEVS->hPOC->shift_limit = ( int16_t )( STEREO_DMX_EVS_SHIFT_LIMIT * input_Fs / 1000 ); for ( n = 0; n < CPE_CHANNELS; n++ ) { hStereoDmxEVS->hPOC->peakQ[n] = 0.0f; -- GitLab From 9134870e7bfc9b1a086d9cafaf7abf9a8485cb4d Mon Sep 17 00:00:00 2001 From: Hiromi Sekine Date: Thu, 13 Oct 2022 18:03:30 +0900 Subject: [PATCH 3/6] Further reduction of complexity by modifying if{}else{} clause. --- lib_com/options.h | 1 + lib_enc/ivas_stereo_dmx_evs.c | 167 +++++++++++++++++++++++++++++++++- 2 files changed, 166 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index edcd2846aa..f5d63791dc 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -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 */ diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index 4a09062bc2..bf30d903f4 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -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; @@ -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]; @@ -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> 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> 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> 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> 3; i++ ) /* binary search from 8 angles */ { aR = fabsf( specPOr[i] ); @@ -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 ); @@ -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; -- GitLab From 7df752276830b481b0225cfd5aad41e03f83d55d Mon Sep 17 00:00:00 2001 From: Hiromi Sekine Date: Fri, 4 Nov 2022 17:05:58 +0900 Subject: [PATCH 4/6] Update NTT_REDUC_COMP_POC. --- lib_com/options.h | 6 +- lib_enc/ivas_stereo_dmx_evs.c | 410 ++++++---------------------------- 2 files changed, 74 insertions(+), 342 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 1f7704127b..332920ea35 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -161,8 +161,10 @@ #endif /* NTT switches */ -#define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix*/ -#define BOOL5 +#define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix*/ +#ifndef NTT_REDUC_COMP_POC +#define NTT_USE_INV_SQRT_POC /*inv_sqrt() is used */ +#endif /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index bf30d903f4..3a13984108 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -157,25 +157,13 @@ static void calc_poc( float tmp1, tmp2, Lr, Li, Rr, Ri, gamma, igamma, iN; #ifdef NTT_REDUC_COMP_POC - float specPOr[L_FRAME48k / 2 + 1], specPOi[L_FRAME48k / 2]; /*real and imaginary part of spectrum*/ - float aR, aI; /*real and imaginary values for searching phase angle*/ - int16_t j; - - int16_t mult_angle; - - bool diffIR; - const float *cos_reverse; - + float specPOr[L_FRAME48k / 2 + 1], specPOi[L_FRAME48k / 2]; /*real and imaginary values for searching phase angle*/ 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 + int16_t mult_angle; + int16_t j; + int16_t end; #else float specPOr[L_FRAME48k], specPOi[L_FRAME48k]; float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; @@ -194,62 +182,55 @@ static void calc_poc( P = hPOC->P; n0 = input_frame / 2; itdLR = hPOC->itdLR; + igamma = STEREO_DMX_EVS_POC_GAMMA * iN; gamma = 1.0f - igamma; #ifdef NTT_REDUC_COMP_POC /*apploximation of phase angle on an unit circle without using sqrt()*/ + + step = 1; + bias = 0; + cos_step = 2; + cos_max = n0; + mult_angle = 3; + if ( input_frame == L_FRAME16k ) { step = 3; bias = 1; cos_step = 4; cos_max = input_frame; - mult_angle = 1; + mult_angle = 2; /*****/ } - else + if ( input_frame == L_FRAME32k ) { - step = 1; - bias = 0; - cos_step = 2; - cos_max = n0; mult_angle = 2; - if ( input_frame == L_FRAME48k ) - mult_angle = 3; } - cos_reverse = s + cos_max; - specPOr[0] = sign( specLr[0] ) * sign( specRr[0] ) * wnd[bias]; + end = min( n0, 320 ); + specPOr[0] = sign( specLr[0] * specRr[0] ) * wnd[bias]; specPOi[0] = 0.0f; EPS = hPOC->eps; if ( input_frame == L_FRAME48k ) { for ( i = 1; i < n0 / 2; i++ ) { - Lr = specLr[i]; - Li = specLi[i]; - Rr = specRr[i]; - Ri = specRi[i]; - eps_cos = s[cos_max - i * cos_step /*cos_max - i_for*/] * EPS; eps_sin = s[i * cos_step /*i_for*/] * EPS; - Lr += ( Rr * eps_cos + Ri * eps_sin ); - Li += ( -Rr * eps_sin + Ri * eps_cos ); - Rr += ( specLr[i] * eps_cos + specLi[i] * eps_sin ); - Ri += ( -specLr[i] * eps_sin + specLi[i] * eps_cos ); + Lr = specLr[i]+ specRr[i] * eps_cos + specRi[i] * eps_sin; + Li = specLi[i]- specRr[i] * eps_sin + specRi[i] * eps_cos; + Rr = specRr[i]+ specLr[i] * eps_cos + specLi[i] * eps_sin; + Ri = specRi[i]- specLr[i] * eps_sin + specLi[i] * eps_cos; specPOr[i] = ( Lr * Rr + Li * Ri ); specPOi[i] = ( Lr * Ri - Li * Rr ); j = n0 - i; if ( j < 320 ) { - Lr = specLr[j]; - Li = specLi[j]; - Rr = specRr[j]; - Ri = specRi[j]; - Lr += ( -Rr * eps_cos + Ri * eps_sin ); - Li += ( -Rr * eps_sin - Ri * eps_cos ); - Rr += ( -specLr[j] * eps_cos + specLi[j] * eps_sin ); - Ri += ( -specLr[j] * eps_sin - specLi[j] * eps_cos ); + Lr = specLr[j] - specRr[j] * eps_cos + specRi[j] * eps_sin; + Li = specLi[j] - specRr[j] * eps_sin - specRi[j] * eps_cos; + Rr = specRr[j] - specLr[j] * eps_cos + specLi[j] * eps_sin; + Ri = specRi[j] - specLr[j] * eps_sin - specLi[j] * eps_cos; specPOr[j] = ( Lr * Rr + Li * Ri ); specPOi[j] = ( Lr * Ri - Li * Rr ); @@ -260,28 +241,21 @@ static void calc_poc( { for ( i = 1; i < n0 / 2; i++ ) { - Lr = specLr[i]; - Li = specLi[i]; - Rr = specRr[i]; - Ri = specRi[i]; eps_cos = s[cos_max - i * cos_step /*cos_max - i_for*/] * EPS; eps_sin = s[i * cos_step /*i_for*/] * EPS; - Lr += ( Rr * eps_cos + Ri * eps_sin ); - Li += ( -Rr * eps_sin + Ri * eps_cos ); - Rr += ( specLr[i] * eps_cos + specLi[i] * eps_sin ); - Ri += ( -specLr[i] * eps_sin + specLi[i] * eps_cos ); + + Lr = specLr[i] + specRr[i] * eps_cos + specRi[i] * eps_sin; + Li = specLi[i] - specRr[i] * eps_sin + specRi[i] * eps_cos; + Rr = specRr[i] + specLr[i] * eps_cos + specLi[i] * eps_sin; + Ri = specRi[i] - specLr[i] * eps_sin + specLi[i] * eps_cos; specPOr[i] = ( Lr * Rr + Li * Ri ); specPOi[i] = ( Lr * Ri - Li * Rr ); j = n0 - i; - Lr = specLr[j]; - Li = specLi[j]; - Rr = specRr[j]; - Ri = specRi[j]; - Lr += ( -Rr * eps_cos + Ri * eps_sin ); - Li += ( -Rr * eps_sin - Ri * eps_cos ); - Rr += ( -specLr[j] * eps_cos + specLi[j] * eps_sin ); - Ri += ( -specLr[j] * eps_sin - specLi[j] * eps_cos ); + Lr = specLr[j] - specRr[j] * eps_cos + specRi[j] * eps_sin; + Li = specLi[j] - specRr[j] * eps_sin - specRi[j] * eps_cos; + Rr = specRr[j] - specLr[j] * eps_cos + specLi[j] * eps_sin; + Ri = specRi[j] - specLr[j] * eps_sin - specLi[j] * eps_cos; specPOr[j] = ( Lr * Rr + Li * Ri ); specPOi[j] = ( Lr * Ri - Li * Rr ); } @@ -299,331 +273,80 @@ static void calc_poc( for ( i = 1; i < 10; i++ ) /*search from 4 angles */ { tmp1 = wnd[i * step + bias] * gamma; - gamma -= igamma; specPOr[i] = sign( specPOr[i] ) * 0.866f * tmp1; /* low angles are more frequent for low frequency */ specPOi[i] = sign( specPOi[i] ) * 0.5f * tmp1; + gamma -= igamma; } - for ( i = 10; i> 4; i++ ) /*search from 4 angles */ + for ( ; i> 4; i++ ) /*search from 4 angles */ { tmp1 = wnd[i * step + bias] * gamma * 0.7071f; - gamma -= igamma; 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> 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> 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> 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> 3; i++ ) /* binary search from 8 angles */ - { - aR = fabsf( specPOr[i] ); - aI = fabsf( specPOi[i] ); - - 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[-index_angles * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; - specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; - } - } - for ( i = n0 >> 3; i> 2; i++ ) /* binary search from 16 angles */ - { - aR = fabsf( specPOr[i] ); - aI = fabsf( specPOi[i] ); - - if ( aR > aI ) - { - diffIR = aR * 0.414213f /*tanf(PI/8)*/ > aI; - index_angles = 60 - (int16_t) diffIR * 40; - } - else - { - diffIR = aR > aI * 0.41421356f /*tanf(PI/8)*/; - index_angles = 140 - (int16_t) diffIR * 40; - } - { - tmp1 = wnd[i * step + bias] * gamma; - gamma -= igamma; - specPOr[i] = sign( specPOr[i] ) * cos_reverse[-index_angles * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; - specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; - } } - for ( i = n0 >> 2; i> 1; i++ ) /* binary search from 32 angles */ + for ( ; i < n0 >> 3; i++ ) /* binary search from 8 angles */ { - aR = fabsf( specPOr[i] ); - aI = fabsf( specPOi[i] ); - - if ( aR > aI ) + tmp1 = wnd[i* step + bias] * gamma; + + if ( ( specPOr[i] - specPOi[i] ) * ( specPOr[i] + specPOi[i] ) > 0 ) { - if ( aR * 0.4142136f /*tanf(PI/8)*/ > aI ) - { - diffIR = aR * 0.19891f /*tanf(PI/16)*/ > aI; - index_angles = 30 - (int16_t) diffIR * 20; - } - else - { - diffIR = aR * 0.66818f /*tanf(PI*3/16)*/ > aI; - index_angles = 70 - (int16_t) diffIR * 20; - } + specPOr[i] = sign( specPOr[i] ) * tmp1 * /*0.923880f*/ s[120 * mult_angle]; /* cos(PI/8)*/ + specPOi[i] = sign( specPOi[i] ) * tmp1 * /*0.382683f*/ s[40 * mult_angle]; } else { - if ( aR > aI * 0.4142136f /*tanf(PI/8)*/ ) - { - diffIR = aR > aI * 0.668179f /*tanf(PI*3/16)*/; - index_angles = 110 - (int16_t) diffIR * 20; - } - else - { - diffIR = aR > aI * 0.198912f /*tanf(PI/16)*/; - index_angles = 150 - (int16_t) diffIR * 20; - } - } - { - tmp1 = wnd[i * step + bias] * gamma; - gamma -= igamma; - specPOr[i] = sign( specPOr[i] ) * cos_reverse[-index_angles * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; - specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; + specPOr[i] = sign( specPOr[i] ) * tmp1 * /*0.382683f*/ s[40 * mult_angle]; /* cos(PI*3/8)*/ + specPOi[i] = sign( specPOi[i] ) * tmp1 * /*0.923880f*/ s[120 * mult_angle]; } + gamma -= igamma; } - - for ( i = n0 >> 1; i < min( n0, 320 ); i++ ) /* binary search from 64 angles */ + for ( ; i < end ; i++ ) /* binary search from 16 angles */ { - aR = fabsf( specPOr[i] ); - aI = fabsf( specPOi[i] ); - if ( aR > aI ) + tmp1 = wnd[i * step + bias] * gamma; + if ( ( specPOr[i] - specPOi[i] ) * ( specPOr[i] + specPOi[i] ) > 0 ) { - if ( aR * 0.414213f /*tanf(PI/8)*/ > aI ) + if ( ( specPOr[i] * 0.414213f - specPOi[i] ) * ( specPOr[i] * 0.414213f + specPOi[i] ) > 0 ) /*tan(PI/8)*/ { - if ( aR * 0.19891f /*tanf(PI/16)*/ > aI ) - { - diffIR = aR * 0.0984914f /*tanf(PI/32)*/ > aI; - index_angles = 15 - (int16_t) diffIR * 10; - } - else - { - diffIR = aR * 0.3033467f /*tanf(PI*3/32)*/ > aI; - index_angles = 35 - (int16_t) diffIR * 10; - } + specPOr[i] = sign( specPOr[i] ) * tmp1 /*0.980785f */ * s[140 * mult_angle]; /* cos(PI/16)*/ + specPOi[i] = sign( specPOi[i] ) * tmp1 /*0.195090f */ * s[20 * mult_angle]; } else { - if ( aR * 0.66818f /*tanf(PI*3/16)*/ > aI ) - { - diffIR = aR * 0.534511f /*tanf(PI*5/32)*/ > aI; - index_angles = 55 - (int16_t) diffIR * 10; - } - else - { - diffIR = aR * 0.8206788f /*tanf(PI*7/32)*/ > aI; - index_angles = 75 - (int16_t) diffIR * 10; - } + specPOr[i] = sign( specPOr[i] ) * tmp1 /* 0.831470f */ * s[100 * mult_angle]; /*cos(PI*3/16)*/ + specPOi[i] = sign( specPOi[i] ) * tmp1 /* 0.555570f*/ * s[60 * mult_angle]; } } else { - if ( aR > aI * 0.4142136f /*tanf(PI/8)*/ ) + if ( ( specPOr[i] - specPOi[i] * 0.414213f ) * ( specPOr[i] + specPOi[i] * 0.414213f ) > 0 ) /*tan(PI/8)*/ { - if ( aR > aI * 0.6681767f /*tanf(PI*3/16)*/ ) - { - diffIR = aR > aI * 0.820681f /*tanf(PI*7/32)*/; - index_angles = 95 - (int16_t) diffIR * 10; - } - else - { - diffIR = aR > aI * 0.5345111f /*tanf(PI*5/32)*/; - index_angles = 115 - (int16_t) diffIR * 10; - } + specPOr[i] = sign( specPOr[i] ) * tmp1 /** 0.555570f*/ * s[60 * mult_angle]; /*cos(PI*5/16)*/ + specPOi[i] = sign( specPOi[i] ) * tmp1 /** 0.831470f*/ * s[100 * mult_angle]; } else { - if ( aR > aI * 0.1989124f /*tanf(PI/16)*/ ) - { - diffIR = aR > aI * 0.3033467f /*tanf(PI*3/32)*/; - index_angles = 135 - (int16_t) diffIR * 10; - } - else - { - diffIR = aR > aI * 0.098491f /*tanf(PI/32)*/; - index_angles = 155 - (int16_t) diffIR * 10; - } + specPOr[i] = sign( specPOr[i] ) * tmp1 /** 0.195090f*/ * s[20 * mult_angle]; /*cos(PI*7/16)*/ + specPOi[i] = sign( specPOi[i] ) * tmp1 /** 0.980785f*/ * s[140* mult_angle]; } } - { - tmp1 = wnd[i * step + bias] * gamma; - gamma -= igamma; - specPOr[i] = sign( specPOr[i] ) * cos_reverse[-index_angles * mult_angle] * tmp1 /*s[cos_max - index_angles]*/; - specPOi[i] = sign( specPOi[i] ) * s[index_angles * mult_angle] * tmp1; - } + gamma -= igamma; } -#endif /*BOOL5*/ if ( i < n0 ) { gamma -= igamma * ( n0 - 320 ); } - for ( /* i = min(n0, 320) */; i < n0; i++ ) /*neglect higher frequency bins when 48 kHz samplng*/ + for ( ; i < n0; i++ ) /*neglect higher frequency bins when 48 kHz samplng*/ { specPOr[i] = 0.f; specPOi[i] = 0.f; } - specPOr[n0] = sign( specLr[n0] ) * sign( specRr[n0] ) * wnd[i * step + bias] * gamma; + specPOr[n0] = sign( specLr[n0] * specRr [n0] ) * wnd[i * step + bias] * gamma; -#else /*end NTT_REDUC_COMP*/ +#else /*NTT_REDUC_COMP_POC*/ if ( input_frame == L_FRAME16k ) { step = 3; @@ -663,8 +386,12 @@ static void calc_poc( Li += ( -specRr[i] * eps_sin + specRi[i] * eps_cos ); Rr += ( specLr[i] * eps_cos + specLi[i] * eps_sin ); Ri += ( -specLr[i] * eps_sin + specLi[i] * eps_cos ); - tmp1 = wnd[i * step + bias] * gamma / ( sqrtf( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) ) + EPS ); +#ifdef NTT_USE_INV_SQRT_POC + tmp1 = wnd[i * step + bias] * gamma * inv_sqrt( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) + EPS ); +#else + tmp1 = wnd[i * step + bias] * gamma / ( sqrtf( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) ) + EPS ); +#endif specPOr[i] = ( Lr * Rr + Li * Ri ) * tmp1; specPOi[i] = ( Lr * Ri - Li * Rr ) * tmp1; @@ -687,8 +414,11 @@ static void calc_poc( Rr += ( -specLr[i] * eps_cos + specLi[i] * eps_sin ); Ri += ( -specLr[i] * eps_sin - specLi[i] * eps_cos ); +#ifdef NTT_USE_INV_SQRT_POC + tmp1 = wnd[i * step + bias] * gamma * inv_sqrt( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) + EPS ); +#else tmp1 = wnd[i * step + bias] * gamma / ( sqrtf( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) ) + EPS ); - +#endif specPOr[i] = ( Lr * Rr + Li * Ri ) * tmp1; specPOi[i] = ( Lr * Ri - Li * Rr ) * tmp1; gamma -= igamma; -- GitLab From 5d2fcf53e0d32866b963ec66d29488c78f5592a8 Mon Sep 17 00:00:00 2001 From: Hiromi Sekine Date: Mon, 28 Nov 2022 11:02:51 +0900 Subject: [PATCH 5/6] Remove unnecessary code. --- lib_com/options.h | 5 +---- lib_enc/ivas_stereo_dmx_evs.c | 40 +++++++++++++++-------------------- 2 files changed, 18 insertions(+), 27 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index c49202354f..7124060f77 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -172,10 +172,7 @@ #define FIX_DTX_RANGE /* Issue 118: fix the DTX usage: default DTX up to 64 kbps, otherwise only in silence */ /* NTT switches */ -#define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix*/ -#ifndef NTT_REDUC_COMP_POC -#define NTT_USE_INV_SQRT_POC /*inv_sqrt() is used */ -#endif +#define NTT_REDUC_COMP_POC /* Contribution : Complexity reduction of phase spectrum in stereo downmix*/ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index 3a13984108..e1f7e28d8f 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -157,7 +157,7 @@ static void calc_poc( float tmp1, tmp2, Lr, Li, Rr, Ri, gamma, igamma, iN; #ifdef NTT_REDUC_COMP_POC - float specPOr[L_FRAME48k / 2 + 1], specPOi[L_FRAME48k / 2]; /*real and imaginary values for searching phase angle*/ + float specPOr[L_FRAME48k / 2 + 1], specPOi[L_FRAME48k / 2]; /*real and imaginary values for searching phase angle*/ float tmpPOC1[L_FRAME48k], tmpPOC2[L_FRAME48k]; float rfft_buf[L_FRAME48k]; int16_t step, bias; @@ -182,7 +182,7 @@ static void calc_poc( P = hPOC->P; n0 = input_frame / 2; itdLR = hPOC->itdLR; - + igamma = STEREO_DMX_EVS_POC_GAMMA * iN; gamma = 1.0f - igamma; @@ -217,10 +217,10 @@ static void calc_poc( { eps_cos = s[cos_max - i * cos_step /*cos_max - i_for*/] * EPS; eps_sin = s[i * cos_step /*i_for*/] * EPS; - Lr = specLr[i]+ specRr[i] * eps_cos + specRi[i] * eps_sin; - Li = specLi[i]- specRr[i] * eps_sin + specRi[i] * eps_cos; - Rr = specRr[i]+ specLr[i] * eps_cos + specLi[i] * eps_sin; - Ri = specRi[i]- specLr[i] * eps_sin + specLi[i] * eps_cos; + Lr = specLr[i] + specRr[i] * eps_cos + specRi[i] * eps_sin; + Li = specLi[i] - specRr[i] * eps_sin + specRi[i] * eps_cos; + Rr = specRr[i] + specLr[i] * eps_cos + specLi[i] * eps_sin; + Ri = specRi[i] - specLr[i] * eps_sin + specLi[i] * eps_cos; specPOr[i] = ( Lr * Rr + Li * Ri ); specPOi[i] = ( Lr * Ri - Li * Rr ); @@ -287,14 +287,14 @@ static void calc_poc( gamma -= igamma; } - for ( ; i < n0 >> 3; i++ ) /* binary search from 8 angles */ + for ( ; i> 3; i++ ) /* binary search from 8 angles */ { - tmp1 = wnd[i* step + bias] * gamma; - + tmp1 = wnd[i * step + bias] * gamma; + if ( ( specPOr[i] - specPOi[i] ) * ( specPOr[i] + specPOi[i] ) > 0 ) { - specPOr[i] = sign( specPOr[i] ) * tmp1 * /*0.923880f*/ s[120 * mult_angle]; /* cos(PI/8)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 * /*0.382683f*/ s[40 * mult_angle]; + specPOr[i] = sign( specPOr[i] ) * tmp1 * /*0.923880f*/ s[120 * mult_angle]; /* cos(PI/8)*/ + specPOi[i] = sign( specPOi[i] ) * tmp1 * /*0.382683f*/ s[40 * mult_angle]; } else { @@ -303,7 +303,7 @@ static void calc_poc( } gamma -= igamma; } - for ( ; i < end ; i++ ) /* binary search from 16 angles */ + for ( ; i < end; i++ ) /* binary search from 16 angles */ { tmp1 = wnd[i * step + bias] * gamma; if ( ( specPOr[i] - specPOi[i] ) * ( specPOr[i] + specPOi[i] ) > 0 ) @@ -316,7 +316,7 @@ static void calc_poc( else { specPOr[i] = sign( specPOr[i] ) * tmp1 /* 0.831470f */ * s[100 * mult_angle]; /*cos(PI*3/16)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 /* 0.555570f*/ * s[60 * mult_angle]; + specPOi[i] = sign( specPOi[i] ) * tmp1 /* 0.555570f*/ * s[60 * mult_angle]; } } else @@ -329,7 +329,7 @@ static void calc_poc( else { specPOr[i] = sign( specPOr[i] ) * tmp1 /** 0.195090f*/ * s[20 * mult_angle]; /*cos(PI*7/16)*/ - specPOi[i] = sign( specPOi[i] ) * tmp1 /** 0.980785f*/ * s[140* mult_angle]; + specPOi[i] = sign( specPOi[i] ) * tmp1 /** 0.980785f*/ * s[140 * mult_angle]; } } gamma -= igamma; @@ -344,7 +344,7 @@ static void calc_poc( specPOr[i] = 0.f; specPOi[i] = 0.f; } - specPOr[n0] = sign( specLr[n0] * specRr [n0] ) * wnd[i * step + bias] * gamma; + specPOr[n0] = sign( specLr[n0] * specRr[n0] ) * wnd[i * step + bias] * gamma; #else /*NTT_REDUC_COMP_POC*/ if ( input_frame == L_FRAME16k ) @@ -387,11 +387,8 @@ static void calc_poc( Rr += ( specLr[i] * eps_cos + specLi[i] * eps_sin ); Ri += ( -specLr[i] * eps_sin + specLi[i] * eps_cos ); -#ifdef NTT_USE_INV_SQRT_POC - tmp1 = wnd[i * step + bias] * gamma * inv_sqrt( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) + EPS ); -#else tmp1 = wnd[i * step + bias] * gamma / ( sqrtf( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) ) + EPS ); -#endif + specPOr[i] = ( Lr * Rr + Li * Ri ) * tmp1; specPOi[i] = ( Lr * Ri - Li * Rr ) * tmp1; @@ -414,11 +411,8 @@ static void calc_poc( Rr += ( -specLr[i] * eps_cos + specLi[i] * eps_sin ); Ri += ( -specLr[i] * eps_sin - specLi[i] * eps_cos ); -#ifdef NTT_USE_INV_SQRT_POC - tmp1 = wnd[i * step + bias] * gamma * inv_sqrt( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) + EPS ); -#else tmp1 = wnd[i * step + bias] * gamma / ( sqrtf( ( ( Lr * Lr + Li * Li ) ) * ( ( Rr * Rr + Ri * Ri ) ) ) + EPS ); -#endif + specPOr[i] = ( Lr * Rr + Li * Ri ) * tmp1; specPOi[i] = ( Lr * Ri - Li * Rr ) * tmp1; gamma -= igamma; -- GitLab From 4d7624897683a83919fec365355e31130bfa05b1 Mon Sep 17 00:00:00 2001 From: Hiromi Sekine Date: Mon, 28 Nov 2022 18:44:03 +0900 Subject: [PATCH 6/6] Apply clang-format. --- lib_enc/ivas_stereo_dmx_evs.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index e1f7e28d8f..b0ec2f1c8e 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -278,7 +278,7 @@ static void calc_poc( specPOi[i] = sign( specPOi[i] ) * 0.5f * tmp1; gamma -= igamma; } - for ( ; i> 4; i++ ) /*search from 4 angles */ + for ( ; i < n0 >> 4; i++ ) /*search from 4 angles */ { tmp1 = wnd[i * step + bias] * gamma * 0.7071f; @@ -287,7 +287,7 @@ static void calc_poc( gamma -= igamma; } - for ( ; i> 3; i++ ) /* binary search from 8 angles */ + for ( ; i < n0 >> 3; i++ ) /* binary search from 8 angles */ { tmp1 = wnd[i * step + bias] * gamma; @@ -542,7 +542,7 @@ static float find_poc_peak( cnt[n] = 0; cQ[n] = P[Lh - itd_cand[n]]; - peak_range = ( int16_t )( abs( itd_cand[n] ) + hPOC->shift_limit / STEREO_DMX_EVS_FIND_POC_PEAK_TAU ) / STEREO_DMX_EVS_FIND_POC_PEAK_TAU2; + peak_range = (int16_t) ( abs( itd_cand[n] ) + hPOC->shift_limit / STEREO_DMX_EVS_FIND_POC_PEAK_TAU ) / STEREO_DMX_EVS_FIND_POC_PEAK_TAU2; for ( i = 1; i <= peak_range; i++ ) { @@ -880,7 +880,7 @@ void stereo_dmx_evs_enc( float dmx_data[L_FRAME48k]; int16_t input_frame; - input_frame = ( int16_t )( input_Fs / FRAMES_PER_SEC ); + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); for ( n = 0; n < input_frame; n++ ) { @@ -927,7 +927,7 @@ ivas_error stereo_dmx_evs_init_encoder( STEREO_DMX_EVS_ENC_HANDLE hStereoDmxEVS; int16_t n, input_frame; - input_frame = ( int16_t )( input_Fs / FRAMES_PER_SEC ); + input_frame = (int16_t) ( input_Fs / FRAMES_PER_SEC ); hStereoDmxEVS = NULL; if ( ( hStereoDmxEVS = (STEREO_DMX_EVS_ENC_HANDLE) count_malloc( sizeof( STEREO_DMX_EVS_ENC_DATA ) ) ) == NULL ) @@ -969,7 +969,7 @@ ivas_error stereo_dmx_evs_init_encoder( return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for STEREO_DMX_EVS_POC_DATA\n" ) ); } - hStereoDmxEVS->hPOC->shift_limit = ( int16_t )( STEREO_DMX_EVS_SHIFT_LIMIT * input_Fs / 1000 ); + hStereoDmxEVS->hPOC->shift_limit = (int16_t) ( STEREO_DMX_EVS_SHIFT_LIMIT * input_Fs / 1000 ); for ( n = 0; n < CPE_CHANNELS; n++ ) { hStereoDmxEVS->hPOC->peakQ[n] = 0.0f; -- GitLab