Блоки сигнала синхронизации и пакеты

Этот пример показывает, как сгенерировать блок сигнала синхронизации (SSB) и сгенерировать несколько SSBs, чтобы сформировать пакет сигнала синхронизации (пакет SS). Каналы и сигналы, которые формируют блок сигнала синхронизации (первичные и вторичные сигналы синхронизации, физический канал телевизионного вещания) созданы и сопоставлены в матрицу, представляющую блок. Наконец матрица, представляющая пакет сигнала синхронизации, создается, и каждый блок сигнала синхронизации в пакете создан и сопоставлен в матрицу.

Блок SS/PBCH

Раздел TS 38.211 7.4.3.1 задает блок Synchronization Signal / Physical Broadcast Channel (SS/PBCH) как 240 поднесущих и 4 символа OFDM, содержащие следующие каналы и сигналы:

  • Первичный сигнал синхронизации (PSS)

  • Вторичный сигнал синхронизации (SSS)

  • Физический канал телевизионного вещания (PBCH)

  • Сигнал ссылки демодуляции PBCH (PBCH DM-RS)

В других документах, например, TS 38.331, SS/PBCH называют "блоком сигнала синхронизации" или "блоком SS".

Создайте 240 4 матрица, представляющая блок SS/PBCH:

ssblock = zeros([240 4])
ssblock = 240×4

     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
      ⋮

Первичный сигнал синхронизации (PSS)

Создайте PSS для данной идентичности ячейки:

ncellid = 17;
pssSymbols = nrPSS(ncellid)
pssSymbols = 127×1

    -1
    -1
    -1
    -1
    -1
    -1
     1
     1
     1
    -1
      ⋮

Переменная The pssSymbols является вектор-столбцом, содержащим 127 символов BPSK PSS.

Создайте индексы PSS:

pssIndices = nrPSSIndices;

Переменная pssIndices является вектор-столбцом, одного размера как pssSymbols. Значение в каждом элементе pssIndices является линейным индексом местоположения в блоке SS/PBCH, с которым должны быть сопоставлены соответствующие символы в pssSymbols. Поэтому отображение символов PSS к блоку SS/PBCH может быть выполнено с простым присвоением MATLAB, использовав линейную индексацию, чтобы выбрать правильные элементы блочной матрицы SS/PBCH:

ssblock(pssIndices) = pssSymbols;

Постройте блочную матрицу SS/PBCH, чтобы показать местоположение PSS:

