Low PAPR Sequence Type 1

The following example is provided generating the Low PAPR Sequence Type 1. The procedure of the implementation of low PAPR sequence are given in section 6.3.2 of [3GPPTS38211LowPAPR]. The details of parameter used for low PAPR sequence generation of provided in section 9.2 of [3GPPTS38213LowPAPR].

m            = 1  # Number of Physical Resource Blocks allocated
groupNumber  = 12 # Group Number
seqNumber    = 0  # Sequence Number
cyclicShift  = np.array([[3.14159265 5.75958653 2.0943951  4.71238898 1.04719755 3.66519143 0.  2.61799388 5.23598776 1.57079633 4.1887902 ]]) #Cyclic Shift

Object = LowPAPRSeqType1()(m, groupNumber, seqNumber, cyclicShift)
class toolkit5G.SequenceGeneration.LowPAPRSeqType1(delta=0)[source]

This generates the Low PAPR Sequence of Type 1 of a base sequence, provided Cyclic shift and Group number

Parameters:

delta (int) – This parameter should be a positive scalar or numpy integer. It is initialised with ‘0’

Raises:
  • TypeError – Passing arguments with invalid data type

  • ValueError – Passing arguments with invalid value.

Output:
  • numpy ndarray

  • Dimension (Number of UE’s, Number of Interlaced Resource Blocks, if interlaced transmission is enabled/1, Sequence Length)

property cyclicShift

Cyclic Shift.

Acceptable data type is scalar or numpy integer/float.

property delta

Delta.

Acceptable data type is scalar or numpy integer.

property groupNumber

Group Number.

Acceptable data type is scalar or numpy integer.

It can take any values between 0 and 29.

property m

Number of Physical Resource Blocks allocated.

Acceptable Data type is scalar or numpy integer.

It can take positive integer values.

property seqNumber

Sequence Number.

Acceptable data type is scalar or numpy integer.

It can take either 0 or 1.

Cyclic Shift Hopping

The Information content is varied for different users. Also, the sequence generated is Interlace Resource Block dependent. And so, based on batching and enablement of Interlaced Transmission the cyclic shift(s) is/are generated.

The following example is provided for enabling the Interlaced Transmission

numBatches             = 5 #Number of User Equipments
interlacedTransmission = True #Enabling/Disabling Interlaced Transmission
numofSymbols           = 4 #Number of Symbols
symbolIndex_start      = 5 #Starting Symbol Index
symbolNum              = 0 #Symbol Number
initialCycShift        = 8 #Initial Cyclic Shift
slotNumber             = 10 #Slot Number
nID                    = 257 #Hopping ID
m_CS                   = np.array([6 1 7 3 4]) #Cyclic Shift Offset based on information content
numInterlacedRBs       = 11 #Number of Interlaced Resource Blocks

Object = CyclicShiftHopping(interlacedTransmission) #CyclicShiftHopping Object
Output = Object(initialCycShift, m_CS, symbolIndex_start, nID, slotNumber, numInterlacedRBs, symbolNum) #generates array of cyclic shift(s)

In case of disabling the Interlaced Transmission

numBatches             = 7 #Number of User Equipments
interlacedTransmission = False #Enabling/Disabling Interlaced Transmission
numofSymbols           = 13 #Number of Symbols
symbolIndex_start      = 0 #Starting Symbol Index
symbolNum              = 3 #Symbol Number
initialCycShift        = 8 #Initial Cyclic Shift
slotNumber             = 2 #Slot Number
nID                    = 387 #Hopping ID
m_CS                   = np.array([9 9 4 0 7 9 4]) #Cyclic Shift Offset based on information content
numInterlacedRBs       = None #Number of Interlaced Resource Blocks

Object = CyclicShiftHopping(interlacedTransmission) #CyclicShiftHopping Object
Output = Object(initialCycShift, m_CS, symbolIndex_start, nID, slotNumber, numInterlacedRBs, symbolNum) #generates array of cyclic shift(s)
class toolkit5G.SequenceGeneration.CyclicShiftHopping(interlacedTransmission=False, numSymbPerSlot=14, maxValSlotNumber=10, maxValSymbolNum=13)[source]

This generates the cyclic shift as a function of symbol number and slot number.

This class uses PN Sequence.

Parameters:
  • interlacedTransmission (bool) – This parameter indicates whether the interlaced based transmission is enabled or disabled.

  • numSymbPerSlot (int) – The parameter ‘numSymbPerSlot’ is the number of symbols per slot in accordance with 5G. This is initialised with positive integer value 14.

  • maxValSlotNumber (int) – The ‘maxValSlotNumber’ is the maximum number of slots considered which is initialised to be 10. This should be a positive integer.

  • maxValSymbolNum (int) – The ‘maxValSymbolNum’ is the maximum value of Symbol Number. As there are 14 symbols per slot considered, the symbol number can take any value between 0 and 13. This is initialised with the integer 13. This should be a integer.

Output:
  • numpy ndarry

  • An Array of Cyclic Shift(s) is/are generated of dimension (number of UE’s considered, number of Interlaced Resource Blocks, if considered/1).)

