Implementation notes on 'Msg3 PUSCH':
Note 1: 'msg3 pusch' is scheduled by RAR.
Note 2: 'msg3 pusch' use RA type1, can be configured in RACH-ConfigCommon to use 'transform precoding', and can be configured in RAR UL Grant to use 'frequency hopping'.
Note 3: 'frequency domain resource assignment' fields in RAR UL Grant:
*fixed to 14bits
*bitwidth of initial ul bwp: can < 14bits and can >=14bits
self.bitwidthType1IniUlBwp = math.ceil(math.log2(bwpSize * (bwpSize + 1) / 2))
self.bitwidthType1Msg3Pusch = max(14, self.bitwidthType1IniUlBwp)
*relation of 14bits-'freq alloc field' in rar ul grant, and bitwidth of riv(=bitwidth of initial ul bwp) as below:
When bitwidthType1IniUlBwp(denoted as n) > 14bits, (n-14) bits will be inserted into the 14bits-'freq alloc field' in rar ul grant, so that we have n bits RIV, and the (n-14)bits must be all '0'.
This means that, some L_RBs/RB_start combinations is not valid when n>14.
For example, assume msg3PuschTp=enabled, msg3PuschFreqHop=enabled, bwpSizeIniUlBwp=270(and n=16bits), RB_start=0, and L_RBs=160:
The 16bits RIV is: 0111011000011111, 2MSBs(='01') is for freq hop, next two bits(='11') is the inserted bits which is apperently not all '0'.
For this kind of invalid combination, you will get an Error message:
[2018-11-30 08:27:52]Error: Inserted bits(="11") must be all zeros! Please refer to 3GPP 38.213 vf30 Section 8.2 for details.
Note 4: when 'transform precoding' is enabled, the L_RBs must be of 2^x*3^y*5^z (with x/y/z>=0) pattern which is similar to LTE.
if self.nrRachMsg3TpComb.currentText() == 'enabled':
self.lrbsMsg3PuschTp = []
for x in range(math.ceil(math.log(bwpSize, 2))):
for y in range(math.ceil(math.log(bwpSize, 3))):
for z in range(math.ceil(math.log(bwpSize, 5))):
lrbs = 2 ** x * 3 ** y * 5 ** z
if lrbs <= bwpSize:
self.lrbsMsg3PuschTp.append(lrbs)
else:
break
#sort in ascending order
self.lrbsMsg3PuschTp.sort()