From eac7a44d8527041aa08839fc59ccc98b84bce7d3 Mon Sep 17 00:00:00 2001 From: Sandesh Venkatesh Date: Fri, 19 Jul 2024 14:15:47 +0530 Subject: [PATCH] Bug fix for changes introduced through MR455 for SynthesisSTFT [x] Replaced extract_l with saturation functions to prevent wrap-around behavior --- lib_com/fd_cng_com_fx.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/lib_com/fd_cng_com_fx.c b/lib_com/fd_cng_com_fx.c index dd84969a9..f439bbe28 100644 --- a/lib_com/fd_cng_com_fx.c +++ b/lib_com/fd_cng_com_fx.c @@ -2510,7 +2510,7 @@ void SynthesisSTFT( { FOR( i = 0; i < len; i++ ) { - olapBuffer[i] = extract_l( L_shr_r( fftBuffer[i], 31 - fftBufferExp ) ); + olapBuffer[i] = round_fx_sat( L_shl_sat( fftBuffer[i], fftBufferExp - 15 ) ); move16(); } } @@ -2518,11 +2518,9 @@ void SynthesisSTFT( { FOR( i = 0; i < len4; i++ ) { - // olapBuffer[i + 1 * len4] = add_sat( olapBuffer[i + 1 * len4], mult_r( round_fx( L_shl( fftBuffer[i + 1 * len4], fftBufferExp - 15 ) ), olapWin[i].v.im ) ); - olapBuffer[i + 1 * len4] = add_sat( olapBuffer[i + 1 * len4], mult_r( extract_l( L_shr_r( fftBuffer[i + 1 * len4], 31 - fftBufferExp ) ), olapWin[i].v.im ) ); + olapBuffer[i + 1 * len4] = add_sat( olapBuffer[i + 1 * len4], mult_r( round_fx_sat( L_shl_sat( fftBuffer[i + 1 * len4], fftBufferExp - 15 ) ), olapWin[i].v.im ) ); move16(); - // olapBuffer[i + 2 * len4] = add_sat( olapBuffer[i + 2 * len4], mult_r( round_fx( L_shl( fftBuffer[i + 2 * len4], fftBufferExp - 15 ) ), olapWin[len4 - 1 - i].v.re ) ); - olapBuffer[i + 2 * len4] = add_sat( olapBuffer[i + 2 * len4], mult_r( extract_l( L_shr_r( fftBuffer[i + 2 * len4], 31 - fftBufferExp ) ), olapWin[len4 - 1 - i].v.re ) ); + olapBuffer[i + 2 * len4] = add_sat( olapBuffer[i + 2 * len4], mult_r( round_fx_sat( L_shl_sat( fftBuffer[i + 2 * len4], fftBufferExp - 15 ) ), olapWin[len4 - 1 - i].v.re ) ); move16(); } FOR( i = len3; i < len; i++ ) @@ -2533,9 +2531,9 @@ void SynthesisSTFT( FOR( i = 0; i < len4; i++ ) { - olapBuffer[i + 5 * len4] = mult_r( extract_l( L_shr_r( fftBuffer[i + 5 * len4], 31 - fftBufferExp ) ), olapWin[i].v.re ); + olapBuffer[i + 5 * len4] = mult_r( round_fx_sat( L_shl_sat( fftBuffer[i + 5 * len4], fftBufferExp - 15 ) ), olapWin[i].v.re ); move16(); - olapBuffer[i + 6 * len4] = mult_r( extract_l( L_shr_r( fftBuffer[i + 6 * len4], 31 - fftBufferExp ) ), olapWin[len4 - 1 - i].v.im ); + olapBuffer[i + 6 * len4] = mult_r( round_fx_sat( L_shl_sat( fftBuffer[i + 6 * len4], fftBufferExp - 15 ) ), olapWin[len4 - 1 - i].v.im ); move16(); } -- GitLab