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.