5G/NR - Pre Trial - Physical Signal - ESS
NOTE : This note is about a tempary 5G specification that was implemented and tried before 5G specification is finalized. I keep this note for study purpose.
After the PSS and the SSS, the UE knows the cell ID and the half frame. But it still does not know which of the 14 symbols it is looking at. The PSS and the SSS repeat unchanged in every symbol of subframes 0 and 25, so they cannot tell the symbols apart. The ESS is the Pre-Trial answer to that problem.
ESS is something that is not in LTE. Main purpose of ESS is to uniquely identify the symbol number within the subframe.
- Mapped to 72 active sub carriers(6 resource blocks), located below the PSS at every OFDM symbols in Subframe 0 and at every OFDM symbols in Subframe 25. (Note : only 63 of the 72 subcarriers carries the real ESS data, and the remaining 9 subcarriers are not allocated any data)
- Made up of single 63 Zadoff Chu Sequence Values
- The single 63 Zadoff Chu Sequence is cyclic shifted for each OFDM Symbol to give a unique identity
- The ESS sequence for each OFDM symbol is scrambled (multiplied) by a Gold Sequence which is unique for every physical cell ID.
- Used for OFDM Symbol Number Identification
The sections that follow cover the ESS in order. The first builds the sequence, the second places it on the resource grid, and the third compares it with the way LTE and NR solve the same problem.
Baseband Signal Generation
The ESS has to do something that the PSS and the SSS cannot do. It has to look different in each of the 14 symbols. Let's see how one Zadoff-Chu sequence produces 14 distinct versions, and how the cell ID then scrambles them.
The starting point is one Zadoff-Chu sequence with root 25, the same root as the PSS for NID(2) = 0. The code generates it for n = 0 to 62, so the base sequence d(n) has 63 values. Each symbol l then takes its own cyclic shift of d(n). The shift kl for symbol l is the (l+1)-th entry of CyclicShift = [0 7 14 18 21 25 32 34 38 41 45 52 59 61]. Symbol l then carries d((n + kl) mod 63).
Why a cyclic shift? For a Zadoff-Chu sequence, a cyclic shift in frequency multiplies each value by a phase that grows linearly with n. In the time domain, that phase ramp is a delay. So the UE can correlate the received ESS against the unshifted base sequence once. The position of the correlation peak gives the shift, and the shift gives the symbol index. The 14 shifts in CyclicShift give 14 different peak positions.
Next, the cell ID scrambles every symbol. The code builds a QPSK sequence r(n) from a Gold sequence c(n), with r(n) = (1 - 2c(2n))/√2 + j(1 - 2c(2n+1))/√2. The Gold sequence starts from cinit = 210(i+1)(2NIDcell+1) + 2NIDcell + 1, where i is the subframe number. Each shifted Zadoff-Chu sequence is then multiplied by r(n), value by value.
The scrambling does not hide the symbol index from the UE. When the UE reads the ESS, it already knows NIDcell from the PSS and the SSS. So it can generate r(n), remove it, and then look for the cyclic shift. The value cinit also contains the subframe number, so the scrambling in subframe 0 differs from the scrambling in subframe 25.
|
Zadoff Chu Sequence for Each Symbol(Subframe 0) |
ESS Sequence for Each Symbol(Subframe 0) |
|
|
|
The left column plots the 14 shifted Zadoff-Chu sequences for subframe 0, one row per symbol from s = 0 to s = 13. The right column plots the same 14 sequences after scrambling. In each row, the small square is the constellation, and the wide panel plots the real part in red and the imaginary part in blue against n.
Every constellation is a circle, before and after scrambling. This is because both the Zadoff-Chu values and the QPSK values have unit amplitude, so their product does too. In the left column, the rows share one pattern, moved sideways by the cyclic shift. In the right column, the scrambling removes that visible repetition.
Disclaimer : This code is just to push myself (probably readers) to look into the algorithm (formula) specified in the specification to the most detailed level. If you try to convert the specification into the programming code whatever language you choose, you will understand the equation / algorithm in much more detailed level than just reading the document. However, this code has not been verified with any real data.
|
Filename : Generate_Ess.m Last Update : Dec 23, 2016 |
|
%V5G.211 - 6.8.3.1 function SequenceEss = Generate_Ess(ESS)
CyclicShift = [0 7 14 18 21 25 32 34 38 41 45 52 59 61];
i = ESS.Subframe; NID_Cell = ESS.NID_Cell;
% Generate the base Zadoff-Chu Sequence d_n = [];
for n = 0:62 d = exp(-j*25*pi*n*(n+1)/63); d_n = [d_n d]; end;
% Generate the Cyclic Shifted Version of the base sequence % for each symbol d_tilda_n = [];
for l = 0 : 13 d_tilda_n_l = []; for n = 0:62 d = d_n(mod(n+CyclicShift(l+1),63)+1); d_tilda_n_l = [d_tilda_n_l d]; end; d_tilda_n = [d_tilda_n ; d_tilda_n_l]; end;
SequenceEss.d_tilda_n = d_tilda_n;
% Generate Psuedo Random Sequence
C_init = 2^10 * (i + 1) * (2 * NID_Cell + 1) + 2 * NID_Cell + 1;
r_n = []; c_n_even = []; c_n_odd = [];
PR.x2_init = C_init;
for n = 0 : 62 PR.n = 2*n; c_n = Generate_PR(PR); c_n_even = [c_n_even c_n]; PR.n = 2*n+1; c_n = Generate_PR(PR); c_n_odd = [c_n_odd c_n]; end;
r_n = (1 ./ sqrt(2) * (1 - 2 .* c_n_even)) + (j .* 1 ./ sqrt(2) * (1 - 2 .* c_n_odd));
% Scramble the Zadoff Chu for each symbol d_n = [];
for l = 0 : 13 d = d_tilda_n(l+1,:) .* r_n; d_n = [d_n; d]; end;
SequenceEss.d_n = d_n;
end |
|
Filename : PlotSequence_Ess.m Last Update : Dec 23, 2016 |
|
function h=PlotSequence_Ess(EssSequence,PlotOption)
if strcmp(PlotOption.PlotData,'UnScrambled') == 1 plotData = EssSequence.d_tilda_n; end;
if strcmp(PlotOption.PlotData,'Scrambled') == 1 plotData = EssSequence.d_n; end;
w = 10;
for l = 0:13 d_n=plotData(l+1,:);
subplot(14,w,(l*w)+1); plot(real(d_n),imag(d_n),'ro', ... 'MarkerFaceColor',[1 0 0],'MarkerSize',2); set(gca,'xticklabel',[]);set(gca,'yticklabel',[]); set(gca,'xtick',[]);set(gca,'ytick',[]); ylabel(strcat('s = ',num2str(l))); set(gca,'fontsize',6);
subplot(14,w,[((l*w)+2) ((l*w)+w)]); n = 0:62; plot(n,real(d_n),'r-',n,imag(d_n),'b-'); xlim([0 62]); set(gca,'xticklabel',[]);set(gca,'yticklabel',[]); set(gca,'xtick',[]);set(gca,'ytick',[]); end
end |
|
Filename : Test_Generation_Ess.m Last Update : Dec 23, 2016 |
|
ESS.Subframe = 0; ESS.NID_Cell = 0;
EssSequence = Generate_Ess(ESS);
PlotOption.PlotData = 'UnScrambled'; PlotSequence_Ess(EssSequence,PlotOption);
% PlotOption.PlotData = 'Scrambled'; % PlotSequence_Ess(EssSequence,PlotOption);
|
Generate_Ess.m returns both versions. The array d_tilda_n holds the 14 shifted sequences, and the array d_n holds them after scrambling. Test_Generation_Ess.m plots the unscrambled version. To plot the scrambled version, remove the % from its last two lines. The Gold sequence comes from Generate_PR, which is listed on the Pseudo Random Sequence page.
One base sequence gives 14 versions : each OFDM symbol in subframes 0 and 25 uses its own cyclic shift of a length-63 Zadoff-Chu sequence.A cyclic shift acts as a time delay : one correlation against the base sequence can reveal the shift, and so the symbol index.The cell ID scrambles the ESS : a QPSK Gold sequence is seeded with NIDcell and the subframe number.The UE removes the scrambling first : it already knows NIDcell from the PSS and the SSS.
RE Mapping of ESS
RE Mapping, or Resource Element Mapping, decides which subcarrier and which OFDM symbol carries each ESS value. The ESS completes the synchronization block of subframes 0 and 25. It sits below the PSS, while the SSS sits above it.

