diff --git a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c index 396c8d89f4..902a7bae02 100644 --- a/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c +++ b/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c @@ -1102,7 +1102,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], @@ -1133,7 +1133,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], @@ -1453,9 +1453,11 @@ 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 + 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)