Positioning Reference Sequence (PRS)

The positioning reference signal (PRS) is used in 5G-NR systems to estimate the location of the UE in downlink (DL). The reference signal is generated using DL PRS ID (dlPRSSequenceID), slot-index (slotNumber) and, OFDM symbol index (ofdmSymbolNumber). The details of PRS generation is provided in Section 7.4.1.7 of [3GPPTS38211_PRS].

Important

  • The seed (\(c_{init}\)) value is computed using dlPRSSequenceID, slotNumber and ofdmSymbolNumber.

If slotNumber and symbolNumber are scalar:

dlPRSSequenceID  = 23   # DL PRS ID
slotNumber       = 5    # slot Index where PRS is loaded
ofdmSymbolNumber = 4    # ofdm symbol Index
prsLength        = 600  # PRS length per ofdm symbol Index

prsObject        = PRS(dlPRSSequenceID, slotNumber, ofdmSymbolNumber)
prsSequence      = prsObject(prsLength)

If slotNumber is scalar and symbolNumber is NumPy Array:

dlPRSSequenceID  = 1075                  # DL PRS ID
slotNumber       = 5                     # slot Index where PRS is loaded
ofdmSymbolNumber = np.array([2,3,4,5,6]) # ofdm symbol Index
prsLength        = 600                   # PRS length per ofdm symbol Index

prsObject        = PRS(dlPRSSequenceID, slotNumber, ofdmSymbolNumber)
prsSequence      = prsObject(prsLength)

If slotNumber and symbolNumber are NumPy Array:

dlPRSSequenceID  = 187                 # DL PRS ID
slotNumber       = np.array([0,0,1,1]) # slot Index where PRS is loaded
ofdmSymbolNumber = np.array([2,3,2,3]) # ofdm symbol Index
prsLength        = 864                 # PRS length per ofdm symbol Index

prsObject        = PRS(dlPRSSequenceID, slotNumber, ofdmSymbolNumber)
prsSequence      = prsObject(prsLength)

The details about the input-output interface of the SSS implementation is provided below.

class toolkit5G.SequenceGeneration.PRS(dlPRSSequenceID, slotNumber, ofdmSymbolNumber)[source]

Generates the positioning reference sequence (PRS) for 5G system. The constructor expects PRS resource ID, slot index, and symbol index. The call method expect the length to be generated for the PRS and returns 1 or multiple PS sequences based on the size of slot index and symbol index passed as input. The details about the implementation of the sequence are provided in section 7.4.1.7 of [3GPPTS38211_PRS].

Parameters:
  • dlPRSSequenceID (int) – Defines the dl PRS sequence ID \(\in \{0,1,...,4095\}\).

  • slotNumber (int or NumPy array, np.integer) – Defines the slot number within a frame \(n_{s,f}^{\mu} \in \{0,1,2,..,10*2^{\mu}-1\}\) where \({\mu = \frac{\Delta f}{15 kHz}}\).

  • ofdmSymbolNumber (int or NumPy array, np.integer) – Defines the OFDM symbol number (\(l\)), within the slot \(\in \{0,1,2,..,13\}\).

Input:

length (int) – Defines length of the PN Sequence

Output:

[…, length], np.int8 – Positioning reference sequence (PRS).

Raises:
  • ValueError – [Error]: length of PN Sequence must be a positive (>0) integer!

  • ValueError – [Error-PRS]: dlPRSSequenceID must be in interval [0 4095]!

  • ValueError – [Error-PRS]: dlPRSSequenceID must be integer!

  • ValueError – [Error-PRS]: slotNumber must be an integer or NumPy array of integers!

  • ValueError – [Error-PRS]: slotNumber must be non-negative!

  • ValueError – [Error-PRS]: symbolNumber (OFDM symbol number) must be integer or ndarray of int!

  • ValueError – [Error-PRS]: symbolNumber (OFDM symbol number) must be in the range [0-13]!

  • ValueError – [Error-PRS]: Size of symbolNumber and symbolNumber is inconsistent!

References:
[3GPPTS38211_PRS] (1,2)

3GPP TS 38.211 “Physical channels and modulation (Release 17)”, V17.1.0 (2022-03).