PUCCH Format-1 De-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
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

rDemObj = ResourceDeMapperFormat1(pucch_ResourceCommon, intraSlotFreqHopping, interlacedTransmission) #Resource De-mapping Object
rDemOp  = rDemObj(rmOp, numofSymbols, symbolIndex_start, startingPRB, secondHopPRB, indexPUCCH, numInterlacedRBs, numOfInterlaces, interlaceIndex_0, interlaceIndex_1) #De Maps the sequence from the resource elements allocated

deSpreadingObj         = DeSpreadingFormat1(pucch_ResourceCommon, intraSlotFreqHopping) #De-Spreading Object
despreadedSeq          = deSpreadingObj(rDemOp, timedomainOCC, symbolIndex_start, numofSymbols, indexPUCCH) #Despreads the spreaded sequence
class toolkit5G.ResourceMapping.DeSpreadingFormat1(pucch_ResourceCommon=False, intraSlotFreqHopping=False, seqLength=12, numOfHops=2, maxNumPRBs=275)[source]

This class despreads the spreaded sequence

The spreaded sequence is despreaded by multiplying with the orthogonal sequence

The spreading factors ranges from 1 to 7

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

  • numOfHops (int) – The parameter ‘numOfHops’ is the maximum number of intra slot hopping. It is initilised with 2.

  • 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

  • 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

Input:
  • numpy ndarray

  • complex

  • Dimension (Number of Batches, Spreading factor * Number of Interlaced Resource Blocks, if interlaced based transmission is enabled/Number of PRBs allocated * Sequence Length)

Output:
  • numpy ndarray

  • complex

  • Dimension (Number of Batches, Number of Interlaced Resource Blocks, if interlaced based transmission is enabled/Number of Physical Resource Blocks allocated * Sequence Length)

Raises:
  • TypeError – Passing arguments with invalid data type

  • ValueError – Passing arguments with invalid value

property indexPUCCH

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

Acceptable data type is scalar or numpy integer.

It can take values between 0 and 15. But UE does not expect to indicate 15.

property maxNumPRBs

Maximum number of PRBs within a Bandwidth Part.

Acceptable data type is a positive scalar or numpy integer.

property numberOfSymb

Number of Symbols.

Acceptable data type is scalar integer or numpy integer.

It can take any value between 1 and 2, based on the starting symbol index.

property start_SymbIndex

Starting Symbol Index.

Acceptable data type is scalar integer or numpy integer.

It can take any value between 0 and 13

property timedomainOCC

Orthogonal Cover Code.

Acceptable data type is scalar integer or numpy integer.

It can take any value between 0 and 6

References:
[3GPPTS38211_DSFormat1]

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

[3GPPTS38213_DSFormat1]

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