Bugfix related to noise scaling in the MMSE algorithm

The MMSE is computed using (H^H*H + N*I)^-1. While computing the MMSE
term H^H*H + N*I before the inverse, the term H^H*H is scaled using
shift (log2_max). However, the term N (noise) is not scaled. The fix scales the
noise term using the shift.
Signed-off-by: default avatarRakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org>
Fixes: 1b77adcb ("Segregate the LLR and channel compensation related common functions into different files")
parent 6f3efaf0
...@@ -2924,7 +2924,7 @@ uint8_t nr_mmse_2layers(c16_t **rxdataF_comp, ...@@ -2924,7 +2924,7 @@ uint8_t nr_mmse_2layers(c16_t **rxdataF_comp,
// Add noise_var such that: H^h * H + noise_var * I // Add noise_var such that: H^h * H + noise_var * I
if (noise_var != 0) { if (noise_var != 0) {
simde__m128i nvar_128i = simde_mm_set1_epi32(noise_var); simde__m128i nvar_128i = simde_mm_set1_epi32(noise_var >> shift);
simde__m128i *af_mf_00_128i = (simde__m128i *)af_mf_00; simde__m128i *af_mf_00_128i = (simde__m128i *)af_mf_00;
simde__m128i *af_mf_11_128i = (simde__m128i *)af_mf_11; simde__m128i *af_mf_11_128i = (simde__m128i *)af_mf_11;
for (int k = 0; k < 3 * nb_rb_0; k++) { for (int k = 0; k < 3 * nb_rb_0; k++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment