Этот пример показывает, как сгенерировать блок сигнала синхронизации (SSB) и сгенерировать несколько SSB, чтобы сформировать пакет сигнала синхронизации (пакет SS). Каналы и сигналы, которые образуют блок сигнала синхронизации (первичные и вторичные сигналы синхронизации, физический широковещательный канал), создаются и преобразуются в матрицу, представляющую блок. Наконец, создается матрица, представляющая пакет сигнала синхронизации, и каждый блок сигнала синхронизации в пакете создается и преобразуется в матрицу.
TS 38.211 Раздел 7.4.3.1 определяет блок Сигнал синхронизации/Физический широковещательный канал (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, чтобы представлять в ТС 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, чтобы представлять в ТС 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 Cell Search и MIB и SIB1 Recovery. Здесь используется кодовое слово PBCH, состоящее из 864 случайных бит:
cw = randi([0 1],864,1);
Модуляция PBCH состоит из следующих этапов, описанных в TS 38.211 Раздел 7.3.3:
Борьба
Модуляция
Сопоставление с физическими ресурсами
Несколько блоков SS/PBCH передаются через половину системы координат, как описано в процедуре поиска камеры в разделе 4.1 TS 38.213. Каждому блоку SS/PBCH задается индекс от , где - число блоков SS/PBCH в половинной системе координат. Последовательность скремблирования для PBCH инициализируется согласно тождествам камеры ncellid
, и подпоследовательность, используемая для скремблирования кодового слова PBCH, зависит от значения , 2 или 3 LSB блочного индекса 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, чтобы представлять в ТС 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 и конфигурируется с помощью переменной описан в ТУ 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, чтобы представлять в ТС 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 строения интервалов между поднесущими , с соответствующим интервалом поднесущих, кГц. В этом примере мы будем использовать , соответствующий интервалу между поднесущими 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]);
Шаблон блоков SS/PBCH в пакете SS косвенно задан процедурой поиска камеры в TS 38.213, которая описывает местоположения, в которых UE может обнаруживать блок SS/PBCH. Существует 5 шаблонов блоков, Случай A - Случай E, которые имеют различные интервалы между поднесущими и применимы для различных несущих частот.
Создайте индексы первых символов в кандидатных блоках SS/PBCH для блочного шаблона Case 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, поэтому не нужно обновлять в цикле
, и устанавливаются в соответствии с правилами ТС 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