PUCCH Format-1 Spreading

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

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
class toolkit5G.ResourceMapping.SpreadingFormat1(pucch_ResourceCommon=False, intraSlotFreqHopping=False, numRBs=1, seqLength=12)[source]

This class allows the sequence generated to spread onto the resource elements

The sequence is multiplied by the sequence of length 12. The spreading operation uses an Orthogonal Cover Code (OCC) to generate multiple sequences from the original sequence.

The spreading factors ranges from 1 to 7.

The number of sequences generated by the spreading operation is equal to spreading factor.

The spreading factor is equal to the multiplexing capacity.

Parameters:
  • intraSlotFreqHopping (bool) – The parameter ‘intraSlotFreqHopping’ indicates whether the Intra Slot Frequency Hopping is enabled/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

  • 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

Input:
  • inputSeq (: numpy ndarray, np.complex) – Array of size, […, numInterlacedRBs/numRBs, 12 * \(\text{z}\)]

    If interlaced based transmission is enabled, numInterlacedRBs number of sequences are generated. Else, numRBs number of sequences are generated. 12 corresponds to the sequence length. And \(\text{z}\) can be 1 or 2 based on disabling or enabling intraslot frequency hopping respectively.

  • timedomainOCC (int) – This parameter is the index of Othogonal Cover Code. It takes scalar or numpy integer. It takes values between 0 and 6.

  • 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

  • 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

  • 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

Output:

numpy ndarray, np.complex – Array of dimension, […, SpreadingFactor * numRBs/ \(\text{N}_\text{IRB}\) * seqLength]

If interlaced transmission is happening, 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.

Raises:

TypeError

If seqLength is not an integer

If numRBs is not a integer type

If indexPUCCH is not of type integer

If timedomainOCC is not an integer

ValueError

If seqLength is not a positive value

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 indexPUCCH is not between 3 and 15

If timedomainOCC is not between 0 and 6

property indexPUCCH

This parameter is used to select the resource from the common resource configuration provided by SIB1.

property numRBs

Number of Physical Resource Blocks allocated

property numberOfSymb

Number of OFDM Symbols allocated. 4 to 14 symbols can be allocated.

property start_SymbIndex

Starting Symbol Index within the slot.

property timedomainOCC

Orthogonal Cover Code. Takes any value between 0 and 6.

References:
[3GPPTS38211_SFormat1]

(3GPP TS 38.211 version 17.1.0 Release 17) 5G;NR;Physical channels and modulation ‘6.3.2.4 PUCCH Format 1’

[3GPPTS38213_SFormat1]

(3GPP TS 38.213 version 16.5.0 Release 16) 5G;NR;Physical layer procedures for control ‘ 9.2.1 PUCCH Resource Sets’