Low PAPR Sequence Type 1
The procedure of the implementation of low PAPR sequences used by SRS and/or uplink control channels in 5G networks. The details of the generation of this sequence are given in section 6.3.2 of [3GPPTS38211LowPAPR] and some of sequences parameters are detailed in section 9.2 of [3GPPTS38213LowPAPR].
Note
Low PAPR Sequences are used as base sequence by reference signals transmitted by coverage constrained devices. The other alternative available is gold sequence which have excellent time correlation properties but have a very high PAPR which limit its usage for small form factor devices which can’t transmit high power.
When u
, alpha
, v
are scalar and lengthOfSequence
** is not passed:**
u = 3
alpha = np.pi/4
v = 0
delta = 0
m = 8
lowPAPR = LowPAPRSequenceType1(alpha, u, v)
seq = lowPAPR(m, delta)
print("******************************************************")
print(" sequence: "+str(seq.shape))
print("******************************************************")
************************************************** sequence: (1, 1, 1, 96) **************************************************
When u
, alpha
, v
are scalar and lengthOfSequence
** is passed:**
u = 28
alpha = 3*np.pi/8
v = 1
delta = 0
m = 8
lowPAPR = LowPAPRSequenceType1(alpha, u, v)
seq = lowPAPR(m, delta, lengthOfSequence=84)
print("******************************************************")
print(" sequence: "+str(seq.shape))
print("******************************************************")
************************************************** sequence: (1, 1, 1, 84) **************************************************
When u
, alpha
, v
are array and lengthOfSequence
** is not passed:**
u = np.array([3,8,11])
alpha = np.array([3*np.pi/4, np.pi/4, 2*np.pi/4, 5*np.pi/4])
v = 0
delta = 0
m = 32
lowPAPR = LowPAPRSequenceType1(alpha, u, v)
seq = lowPAPR(m, delta)
print("******************************************************")
print(" sequence: "+str(seq.shape))
print("******************************************************")
************************************************** sequence: (4, 1, 3, 384) **************************************************
When u
, alpha
, v
are array and lengthOfSequence
** is passed:**
u = np.array([3,8])
alpha = np.array([3*np.pi/4, 2*np.pi/4, 5*np.pi/4])
v = np.array([0,1,0,1])
delta = 0
m = 32
lowPAPR = LowPAPRSequenceType1(alpha, u, v)
seq = lowPAPR(m, delta, lengthOfSequence=131)
print("******************************************************")
print(" sequence: "+str(seq.shape))
print("******************************************************")
************************************************** sequence: (3, 4, 2, 131) **************************************************
API Documentation
- class toolkit5G.SequenceGeneration.LowPAPRSequenceType1(cyclicShift, groupNumber, baseSequenceNumber=0)[source]
- Parameters:
cyclicShift (int/float or NumPy array of int/float) – Defines the cyclic shift used for generation of sequence.
groupNumber (int or NumPy array of integer) – Defines the group number for sequence generation.
baseSequenceNumber (int or NumPy array of integer) – Defines the base sequence number. This parameter is relevant only if numRBs \(\times \frac{12}{2^\delta}\) >= 36.
- Input:
numRBs (int) – Defines number of Resource Blocks available for mapping
LowPAPRSequenceType1
.delta (int) – Defines resource scaling factor (\(\delta\)) for
LowPAPRSequenceType1
.lengthOfSequence (int) – Its an optional parameter. Define the length of sequence to be generated. It should either be >=36 otherwise must be a multiple of 6.
Note
If
lengthOfSequence
parameter is passed, thennumRBs
anddelta
will be ignored. In this case, you can pass any dummy values tonumRBs
anddelta
like numRBs = 0, delta = 0.- Output:
(\(N_c\), \(N_{\nu}\), \(N_u\), numRBs \(\times\) \(\frac{12}{2^\text{delta}}\)) – Return Low PAPR Sequence of Type-1 where
\(N_c\) is length of
cyclicShift
,\(N_{\nu}\) is length of
groupNumber
,\(N_u\) is length of
baseSequenceNumber
,numRBs \(\times\) \(\frac{12}{2^\text{delta}}\) define the length of generated sequence.
Note
If
lengthOfSequence
parameter is passed, then dimension of out sequence will be (\(N_c\), \(N_{\nu}\), \(N_u\),lengthOfSequence
)). In this case, the values ofnumRBs
anddelta
will be ignored.- Attributes:
lengthOfSequence (int) – Define the length of generated sequence.
- Raises:
ValueError – [Error-LowPAPRSequenceType1]: When ‘lengthOfSequence’ = “+str(self.lengthOfSequence)+” is less than 72, all the values of ‘baseSequenceNumber’ must be 0!
Exception – [Error-LowPAPRSequenceType1]: Invalid value for ‘lengthOfSequence’! Value of ‘lengthOfSequence’ = “+str(mZC)+”! Length of the Sequence can be either > 36 or from the set {6, 12, 18, 24}!
ValueError – [Error-LowPAPRSequenceType1]: ‘cyclicShift’ should always be positive!
ValueError – [Error-LowPAPRSequenceType1]: ‘cyclicShift’ should always be positive!
TypeError – [Error-LowPAPRSequenceType1]: ‘cyclicShift’ should be an scalar integer/float or numpy integer/float array
ValueError – [Error-LowPAPRSequenceType1]: ‘groupNumber’ should always be positive number less than 30!
ValueError – [Error-LowPAPRSequenceType1]: ‘groupNumber’ should always be positive number less than 30!
TypeError – [Error-LowPAPRSequenceType1]: ‘groupNumber’ should be an scalar integer/float or numpy integer/float array
ValueError – [Error-LowPAPRSequenceType1]: ‘baseSequenceNumber’ should always be positive!
ValueError – [Error-LowPAPRSequenceType1]: ‘baseSequenceNumber’ should always be positive!
TypeError – [Error-LowPAPRSequenceType1]: ‘baseSequenceNumber’ should be an scalar integer/float or numpy integer/float array
ValueError – [Error-LowPAPRSequenceType1]: ‘numRBs’ should always be positive number > 0!
TypeError – [Error-LowPAPRSequenceType1]: ‘numRBs’ should be an scalar integer/float or numpy integer/float array
ValueError – [Error-LowPAPRSequenceType1]: ‘delta’ should always be a positive number!
TypeError – [Error-LowPAPRSequenceType1]: ‘delta’ should be an scalar integer/float or numpy integer/float array
ValueError – [Error-LowPAPRSequenceType1]: ‘lengthOfSequence’ = numRBs*12/(2**delta) should always be either >= 36 or belong to the set {6,12,18,24}! Please chose the value of ‘numRBs’ and ‘delta’ accrodingly!
- property baseSequenceNumber
Defines Base Sequence Number. The parameter is denoted by \(\nu\) in section 5.2.2 of TS 38.211. It can be scalar or vector of integers.
- property cyclicShift
Defines Cyclic Shift. The parameter is denoted by \(\alpha\) in section 5.2.2 of TS 38.211. It can be scalar or vector of numbers.
- property delta
Defines resource scaling factor (\(\delta\)) for
LowPAPRSequenceType1
. It must be an integer.
- property groupNumber
Defines Group Number. The parameter is denoted by
u
in section 5.2.2 of TS 38.211. It can be scalar or vector of integers.
- property lengthOfSequence
Defines the length of the sequence. The parameter is either directly passed as an input or computed by numRBs \(\times\) \(\frac{12}{2^\delta}\). The details are listed in section 5.2.2 of TS 38.211. It can be scalar or vector of integers.
- property numRBs
Defines Number of Resource Blocks. The parameter is denoted by
m
in section 5.2.2 of TS 38.211. It can be scalar or vector of integers.
- 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.