PUCCH Format-1 Resource Mapping

In this example,
  • interlacedTransmission - Interlaced Transmission is disabled

  • pucch_ResourceCommon - Common resource configuration

  • intraSlotFreqHopping - Disabling Intra Slot Frequency Hopping

  • pucch_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 integer

If startingPRB is not an integer

If secondHopPRB is not an integer

If seqLength is not an integer

If maxNumPRBs is not an integer

If numOfInterlaces is not an integer

If interlaceIndex_0 is not an integer

If interlaceIndex_1 is not an integer

If numRBs is not a integer type

If numberOfSymb is not of type integer

If symbolIndex_start is not a scalar or numpy integer

If numInterlacedRBs is not a scalar or numpy integer

If indexPUCCH is not of type integer

ValueError

Invalid dimension of the inputSeq PUCCH Format1 Sequence

If beta_PUCCH1 is not a positive integer

If startingPRB is not a non negative integer

If seqLength is not a positive value

If secondHopPRB is not a non negative integer

If maxNumPRBs is not between 0 and 275

If numOfInterlaces is not a positive value

If interlaceIndex_0 is not between 0 and 11

If interlaceIndex_1 is not between 0 and 11

If numRBs is not equal to 1

If numberOfSymb is not between 1 and 14. Also, if numberOfSymb plus start_SymbIndex > 14

If start_SymbIndex is not between 0 and 13

If numInterlacedRBs is not equal to 10 or 11

If 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’