Matlab Toolbox - 4G/LTE

 

 

 

Secondary Synchronization Signal (SSS)

 

The SSS finishes the job the PSS starts. The PSS gives the UE one of three identities, and the SSS gives one of 168 groups, so the two together fix the cell identity. The SSS also tells the UE whether it sits in subframe 0 or subframe 5, which gives the frame timing.

If you don't know what SSS (Secondary Synchronization Signal), refer to Physical Layer Signal : SSS (Secondary Synchronization Signal) page first.

Followings are the topics to be covered in this page.

SSS Symbol Generation

The code below is the same as on the PSS page, with lteSSS in place of ltePSS. It builds an enb structure, calls lteSSS, and plots the 62 values as a constellation and as a sequence.

    % Since SSS is determined by each eNodeB, you have to define properites of a eNodeB.  

    % NDLRB indicate System Bandwith in the unit of RBs.

    % NDLRB 6 = 1.4 Mhz, NDLRB 15 = 3.0 Mhz, NDLRB 25 = 5.0 Mhz,

    % NDLRB 50 = 10 Mhz, NDLRB 75 = 15 Mhz, NDLRB 100 = 20 Mhz

    % CellRefP indicate number of downlink Antenna. CellRefP = 1 means 1 transmission antenna (SISO)

    % NCellID indicate PCI (Physical Cell Identity) of the Cell

    % NSubframe indicate the subframe number. Since SSS resides only in a specific subframe,

    % you need to specify the proper subframe number here.

    enb.CyclicPrefix = 'Normal';

    enb.NDLRB = 6;

    enb.CellRefP = 1;

    enb.DuplexMode = 'FDD';

     

    enb.NCellID = 0;

    enb.NSubframe = 0;

     

    % if you pass the eNodeB information (enb) into lteSSS(), it will generate the SSS symbols for the specified cell.

    % sss_arrayIndex is just a sequence of integer which will used to plot SSS symbols.

     

    sss = lteSSS(enb);

    sss_arrayIndex = 0:length(sss)-1;

     

    % Following is to represent SSS symbols.

     

    subplot(1,3,1);

    plot(real(sss),imag(sss),'ro','MarkerFaceColor',[1 0 0]);

    title('Constellation');

    subplot(1,3,[2 3]);

    plot(sss_arrayIndex,real(sss),'ro-',sss_arrayIndex,imag(sss),'bo-');

    xlim([0 max(sss_arrayIndex)]);

    title('SSS index vs SSS value. Red -> real, Blue -> Imaginary');  

Several code comments were carried over from the PSS page and named the PSS. They now name the SSS. The plotting line also used pss_arrayIndex for the imaginary part, a variable that exists only after the PSS code has run. It now uses sss_arrayIndex, so the code runs on its own.

  • Same enb structure as the PSS : NCellID and NSubframe are the fields that matter.
  • lteSSS returns 62 values : one for each subcarrier the SSS occupies.
  • sss_arrayIndex for both curves : the code no longer depends on the PSS example.

How does the SSS change with NCellID ?

Does the SSS change with every NCellID, as the PSS does only in steps of three? The plots below run the code for NCellID 0, 1 and 3. That choice separates the two parts of the cell identity: NCellID 0 and 1 share NID(1), and NCellID 0 and 3 share NID(2).

If you see the left plot (constellation), you would notice SSS is not based on  ZadOff Chu sequence. It would be a little difficult to understand the nature of these numbers just by looking at it. It is made by a kind of scrambling squence (based on m-sequence). As you see in the right side graph, SSS is made up of 62 symbols.

    enb.CellRefP = 1;

    enb.NCellID = 0;

 

Constellation and real and imaginary parts of the 62 SSS symbols for NCellID 0

NCellID 0, where NID(1) = 0 and NID(2) = 0. Every value is +1 or -1, and the imaginary part is zero.

