В этом примере показано, как сгенерировать блок сигнала синхронизации (SSB) и сгенерировать несколько SSBs, чтобы сформироваться, синхронизация сигнализируют о пакете (пакет SS). Каналы и сигналы, которые формируют блок сигнала синхронизации (первичные и вторичные сигналы синхронизации, физический канал телевизионного вещания) созданы и сопоставлены в матрицу, представляющую блок. Наконец матрица, представляющая пакет сигнала синхронизации, создается, и каждый блок сигнала синхронизации в пакете создан и сопоставлен в матрицу.
Раздел 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 для данной идентичности ячейки:
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. Обратите внимание на то, что масштабный коэффициент 1 применяется к символам PSS, чтобы представлять в TS 38.211 разделяют 7.4.3.1.1:
ssblock(pssIndices) = 1 * pssSymbols;
Постройте блочную матрицу SS/PBCH, чтобы показать местоположение PSS:
imagesc(abs(ssblock)); caxis([0 4]); axis xy; xlabel('OFDM symbol'); ylabel('Subcarrier'); title('SS/PBCH block containing PSS');
Создайте 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, чтобы представлять в 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 несет кодовую комбинацию длины 864 бита, созданные путем выполнения кодирования BCH основного блока информации (MIB). Для получения дополнительной информации о кодировании BCH смотрите функции nrBCH
и nrBCHDecode
и их использование в Поиске Ячейки NR и MIB и примере Восстановления SIB1. Здесь кодовая комбинация PBCH, состоящая из 864 случайных битов, используется:
cw = randi([0 1],864,1);
Модуляция PBCH состоит из следующих шагов как описано в Разделе TS 38.211 7.3.3:
Скремблирование
Модуляция
Отображение с физическими ресурсами
Несколько блоков SS/PBCH передаются через половину системы координат, как описано в процедуре поиска ячейки в Разделе TS 38.213 4.1. Каждому блоку SS/PBCH дают индекс от , где номер блоки SS/PBCH в половине системы координат. Борющаяся последовательность для PBCH инициализируется согласно идентичности ячейки ncellid
, и подпоследовательность, используемая, чтобы скремблировать кодовую комбинацию PBCH, зависит от значения , 2 или 3 LSBs индекса блока SS/PBCH, как описано в Разделе TS 38.211 7.3.3.1. В этом примере, используется. Функциональный 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. Обратите внимание на то, что масштабный коэффициент 3 применяется к символам PBCH, чтобы представлять в TS 38.211 разделяют 7.4.3.1.3:
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');
Итоговым компонентом блока SS/PBCH является DM-RS, сопоставленный с PBCH. Подобно PBCH используемая последовательность DM-RS выводит из индекса блока SS/PBCH и сконфигурирована с помощью переменной описанный в Разделе TS 38.211 7.4.1.4.1. Здесь используется:
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 задает промежуточную переменную который задан тождественно к описанный ранее для PBCH.
Создайте индексы PBCH DM-RS и сопоставьте символы PBCH DM-RS с блоком SS/PBCH. Обратите внимание на то, что масштабный коэффициент 4 применяется к символам PBCH DM-RS, чтобы представлять в TS 38.211 разделяют 7.4.3.1.3:
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/PBCH, может быть сгенерирован путем создания большей сетки и отображения блоков SS/PBCH в соответствующие местоположения с каждым блоком SS/PBCH, имеющим правильные параметры согласно местоположению.
В стандарте 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 настроек разрядки поднесущей , с соответствующей разрядкой поднесущей быть kHz. В этом примере мы будем использовать , соответствие интервалу поднесущей на 30 кГц:
mu = 1
mu = 1
Количество пазов на подкадр , как удвоение половин разрядки поднесущей длительность символа OFDM. Обратите внимание на то, что определение паза в NR отличается от LTE: подкадр в LTE состоит из 2 пазов 7 символов (для нормального циклического префикса) тогда как в NR, подкадр с помощью интервала поднесущей LTE (, 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/PBCH в пакете SS косвенно задан процедурой поиска ячейки в TS 38.213, который описывает местоположения, в которых UE может обнаружить блок SS/PBCH. Существует 5 составов блока, Случаются - Случай E, которые имеют различные интервалы поднесущей и применимы для различных несущих частот.
Создайте индексы первых символов в кандидате блоки SS/PBCH для Случая состава блока B, который имеет блоки на пакет:
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. Отметьте следующее:
Повторные использования кода различные переменные, созданные ранее в этом примере (PSS, SSS и 4 набора индексов)
PSS и SSS независимы от индекса блока SS/PBCH, так может быть сопоставлен в блок SS перед циклом
Индексы PBCH и индексы PBCH DM-RS независимы от индекса блока SS/PBCH, не нуждайтесь обновленный в цикле
, и настраиваются согласно правилам в Разделах TS 38.211 7.3.3.1 и 7.4.1.4.1 для случая .
Каждый канал / сигнал масштабировался для того, чтобы дать им различные цвета в итоговом графике
ssblock = zeros([240 4]); ssblock(pssIndices) = pssSymbols; ssblock(sssIndices) = 2 * sssSymbols; for ssbIndex = 1:length(firstSymbolIndex) i_SSB = mod(ssbIndex - 1,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');
nrPBCH
| nrPBCHDMRS
| nrPBCHDMRSIndices
| nrPBCHIndices
| nrPSS
| nrPSSIndices
| nrSSS
| nrSSSIndices