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