Secondary Synchronization Signal

The secondary synchronization signal (SSS) is a gold-sequence of length 127 generated using \(N_{ID}^1\) and \(N_{ID}^2\). It is used for Cell ID-2 detection and frequency synchronization which aims to mitigate the carrier offsets and centre of the SSB grid at the user equipment (UE). The detailed implementation of the SSS is provided in [3GPPTS38211_SSS].

Important

  • SSS is an constituent of synchronization signal block (SSB). It is loaded in the middle (across frequency) of third symbol of the SSB.

If \(N_{ID}^1\) and \(N_{ID}^2\) is scalar:

nID1        = 25              # Cell ID-2 for SSS generation
nID2        = 1               # Cell ID-2 for SSS generation
sss         = SSS(nID1, nID2) # Generate PSS object using this cell ID-2.
sssSequence = sss()           # Generate [1x127] pss sequence using 'sss' object

If \(N_{ID}^1\) is scaler and \(N_{ID}^2\) is NumPy array:

nID1        = 204                 # Cell ID-2 for SSS generation
nID2        = np.array([1,0,2,1]) # Cell ID-2 for SSS generation
sss         = SSS(nID1, nID2)     # Generate PSS object using this cell ID-2.
sssSequence = sss()               # Generate [4x127] pss sequence using 'sss' object for each cell-ID2

If \(N_{ID}^1\) is NumPy array and \(N_{ID}^2\) is scaler:

nID1        = np.array([98, 213]) # Cell ID-2 for SSS generation
nID2        = 2                   # Cell ID-2 for SSS generation
sss         = SSS(nID1, nID2)     # Generate PSS object using this cell ID-2.
sssSequence = sss()               # Generate [2x127] pss sequence using 'sss' object for each cell-ID2

If \(N_{ID}^1\) and \(N_{ID}^2\) are NumPy array:

nID1        = np.array([101,45,21]) # Cell ID-2 for SSS generation
nID2        = np.array([  1, 0, 2]) # Cell ID-2 for SSS generation
sss         = SSS(nID1, nID2)       # Generate PSS object using this cell ID-2.
sssSequence = sss()                 # Generate [3x127] pss sequence using 'sss' object for each cell-ID2

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

class toolkit5G.SequenceGeneration.SSS(nID1, nID2)[source]

Generates the Secondary synchronization signal (SSS) for 5G system. The constructor expects two parameters, nID1 and nID2, as input. These two IDs can be scaler and/or vector. When both the IDs are vector they should be of equal length. The call method returns 1 or multiple SS sequences of length 127 based on the size of nID1 and nID2. Dimension of sssSequence = N x 127 where \(N = \max\{\) len(nID1), len(nID1) \(\}\). The details about the implementation of the sequence are provided in section 7.4.2.3.2 of 3GPP TS 38.211.

Note

The cell-ID is computed as, \(N_{ID}^{cell}\) = \(3. N_{ID}^{(1)}\) + \(N_{ID}^{(2)}\).

Warning

If both nID1 and nID2 are numpy array, they must have same shape and size.

Parameters:
  • nID1 (int or NumPy array, np.int8) – Define cell-ID 1, \(N_{ID}^{(1)} \in {0,1,2,...,335}\).

  • nID2 (int or NumPy array, np.int8) – Define cell-ID 2, \(N_{ID}^{(2)} \in {0, 1, 2}\).

Input:

No Input required

Output:

(…, 127), np.int8 – Secondary synchronization sequence of shape \(\text{N} \times 127\) where N is the number of SSS sequences.

Important

  • If both nID1 and nID2 are scalar, N (number of SS sequence) = 1.

  • If nID1 is an array and nID2 is scalar N (number of SS sequence) = length of nID1.

  • If nID1 is a scalar and nID2 is an array N (number of SS sequence) = length of nID2.

  • If nID1 is an array and nID2 is also an array N (number of SS sequence) = length of nID1.

Raises:
  • ValueError – [Error-SSS]: Size of nID1 and nID2 is inconsistent!

  • ValueError – [Error SSS]: nID1 must be an integer or integer numpy array!

  • ValueError – [Error SSS]: nID2 must be an integer or integer numpy array!

  • Warnings – [Warning S_SSS]: ‘nID2’ should belong to interval {0, 1, 2}!

  • Warnings – [Warning SSS]: ‘nID1’ should belong to interval {0, 1, 2, …, 335}!

References:
[3GPPTS38211_SSS]

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