PUCCH Format-1 Resource Mapping
- In this example,
interlacedTransmission
- Interlaced Transmission is disabledpucch_ResourceCommon
- Common resource configurationintraSlotFreqHopping
- Disabling Intra Slot Frequency Hoppingpucch_GroupHopping
- Disabling Group Hopping
pucch_ResourceCommon = True #Selecting the resource set
interlacedTransmission = True #Enabling/Disabling the Interlaced Transmission
intraSlotFreqHopping = False #Enabling/Disabling the Intra Slot Frequency Hopping
slotNumber = 9 #Slot Number
nID = 80 #Hopping ID
pucch_GroupHopping = 'Disable' #Enabling/Disabling the Group or/and Sequence Hopping
m_CS = np.array([0]) #Cyclic Shift Offset based on the information content
initialCycShift = None #Initial Cyclic Shift
numofSymbols = None #Number of Symbols
symbolIndex_start = None #Starting Symbol Index
indexPUCCH = 3 #Index of the resource set, if Common resource configuration is enabled
numInterlacedRBs = 10 #Number of Interlaced Resource Blocks
timedomainOCC = 0 #Orthogonal Cover code Index
startingPRB = None #Index of Starting Physical Resource Block
secondHopPRB = None #Index of Starting Physical Resource Block, if Intra slot Hopping is enabled
numOfInterlaces = 1 #Number of Interlaces
interlaceIndex_0 = 9 #Index of first Interlace
interlaceIndex_1 = None #Index of second Interlace
if interlacedTransmission == True: #if Interlaced Transmission is enabled
nHop = 0 # frequency hopping is disabled
Format1_Sequence = np.zeros((numBatches, numInterlacedRBs, 12)).astype(complex)
Format1_SeqGenobj = PUCCHFormat1Sequence(pucch_ResourceCommon, intraSlotFreqHopping, interlacedTransmission) #PUCCH Format 1 Sequence Generation Object
Format1_Seq = Format1_SeqGenobj(m_CS, nID, slotNumber, nHop, pucch_GroupHopping, symb, symbolIndex_start, numofSymbols, initialCycShift, indexPUCCH, numInterlacedRBs) #Generates Format 1 sequence
Sequence = Format1_Seq
else: #if Interlaced Transmission is enabled
hoppingRefVar = 1 if intraSlotFreqHopping == False else 2
Format1_Sequence = np.zeros((numBatches, 1, 12 * hoppingRefVar)).astype(complex) # number of hops = 2 (0, 1)---> Specific sequence based on group hopping
nHop = 0 # if frequency hopping is enabled/disabled, first hop frequency hopping index if enabled
Format1_SeqGenobj = PUCCHFormat1Sequence(pucch_ResourceCommon, intraSlotFreqHopping, interlacedTransmission) #PUCCH Format 1 Sequence Generation Object
Format1_Seq = Format1_SeqGenobj(m_CS, nID, slotNumber, nHop, pucch_GroupHopping, symb, symbolIndex_start, numofSymbols, initialCycShift, indexPUCCH, numInterlacedRBs) #Generates Format 1 sequence
Format1_Sequence[..., 0:12] = Format1_Seq
if intraSlotFreqHopping == True:
nHop = 1 # if frequency hopping is enabled, second hop frequency hopping index
Format1_SeqGenobj = PUCCHFormat1Sequence(pucch_ResourceCommon, intraSlotFreqHopping, interlacedTransmission) #PUCCH Format 1 Sequence Generation Object
Format1_Seq = Format1_SeqGenobj(m_CS, nID, slotNumber, nHop, pucch_GroupHopping, symb, symbolIndex_start, numofSymbols, initialCycShift, indexPUCCH, numInterlacedRBs) #Generates Format 1 sequence
Format1_Sequence[..., 12:] = Format1_Seq
spreadingObj = SpreadingFormat1(pucch_ResourceCommon, intraSlotFreqHopping) #Spreading object
spreadedSeq = spreadingObj(timedomainOCC, Format1_Sequence, symbolIndex_start, numofSymbols, indexPUCCH) #Spreads along the allocated resource elements
rmObj = ResourceMapperFormat1(pucch_ResourceCommon, intraSlotFreqHopping, interlacedTransmission) #Resource Mapping Object
rmOp = rmObj(spreadedSeq, numofSymbols, symbolIndex_start, startingPRB, secondHopPRB, indexPUCCH, numInterlacedRBs, numOfInterlaces, interlaceIndex_0, interlaceIndex_1) # Maps spreaded sequence onto the resource elements
- class toolkit5G.ResourceMapping.ResourceMapperFormat1(pucch_ResourceCommon=False, intraSlotFreqHopping=False, interlacedTransmission=False, seqLength=12, numRBs=1, beta_PUCCH1=1)[source]
This maps the information carried by the PUCCH Format 1 to the resource elements allocated.
The sequence generated is multiplied with the amplitude scaling factor in order to conform to the transmit power.
Considering 1 Bandwidth Part consisting of 275 Physical Resource Blocks.
The maximum number of Physical Resource Blocks(PRBs) allocated is 1.
The maximum number of symbols allocated is 2.
If PUCCH Format 1 is used prior to the allocation of dedicated PUCCH resource, it avail the resource information from the common resource configuration provided by the System Information Block 1 based on the index provided.
In case of Interlaced Transmission, the number of Interlaced Resource Blocks that can be allocated can be either 10 or 11 if PUCCH Format 1 uses dedicated resource set for resource allocation. Else, the number of Interlaced Resource Blocks that can be allocated can be 10.
In case of Interlaced Transmission, based on number of interlaces, index of first interlace and index of second interlace is provided.
- Parameters:
intraSlotFreqHopping (bool) – The parameter ‘intraSlotFreqHopping’ indicates whether the Intra Slot Frequency Hopping is enabled/disabled. It is always disabled in case of Interlaced transmission. By default it is disabled
interlacedTransmission (bool) – The parameter ‘interlacedTransmission’ indicates whether Interlaced based transmission is either enabled or disabled. By default it is disabled
pucch_ResourceCommon (bool) – The parameter ‘pucch_ResourceCommon’ indicates whether PUCCH Format 0 uses common resource configuration or dedicated resource set for resource allocation. By default it is set that PUCCH Format 0 is used after dedicated resource allocation.
numRBs (int) – The parameter ‘numRBs’ is the number of PRBs allocated and it is initialised with 1.
maxNumPRBs (int) – This parameter indicates maximum number of Physical Resource Blocks considered within a Bandwidth Part. It is initialised with 275, considering 275 Physical Resource Blocks within a BandwidthPart. It takes the positive scalar or numpy integer
seqLength (int) – This parameter indicates the length of the sequence generated. It is initialised with 12 as the length of the sequence generated tends to be 12. It takes a positive scalar or numpy integer
beta_PUCCH1 (int) – This parameter is the amplitude scaling factor in order to conform to the transmitting power. It is initialised with 1. It takes a positive scalar or numpy integer.
- Input:
inputSeq (numpy ndarray, np.complex) – Array of dimension, […, \(\text{N}_\text{SF}\) *
numRBs
/ \(\text{N}_\text{IRB}\) *seqLength
]where , \(\text{N}_\text{SF}\) is the spreading factor. If interlaced transmission is enabled, number of \(\text{N}_\text{IRB}\) sequences are generated where \(\text{N}_\text{IRB}\) is number of interlaced resource blocks allocated. Else, number of
numRBs
sequences are generated.numberOfSymb (int) – The parameter ‘numberOfSymb’ is the number of Symbols allocated. Maximum of 2 symbols per slot can be allocated. It takes only positive scalar or numpy integer.It can be either provided by dedicated resource set or common resource configuration and so it is initialised with None
start_SymbIndex (int) – The parameter ‘symbolIndex_start’ indicates the starting symbol index. It can take a integer. Taking into consideration that maximum of 14 symbols within a slot, it can take values between 0 and 13.It can be either provided by dedicated resource set or common resource configuration and so it is initialised with None
indexPUCCH (int) – The parameter ‘indexPUCCH’ is the resource index to indicate the resource in case of resource allocation by common resource configuration.It can be either provided by dedicated resource set or common resource configuration and so it is initialised with None
numInterlacedRBs (int) – The parameter ‘numInterlacedRBs’ is the Number of Interlaced Resource Blocks. It can take positive integer value.It can be either provided by dedicated resource set or common resource configuration and so it is initialised with None
startingPRB (int) – The parameter ‘startingPRB’ is the index of First Physical Resource Block, if Interlace transmission is not enabled. It takes a scalar or numpy integer
secondHopPRB (int) – The parameter ‘secondHopPRB’ is the index of First Physical Resource Block in case of IntraSlot Frequency Hopping and , if Interlace transmission is not enabled. It takes a scalar or numpy integer
interlaceIndex_0 (int) – The parameter ‘interlaceIndex_0’ is the first interlace index in case of Interlace transmission. It takes a scalar or numpy integer
interlaceIndex_1 (int) – The parameter ‘interlaceIndex_1’ is the second interlace index in case of Interlace transmission. It takes a scalar or numpy integer
numOfInterlaces (int) – The parameter ‘numOfInterlaces’ indicates the number of interlaces in case of Interlace transmission. It takes a scalar or numpy integer
- Output:
numpy ndarray, np.complex – Array of dimension, […, Number of Subcarriers (12) *
maxNumPRBs
, Number of Symbols within a slot(14)]- Raises:
TypeError –
If
beta_PUCCH1
is not an integerIf
startingPRB
is not an integerIf
secondHopPRB
is not an integerIf
seqLength
is not an integerIf
maxNumPRBs
is not an integerIf
numOfInterlaces
is not an integerIf
interlaceIndex_0
is not an integerIf
interlaceIndex_1
is not an integerIf
numRBs
is not a integer typeIf
numberOfSymb
is not of type integerIf
symbolIndex_start
is not a scalar or numpy integerIf
numInterlacedRBs
is not a scalar or numpy integerIf
indexPUCCH
is not of type integerValueError
Invalid dimension of the
inputSeq
PUCCH Format1 SequenceIf
beta_PUCCH1
is not a positive integerIf
startingPRB
is not a non negative integerIf
seqLength
is not a positive valueIf
secondHopPRB
is not a non negative integerIf
maxNumPRBs
is not between 0 and 275If
numOfInterlaces
is not a positive valueIf
interlaceIndex_0
is not between 0 and 11If
interlaceIndex_1
is not between 0 and 11If
numRBs
is not equal to 1If
numberOfSymb
is not between 1 and 14. Also, ifnumberOfSymb
plusstart_SymbIndex
> 14If
start_SymbIndex
is not between 0 and 13If
numInterlacedRBs
is not equal to 10 or 11If
indexPUCCH
is not between 3 and 15
- property indexPUCCH
This parameter is used to select the resource from the common resource configuration provided by SIB1
- property interlaceIndex_0
Index of first interlace, in case of Interlaced Transmission
- property interlaceIndex_1
Index of second interlace, in case of Interlaced Transmission
- property maxNumPRBs
Number of PRBs within a Bandwidth Part
- property numInterlacedRBs
Number of Interlaced Resource Blocks allocated
- property numOfInterlaces
Number of Interlaces, in case of Interlaced Transmission
- property numRBs
Number of Physical Resource Blocks allocated
- property numberOfSymb
Number of Symbols allocated. Maximum of 2 symbols can be allocated.
- property offset
PRB offset
- property rg_Size
Size of Bandwidth Part (BWP size)
- property secondHopPRB
Index of first PRB in case of IntraSlotHopping is enabled. Takes a positive integer
- property seqLength
Sequence Length of the generated PUCCH Format1 sequence
- property start_SymbIndex
Starting Symbol Index within a slot consisting of 14 OFDM symbols
- property startingPRB
Index of first PRB. Takes a positive integer
- References:
- [3GPPTS38211_RMFormat1]
(3GPP TS 38.211 version 17.1.0 Release 17) 5G;NR;Physical channels and modulation ‘6.3.2.4 PUCCH Format 1’
[3GPPTS38213_RMFormat1](3GPP TS 38.213 version 16.5.0 Release 16) 5G;NR;Physical layer procedures for control ‘ 9.2.1 PUCCH Resource Sets’