Raises:
  • TypeError – Passing arguments with invalid data type

  • ValueError – Passing arguments with invalid value.

property initialCS

Initial Cyclic Shift.

Acceptable data type is scalar integer or numpy integer.

It can take the values between 0 and 11.

property m_CS

Cyclic shift offset based on the information.

Acceptable data type is numpy integer.

It can take values ‘0’, ‘1’, ‘3’, ‘4’, ‘6’, ‘7’, ‘9’, ‘10’.

property nID

Hopping ID.

Acceptable data type is scalar or numpy integer.

It takes the value between 0 and 1023.

property numInterlacedRBs

Number of Interlaced Resource Blocks.

Acceptable data type is positive scalar or numpy integer.

property slotNumber

Slot Number.

Acceptable data type is scalar integer or numpy integer.

It takes the value between 0 and 10.

property symbolIndex_start

Starting Symbol Index.

Acceptable data type is scalar or numpy integer.

Considering 14 symbols per slot, it can take any value between 0 and 13.

property symbolNum

Symbol Number in accordance with the number of symbols allocated.

Acceptable data type is scalar or numpy integer.

Considering 14 symbols per slot, it can take any value between 0 and 13. Also, accordance with the starting symbol index.

Group And Sequence Hopping

The group hopping and Sequence hopping can be enabled/disabled

The example below considers enabling both the group and sequence hopping and generates group and sequence number accordingly.

intraSlotFreqHopping = False #Enabling/Disabling Intra Slot Frequency Hopping
slotNumber           = 7 # Slot Number
nHop                 = 0 # Frequency Hopping Index
nID                  = 373 # Hopping ID
pucch_GroupHopping   = 'Enable' #Enabling/Disabling Group and/or Sequence Hopping

Object = GroupNumber(intraSlotFreqHopping) #Object
Output = Object(nID, nHop, slotNumber, pucch_GroupHopping) #Generates the Group number and sequence number

The example below considers neither group and sequence hopping and generates group and sequence number accordingly.

intraSlotFreqHopping = True #Enabling/Disabling Intra Slot Frequency Hopping
slotNumber           = 7 # Slot Number
nHop                 = 0 # Frequency Hopping Index
nID                  = 969 # Hopping ID
pucch_GroupHopping   = 'neither' #Enabling/Disabling Group and/or Sequence Hopping

Object = GroupNumber(intraSlotFreqHopping) #Object
Output = Object(nID, nHop, slotNumber, pucch_GroupHopping) #Generates the Group number and sequence number

The example below considers disabling the group and sequence hopping and generates group and sequence number accordingly.

intraSlotFreqHopping = False #Enabling/Disabling Intra Slot Frequency Hopping
slotNumber           = 3 # Slot Number
nHop                 = 0 # Frequency Hopping Index
nID                  = 221 # Hopping ID
pucch_GroupHopping   = 'Disable' #Enabling/Disabling Group and/or Sequence Hopping

Object = GroupNumber(intraSlotFreqHopping) #Object
Output = Object(nID, nHop, slotNumber, pucch_GroupHopping) #Generates the Group number and sequence number
class toolkit5G.SequenceGeneration.GroupNumber(intraSlotFreqHopping, maxValSlotNumber=10, maxValnHop=1)[source]

This generates the Group number and Sequence Number of type integer in the set of 30 groups containing two sequences.

This class uses PN Sequence.

Parameters:
  • intraSlotFreqHopping (bool) – Indicates whether the ‘intraSlotFreqHopping’ is enabled or disabled

  • maxValSlotNumber (int) – The ‘maxValSlotNumber’ is the maximum number of slots considered which is initialised to be 10. This should be a positive integer

  • maxValnHop (int) – The ‘maxValnHop’ is the maximum value of frequency hopping index. Considering maximum of two hops, the frequency hopping index can takes values 0 or 1. And so, the maximum value of frequency hopping index is initialised to be 1.This should be a positive integer

Output:
  • integer

  • Tuple consisting of Group Number and Sequence Number of type integer respectively.

Raises:
  • TypeError – Passing arguments with invalid data type

  • ValueError – Passing arguments with invalid value.

property nHop

Frequency Hopping Index.

Accepetable data type is integer or numpy array containing an integer.

It takes the value based on the number of hops

property nID

Hopping ID.

Accepetable data type is integer or numpy array containing an integer.

It takes the value between 0 and 1023

property pucch_GroupHopping

Group Hopping and Sequence Hopping Information.

Acceptable data type is string or numpy array containing a string.

Valid Hopping Information is n(N)either, e(E)nable, d(D)isable.

property slotNumber

Slot Number.

Accepetable data type is integer or numpy array containing an integer.

It takes the value between 0 and 10

References:
[3GPPTS38211LowPAPR]

(3GPP TS 38.211 version 17.1.0 Release 17) 5G;NR;Physical channels and modulation.

[3GPPTS38213LowPAPR]

(3GPP TS 38.213 version 16.5.0 Release 16) 5G;NR;Physical layer procedures for control.