10/26 update:
send DSR for msg5 scheduling is ok:
*validatePucch for all PUCCH formats to avoid time/freq-domain overlapping
*sendPucch(with sr=True) for both symbol-level period and slot-level period
*fillPucch for generic PUCCH resource mapping
*bugfix for Msg4 HARQ
2019/10/31 update:
*bugfix to intra-slot freq hopping of 2-symbols short pucch.
1, Different PUCCH formats
*all PUCCH formats support intra-slot frequency hopping
*multiple-slots PUCCH format 1/3/4 can be configured to use either inter-slot frequency hopping or intra-slot frequency hopping, but not both;
(1) if inter-slot FreqHop is enabled, even slots use startRb and odd slots use secondHopPrb, and slot numbering is started from 0 for the first PUCCH slots;
(2) if intra-slot FreqHop is enabled, hopping pattern(startRb for 1st hop and secondHopPrb for 2nd hop) keeps the same for each slot;
*for PUCCH format 1, PUCCH symbols and its DMRS symbols are as below:
*no DMRS for PUCCH format 0;
*FDM DMRS is defined for PUCCH format 2
*intra-slot frequency hopping can be configured for 2-symbols PUCCH format 0/2
*SR/HARQ/CSI multiplexing assumptions in current implementation:
(1)DSR may overlap with periodic CSI: use CSI resource to send DSR/CSI. This scenario may not exist.
(2)HARQ may overlap with periodic CSI: use HARQ resource to send HARQ/CSI, where HARQ pucch resource must be format 2/3/4.
(3)DSR may not overlap with HARQ
2, Generic PUCCH resource mapping procedure
if pucchFmt == 0:
if intraSlotFreqHop and numSymbs == 2:
#use both startRb for 1st hop and secondHopPrb for 2nd hop for resource mapping
else:
#use startRb for resource mapping
elif pucchFmt == 1:
if interSlotFreqHop:
for slot in range(sl, sl+self.nrPucchFmt134NumSlots):
if (slot - sl) % 2 == 0: #even slot
#use startRb for resource mapping
else:
#use secondHopPrb for resource mapping
else:
if intraSlotFreqHop:
for slot in range(sl, sl+self.nrPucchFmt134NumSlots):
#use startRb for 1st hop and secondHopPrb for 2nd hop for each slot for resource mapping
else:
for slot in range(sl, sl+self.nrPucchFmt134NumSlots):
#use startRb for resource mapping
else:
pass
3, Examples
#part of the configurations:
contents of ["pucchFmtCfg"]: {'numSlots': 'n2', 'interSlotFreqHop': 'disabled', 'addDmrs': 'true', 'simulAckCsi': 'true'}
contents of ["pucchRes0"]: {'resId': '0', 'format': 'format 0', 'resSetId': '0', 'startRb': '0', 'intraSlotFreqHop': 'enabled', 'secondHopPrb': '272', 'numRbs': '1', 'startSymb': '0', 'numSymbs': '2'}
contents of ["pucchRes1"]: {'resId': '1', 'format': 'format 1', 'resSetId': '0', 'startRb': '0', 'intraSlotFreqHop': 'enabled', 'secondHopPrb': '272', 'numRbs': '1', 'startSymb': '0', 'numSymbs': '4'}
contents of ["dsrRes0"]: {'resId': '0', 'pucchRes': '0', 'period': 'sl10', 'offset': '8'}
contents of ["dsrRes1"]: {'resId': '1', 'pucchRes': '1', 'period': 'sym6or7', 'offset': '0'}
Note 1: numSymbs of pucchRes0 should be 2.
PUCCH format 0 with intra-slot FreqHop enabled:
[5GNR SIM]UE send DSR @ [HSFN=0, SFN=4, Slot=7]
---->inside sendPucch(hsfn=0,sfn=4,slot=7,harq=False,sr=True,csi=False,pucchResSet="dedicated")
scaleTd = 2, scaleFd = 2
selecting DSR resource: 0
valid pucch region(hsfn=0,sfn=4,slot=8) with DSR period=sl10 and offset=8
Note 2: These two pictures below have been updated.
multiple-slots PUCCH format 1 with intra-slot FreqHop enabled:
[5GNR SIM]UE send DSR @ [HSFN=0, SFN=4, Slot=7]
---->inside sendPucch(hsfn=0,sfn=4,slot=7,harq=False,sr=True,csi=False,pucchResSet="dedicated")
scaleTd = 2, scaleFd = 2
selecting DSR resource: 1
invalid pucch region(hsfn=0,sfn=4,slot=7,l=0) with DSR period=sym6or7 and offset=0
invalid pucch region(hsfn=0,sfn=4,slot=7,l=7) with DSR period=sym6or7 and offset=0
valid pucch region(hsfn=0,sfn=4,slot=8,l=0) with DSR period=sym6or7 and offset=0
contents of pucchSymbs(w.r.t to firstSymb(=0) of PUCCH): [[1], [3]]
contents of dmrsSymbs(w.r.t to firstSymb(=0) of PUCCH): [[0], [2]]