From 3e6f2db1241a94c7ff87a342aea7414cc0336005 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Thu, 3 Oct 2024 21:58:11 +0200 Subject: [PATCH 1/3] use ML receiver for 64 QAM UL-MIMO --- openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index e29e3e7b51..635bf2d87a 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -1339,7 +1339,7 @@ static void inner_rx(PHY_VARS_gNB *gNB, } if (nb_layer == 2) { - if (rel15_ul->qam_mod_order < 6) { + if (rel15_ul->qam_mod_order <= 6) { nr_ulsch_compute_ML_llr(pusch_vars, symbol, (c16_t*)&pusch_vars->rxdataF_comp[0][symbol * buffer_length], @@ -1370,7 +1370,7 @@ static void inner_rx(PHY_VARS_gNB *gNB, buffer_length); } } - if (nb_layer != 2 || rel15_ul->qam_mod_order >= 6) + if (nb_layer != 2 || rel15_ul->qam_mod_order > 6) for (int aatx = 0; aatx < nb_layer; aatx++) nr_ulsch_compute_llr((int32_t*)&pusch_vars->rxdataF_comp[aatx * nb_rx_ant][symbol * buffer_length], (int32_t*)rxF_ch_maga[aatx], @@ -1687,7 +1687,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, for (int aarx = 0; aarx < frame_parms->nb_antennas_rx; aarx++) avgs = cmax(avgs, avg[nl * frame_parms->nb_antennas_rx + aarx]); - if (rel15_ul->nrOfLayers == 2 && rel15_ul->qam_mod_order >= 6) + if (rel15_ul->nrOfLayers == 2 && rel15_ul->qam_mod_order > 6) pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) - 3; // for MMSE else pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) + 1 + log2_approx(frame_parms->nb_antennas_rx >> 1); From e0c0df38ea207cd71436cc528aae2a5bc2432f4e Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Mon, 28 Oct 2024 10:50:53 +0100 Subject: [PATCH 2/3] adjustment of log2_maxh for 2-layer UL MIMO --- openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index 635bf2d87a..3e7087a83e 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -1690,7 +1690,7 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, if (rel15_ul->nrOfLayers == 2 && rel15_ul->qam_mod_order > 6) pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) - 3; // for MMSE else - pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) + 1 + log2_approx(frame_parms->nb_antennas_rx >> 1); + pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) - 2 + log2_approx(frame_parms->nb_antennas_rx >> 1); if (pusch_vars->log2_maxh < 0) pusch_vars->log2_maxh = 0; From 026190e0d19bc91fdeda11ac35804a7932cef3a0 Mon Sep 17 00:00:00 2001 From: Raymond Knopp Date: Mon, 28 Oct 2024 16:55:06 +0100 Subject: [PATCH 3/3] nr_ulsch log2_maxh case for single-layer --- openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index 3e7087a83e..ec8bc42fce 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -1689,8 +1689,10 @@ int nr_rx_pusch_tp(PHY_VARS_gNB *gNB, if (rel15_ul->nrOfLayers == 2 && rel15_ul->qam_mod_order > 6) pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) - 3; // for MMSE - else + else if (rel15_ul->nrOfLayers == 2) pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) - 2 + log2_approx(frame_parms->nb_antennas_rx >> 1); + else + pusch_vars->log2_maxh = (log2_approx(avgs) >> 1) + 1 + log2_approx(frame_parms->nb_antennas_rx >> 1); if (pusch_vars->log2_maxh < 0) pusch_vars->log2_maxh = 0;