imagesc(abs(ssblock));
caxis([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS/PBCH block containing PSS');

Вторичный сигнал синхронизации (SSS)

Создайте SSS для той же идентичности ячейки, как сконфигурировано для PSS:

sssSymbols = nrSSS(ncellid)
sssSymbols = 127×1

    -1
     1
    -1
    -1
    -1
     1
    -1
     1
    -1
     1
      ⋮

Создайте индексы SSS и сопоставьте символы SSS с блоком SS/PBCH, после того же шаблона, используемого для PSS. Обратите внимание на то, что масштабный коэффициент 2 применяется к символам SSS, чтобы представлять βSSS в TS 38.211 разделяют 7.4.3.1.2:

sssIndices = nrSSSIndices;
ssblock(sssIndices) = 2 * sssSymbols;

Форма по умолчанию индексов является линейными индексами на основе 1, подходящими для линейной индексации матриц MATLAB как ssblock, как уже показано. Однако документы стандарта NR описывают ресурсы OFDM с точки зрения поднесущей OFDM и индексов символа, с помощью нумерации на основе 0. Для удобной перепроверки со стандартом NR индексные функции принимают, что опции позволяют стилю индексации (линейный индекс по сравнению с индексом) и основа (на основе 0 по сравнению с на основе 1) быть выбранным:

sssSubscripts = nrSSSIndices('IndexStyle','subscript','IndexBase','0based')
sssSubscripts = 127x3 uint32 matrix

   56    2    0
   57    2    0
   58    2    0
   59    2    0
   60    2    0
   61    2    0
   62    2    0
   63    2    0
   64    2    0
   65    2    0
      ⋮

Это видно от индексов, что SSS расположен в символе OFDM 2 (на основе 0) из блока SS/PBCH, запускающегося в поднесущей 56 (на основе 0).

Постройте блочную матрицу SS/PBCH снова, чтобы показать местоположения PSS и SSS:

imagesc(abs(ssblock));
caxis([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS/PBCH block containing PSS and SSS');

Физический канал телевизионного вещания (PBCH)

PBCH несет кодовую комбинацию длины 864 бита, созданные путем выполнения кодирования BCH основного блока информации (MIB). Для получения дополнительной информации о кодировании BCH смотрите функции nrBCH и nrBCHDecode и их использование в примере Процедур Синхронизации NR. Здесь кодовая комбинация PBCH, состоящая из 864 случайных битов, используется:

cw = randi([0 1],864,1);

Модуляция PBCH состоит из следующих шагов, как описано в Разделе TS 38.211 7.3.3:

  • Скремблирование

  • Модуляция

  • Отображение с физическими ресурсами

Скремблирование и модуляция

Несколько блоков SS/PBCH передаются через половину кадра, как описано в процедуре поиска ячейки в Разделе TS 38.213 4.1. Каждому блоку SS/PBCH дают индекс от 0L-1, где L номер блоки SS/PBCH в половине кадра. Борющаяся последовательность для PBCH инициализируется согласно идентичности ячейки ncellid, и подпоследовательность, используемая, чтобы скремблировать кодовую комбинацию PBCH, зависит от значения v, 2 или 3 LSBs индекса блока SS/PBCH, как описано в Разделе TS 38.211 7.3.3.1. В этом примере, v=0 используется. Функциональный nrPBCH создает соответствующую подпоследовательность борющейся последовательности, выполняет скремблирование и затем выполняет модуляцию QPSK:

v = 0;
pbchSymbols = nrPBCH(cw,ncellid,v)
pbchSymbols = 432×1 complex

  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 - 0.7071i
   0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
   0.7071 - 0.7071i
   0.7071 + 0.7071i
   0.7071 + 0.7071i
      ⋮

Отображение с элементами ресурса

Создайте индексы PBCH и сопоставьте символы PBCH с блоком SS/PBCH:

pbchIndices = nrPBCHIndices(ncellid);
ssblock(pbchIndices) = 3 * pbchSymbols;

Постройте блочную матрицу SS/PBCH снова, чтобы показать местоположения PSS, SSS и PBCH:

imagesc(abs(ssblock));
caxis([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS/PBCH block containing PSS, SSS and PBCH');

Сигнал ссылки демодуляции PBCH (PBCH DM-RS)

Итоговым компонентом блока SS/PBCH является DM-RS, сопоставленный с PBCH. Подобно PBCH используемая последовательность DM-RS выводит от индекса блока SS/PBCH и сконфигурирована с помощью переменной iSSB описанный в Разделе TS 38.211 7.4.1.4.1. Здесь iSSB=0 используется:

ibar_SSB = 0;
dmrsSymbols = nrPBCHDMRS(ncellid,ibar_SSB)
dmrsSymbols = 144×1 complex

   0.7071 - 0.7071i
   0.7071 + 0.7071i
  -0.7071 + 0.7071i
  -0.7071 + 0.7071i
   0.7071 - 0.7071i
   0.7071 + 0.7071i
   0.7071 - 0.7071i
  -0.7071 - 0.7071i
  -0.7071 - 0.7071i
   0.7071 + 0.7071i
      ⋮

Обратите внимание на то, что Раздел TS 38.211 7.4.1.4.1 задает промежуточную переменную iSSB который задан тождественно к v описанный ранее для PBCH.

Создайте индексы PBCH DM-RS и сопоставьте символы PBCH DM-RS с блоком SS/PBCH:

dmrsIndices = nrPBCHDMRSIndices(ncellid);
ssblock(dmrsIndices) = 4 * dmrsSymbols;

Постройте блочную матрицу SS/PBCH снова, чтобы показать местоположения PSS, SSS, PBCH и PBCH DM-RS:

imagesc(abs(ssblock));
caxis([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS/PBCH block containing PSS, SSS, PBCH and PBCH DM-RS');

Генерация пакета SS

Пакет SS, состоя из нескольких блоков SS/PBCH, может быть сгенерирован путем создания большей сетки и отображения блоков SS/PBCH в соответствующие местоположения с каждым блоком SS/PBCH, имеющим правильные параметры согласно местоположению.

Создайте пакетную сетку SS

В стандарте NR символы OFDM сгруппированы в слоты, подкадры и кадры. Как задано в Разделе TS 38.211 4.3.1, в кадре существует 10 подкадров, и каждый подкадр имеет фиксированную длительность 1 мс. Каждый пакет SS имеет длительность половины кадра, и поэтому охватывает 5 подкадров:

nSubframes = 5
nSubframes = 5

Раздел TS 38.211 4.3.2 задает каждый слот как наличие 14 символов OFDM (для нормальной циклической длины префикса), и это фиксируется:

symbolsPerSlot = 14
symbolsPerSlot = 14

Однако количество слотов на подкадр отличается и является функцией интервала поднесущей. Когда разрядка поднесущей увеличивается, уменьшения длительности символа OFDM, и поэтому больше символов OFDM может быть вмещено в фиксированную длительность подкадра 1 мс.

Существует 5 настроек разрядки поднесущей μ=0...4, с соответствующей разрядкой поднесущей быть 152μ kHz. В этом примере мы будем использовать μ=1, соответствие интервалу поднесущей на 30 кГц:

mu = 1
mu = 1

Количество слотов на подкадр 2μ, как удвоение половин разрядки поднесущей длительность символа OFDM. Обратите внимание на то, что определение слота в NR отличается от LTE: подкадр в LTE состоит из 2 слотов 7 символов (для нормального циклического префикса) тогда как в NR, подкадр с помощью интервала поднесущей LTE (μ=0, 15 кГц), состоит из 1 слота 14 символов.

Вычислите общее количество символов OFDM в пакете SS:

nSymbols = symbolsPerSlot * 2^mu * nSubframes
nSymbols = 140

Создайте пустую сетку для целого пакета SS:

ssburst = zeros([240 nSymbols])
ssburst = 240×140

     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
      ⋮

Задайте состав блока SS

Шаблон блоков SS/PBCH в пакете SS косвенно задан процедурой поиска ячейки в TS 38.213, который описывает местоположения, в которых UE может обнаружить блок SS/PBCH. Существует 5 составов блока, Случаются - Случай E, которые имеют различные интервалы поднесущей и применимы для различных несущих частот.

Создайте индексы первых символов в кандидате блоки SS/PBCH для Случая состава блока B, который имеет L=8 блоки на пакет:

n = [0, 1];
firstSymbolIndex = [4; 8; 16; 20] + 28*n;
firstSymbolIndex = firstSymbolIndex(:).'
firstSymbolIndex = 1×8

     4     8    16    20    32    36    44    48

Создайте пакетное содержимое SS

Теперь цикл может быть создан, который генерирует каждый блок SS и присваивает его в соответствующее местоположение пакета SS. Отметьте следующее:

  • Повторные использования кода различные переменные, созданные ранее в этом примере (PSS, SSS и 4 набора индексов)

  • PSS и SSS независимы от индекса блока SS/PBCH, так может быть сопоставлен в блок SS перед циклом

  • Индексы PBCH и индексы PBCH DM-RS независимы от индекса блока SS/PBCH, не нуждайтесь обновленный в цикле

  • iSSB, iSSB и v настраиваются согласно правилам в Разделах TS 38.211 7.3.3.1 и 7.4.1.4.1 для случая L=8.

  • Каждый канал / сигнал масштабировался в порядке дать им различные цвета в итоговом графике

ssblock = zeros([240 4]);
ssblock(pssIndices) = pssSymbols;
ssblock(sssIndices) = 2 * sssSymbols;

for ssbIndex = 1:length(firstSymbolIndex)
    
    i_SSB = mod(ssbIndex,8);
    ibar_SSB = i_SSB;
    v = i_SSB;
    
    pbchSymbols = nrPBCH(cw,ncellid,v);
    ssblock(pbchIndices) = 3 * pbchSymbols;
    
    dmrsSymbols = nrPBCHDMRS(ncellid,ibar_SSB);
    ssblock(dmrsIndices) = 4 * dmrsSymbols;
    
    ssburst(:,firstSymbolIndex(ssbIndex) + (0:3)) = ssblock;
    
end

Наконец, постройте пакетное содержимое SS:

imagesc(abs(ssburst));
caxis([0 4]);
axis xy;
xlabel('OFDM symbol');
ylabel('Subcarrier');
title('SS burst, block pattern Case B');

Смотрите также

Функции

Похожие темы