In the radio frame map, each column is one of the 50 subframes, numbered 0 to 49, and the vertical axis is frequency. The red boxes mark the ESS in subframes 0 and 25. Each box sits directly below the yellow PSS block, and the SSS sits above the PSS. So from the bottom up, the synchronization block is ESS, PSS and SSS.
If you cut out only subframe 0 and maginify the resource elements below PSS, it looks as shown below.
ESS is transmitted in symbol 0-13 in subframes 0 and 25. It is defined in 211-6.8.3 Extended synchronization signal.
It is made up of 63 data based on Zadoff-Chu sequence and occupy 63 subcarriers, but in resource allocation total 72 sub carrier (6 RB) is allocated for the ESS. It means the remaining 9 sub carriers of the allocation is reserved (not used) as a kind of gap.
The ESS is transmitted in all OFDM symbols. This is because Network in PreTrial is transmitting ESS for 14 different antenna ports as indicated below.

Matlab Code : ESS
The left panel of the magnified view shows the whole subframe, with subcarriers 0 to 1200 on the vertical axis. The right panel enlarges subcarriers 450 to 750. There the ESS fills the 63 subcarriers from about 495 to 558, in every one of the 14 OFDM symbols. The labels mark the ESS for port 300 on the first symbol and the ESS for port 313 on the last symbol.
Now the three signals fit together. In symbol l, the gNB sends the PSS, the SSS and the ESS on the same antenna port, 300 + l, and so on the same beam. A UE that detects the PSS best in one symbol reads the ESS in that same symbol. The cyclic shift then tells the UE which symbol it was, and so which of the 14 beams reached it best.
The symbol index also gives the UE the subframe boundary. Without the ESS, the UE would know where a symbol starts, but not where subframe 0 or subframe 25 starts.
The ESS sits directly below the PSS : it uses 63 subcarriers in subframes 0 and 25.The ESS fills all 14 symbols : one antenna port per symbol, from 300 to 313, the same ports as the PSS and the SSS.The ESS changes from symbol to symbol : the PSS and the SSS do not, so only the ESS carries the symbol index.The symbol index identifies the beam : the UE learns which of the 14 beams reached it best, and where the subframe starts.
Comparison with LTE and NR
The ESS answers a question that only a beam sweep raises. So it is worth asking how LTE, which has no beam sweep, and NR, which has one, deal with the same question. Let's put the three side by side.
|
Item |
LTE |
5G Pre-Trial |
NR |
|
Is a time index needed? |
No, the PSS sits in one known symbol |
Yes, 14 symbols carry the same PSS |
Yes, several SSBs carry the same PSS |
|
What carries the index |
Nothing |
ESS, a separate signal |
PBCH DMRS and the PBCH payload |
|
How the index is coded |
Not applicable |
Cyclic shift of a length-63 Zadoff-Chu sequence |
Choice of PBCH DMRS sequence for the lower bits, payload bits for the upper bits |
|
Number of indices |
Not applicable |
14 per subframe |
Up to 64 per SSB burst |
|
Cell-specific scrambling |
Not applicable |
QPSK Gold sequence seeded with NIDcell and the subframe number |
PBCH DMRS sequence seeded with NIDcell and the SSB index |
Start with LTE. The LTE PSS sits in one known OFDM symbol, so a PSS detection already gives the symbol position and the 5 ms boundary. LTE needs no extra signal for a time index, and it has none.
NR has the same problem as the Pre-Trial, because it sweeps beams with a burst of SSBs. But NR does not use a separate signal for the index. Instead, it puts the SSB index into the PBCH DMRS and the PBCH payload. The UE has to decode the PBCH anyway to read the MIB, so the index comes with no extra resource elements.
The idea behind the two designs is the same. Each beam carries its own index, and the index tells the UE which time position, and so which beam, it received. The Pre-Trial spends 63 subcarriers in every beam symbol on this job, while NR reuses a signal it already needs.
LTE needs no ESS : its PSS sits in one known symbol, with no beam sweep.The Pre-Trial uses a separate signal : the ESS carries the symbol index as a cyclic shift.NR folds the index into the PBCH : the PBCH DMRS and the PBCH payload carry the SSB index.