The only difference between this example and previous example is NCellID. If you compare this with previous example, you would notice that the sequence of symbols are different. It means SSS sequence varies with NCellID (PCI : Physical Cell ID)

    enb.CellRefP = 1;

    enb.NCellID = 1;

 

Constellation and real and imaginary parts of the 62 SSS symbols for NCellID 1

NCellID 1, where NID(1) = 0 and NID(2) = 1. The group is the same as for NCellID 0, but the sequence differs.

The only difference between this example and previous example is NCellID. If you compare this with previous example, you would notice that the sequence of symbols are different. It means SSS sequence varies with NCellID (PCI : Physical Cell ID)

    enb.CellRefP = 1;

    enb.NCellID = 3;

 

Constellation and real and imaginary parts of the 62 SSS symbols for NCellID 3

NCellID 3, where NID(1) = 1 and NID(2) = 0.

Did you see any pattern from the various sequence of SSS shown above ? do you understand exactly how PCI influence the specific sequence generation of SSC ?

I know, it would be almost impossible to figure out the answers to these questions. Now it is time for you to get back to Physical Layer Signal : SSS (Secondary Synchronization Signal) again and look into details of the extremely confusing mathmatical formula. At least, I tried to link a those mathematical steps in such a way that you can follow up a little more easily than 3GPP spec itself (hopefully :))

The constellation has only two points, at +1 and -1, because the SSS is built from binary sequences. The PSS, by contrast, spreads its 62 values around the unit circle. Every NCellID gives a different SSS, unlike the PSS. NCellID 0 and 1 have the same group NID(1) = 0, yet their sequences differ, because NID(2) scrambles the SSS. NCellID 0 and 3 share NID(2) = 0, and their sequences differ because the group changes.

These plots match a direct calculation of 36.211 v19.3.0 clause 6.11.2.1 for subframe 0, value by value. The same calculation gives a different sequence for subframe 5, which is why the code sets NSubframe.

  • Two points only : the SSS values are +1 and -1.
  • A different SSS for every NCellID : both NID(1) and NID(2) change it.
  • NSubframe matters : subframe 0 and subframe 5 carry different sequences.

How is the SSS built ?

The page asks how the cell identity turns into this pattern of +1 and -1. The answer in 36.211 clause 6.11.2.1 has three layers, and each layer uses one piece of the identity. The Physical Layer Signal : SSS page follows the formulas step by step, and this section gives the outline.

The 62 values are two interleaved sequences of length 31. The even positions carry s0 in subframe 0, and the odd positions carry s1. Both are cyclic shifts of one m-sequence, by m0 and m1, and Table 6.11.2.1-1 derives the pair from NID(1). NCellID 0 and 1 use m0 = 0 and m1 = 1, and NCellID 3 uses m0 = 1 and m1 = 2.

Two scrambling steps follow. The sequences c0 and c1 depend on NID(2), so the SSS is tied to the PSS of the same cell. A further sequence z1, which depends on m0 or m1, scrambles the odd positions. In subframe 5, s0 and s1 swap places. A UE that decodes the SSS in one half-frame therefore knows which half-frame it is in.

  • Two interleaved sequences : s0 and s1, shifted by m0 and m1 from NID(1).
  • Scrambled by c0 and c1 : which depend on NID(2) from the PSS.
  • s0 and s1 swap in subframe 5 : the UE learns the frame timing.

Disclaimer !

This page is only to show you the overall logics and visualization for various LTE physical layer channels. I haven't investigated much about verifying about the accuracy.

If you think the code is not so efficient, it is 100% my fault. I haven't made any effort for effiecient code. I just tried to create code as simple as possible for the readers. As you know, easy-to-read code is not always efficient for a specific chipset.

If you find any mistake in terms of accuracy, it is also very highly likely be my fault. Not the problem of Matlab tool box itself.

Any comment and corrections if you find any mistake will be welcome and appreciated.

Reference

[1] 3GPP TS 36.211 v19.3.0 - clause 6.11.2, Secondary synchronization signal

[2] Physical Layer Signal : SSS

[3] Matlab Toolbox : PSS