Skip to content

gNB Rx - Unscrambler bug if number of symbols per thread is larger than 1

Issue: gNB Rx - Unscrambler bug if number of symbols per thread is larger than 1

  • By default, the number of symbols per thread is one:
    • gNB->num_pusch_symbols_per_thread = 1; --> File: openairinterface5g/executables/nr-gnb.c
  • If the user changes the number of symbols per thread to any number larger than one the BLER will be 100%

Reason:

  • The scrambling offset is given for every thread for the first symbol only as:
    • File: …/openairinterface5g/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
    • Line: 1680 --> rdata->s   = &s[pusch_vars->llr_offset[symbol]*rel15_ul->nrOfLayers];
  • In the inner receiver, the scrambler offset is called only for the first symbol, although we may set the number of symbols to be larger than 1 per thread:
    • File. /home/agaber/workarea/oai/openairinterface5g/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
    • Line 1441: llr16[i] = llr_ptr[i] * rdata->s[i];

Solution:

  • Step1: Give the scrambler offset of the first Symbol to every thread
    • File: …/openairinterface5g/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
    • Line: 1680 --> rdata->s   = &s[0]; //pusch_vars->llr_offset[symbol]*rel15_ul->nrOfLayers];
  • Step2: Adjust the scrambler offset based on Symbol index inside every called thread.
    • File. .../openairinterface5g/openair1/PHY/NR_TRANSPORT/nr_ulsch_demodulation.c
    • Lines: 1438 --> 1442
  // unscrambling
       for (int i = 0; i < (nb_re_pusch * rel15_ul->qam_mod_order * rel15_ul->nrOfLayers); i++) {
         llr16[i] = llr_ptr[i] * rdata->s[pusch_vars->llr_offset[symbol]*rel15_ul->nrOfLayers + i ];}
     }

Test

  • The soluation has been tested and validated.
Edited by Robert Schmidt