OAI nrUE RV
Hi,
I am working in implementing new HARQ algorithm related to URLLC in OAI nrUE and gNB.
I would like to mention something regarding the RV.
In OAI nrUE code (develop branch) we have:
switch(rv){
case 0:
dl_harq->round = 0;
...
case 1:
dl_harq->round = 2;
...
case 2:
dl_harq->round = 1;
...
case 3:
dl_harq->round = 3;
I guess that cases rv 1 and rv 3 are wrong, rv 1 should be round 3 and rv 3 should be round 1.
To be more precise, it is a modulo 4 because RV is supposed to be a circular buffer to allow more than 4 harq rounds. This should be enabled in very few places, in gNB_scheduler_dlsch.c for instance:
It currently is something like
pdsch_pdu_rel15->rvIndex[0] = nr_rv_round_map[harq->round];
but it should be
pdsch_pdu_rel15->rvIndex[0] = nr_rv_round_map[(harq->round)%4];
At UE side if there is more than 4 DL harq round then in some cases the UE has no way to know what was the original round number that led to received RV. For example when the first 4 DCIs have not been well received by UE. And I think that it actually doesn't need this information, it just needs RV in order to well decode the DLSCH associated with DCI that contains the RV information.
In my working branch I have done those changes (alongside with modification to support our algorithm), and it can go up to at least 11 rounds (I didn't need to test more). Without the circular RV changes it cannot go above 4 (0 to 3) because the RV sent in DCI is out of the bounds of the rv array.
Any thought on those matters? Thank you