Извлекают символы физического широковещательного канала (PBCH) из принятой сетки и связанных с ней оценок канала при подготовке к декодированию сформированного лучом PBCH.
Создайте случайную последовательность двоичных значений, соответствующих кодовому слову BCH. Длина кодового слова 864, как указано в TS 38.212 Раздел 7.1.5. Используя кодовое слово, создайте символы и индексы для передачи PBCH. Укажите идентификационный номер камеры физического слоя.
E = 864; cw = randi([0 1],E,1); ncellid = 17; v = 0; pbchTxSym = nrPBCH(cw,ncellid,v); pbchInd = nrPBCHIndices(ncellid);
Использование nrExtractResources
для создания индексов для двух передающих антенн пучкового PBCH. Используйте эти индексы, чтобы сопоставить сформированный лучом PBCH с ресурсным массивом передатчика.
carrier = nrCarrierConfig('NSizeGrid',20);
P = 2;
txGrid = nrResourceGrid(carrier,P);
F = [1 1i];
[~,bfInd] = nrExtractResources(pbchInd,txGrid);
txGrid(bfInd) = pbchTxSym*F;
OFDM модулирует символы PBCH, отображенные в ресурсный массив передатчика.
txWaveform = nrOFDMModulate(carrier,txGrid);
Создайте и примените матрицу канала к форме волны. Получите переданные формы волны.
R = 3; H = dftmtx(max([P R])); H = H(1:P,1:R); H = H/norm(H); rxWaveform = txWaveform*H;
Создайте оценки канала, включая формирование луча.
hEstGrid = repmat(permute(H.'*F.',[3 4 1 2]),[240 4]); nEst = 0;
Демодулируйте принятую форму волны, используя ортогональное частотное деление мультиплексирование (OFDM).
rxGrid = nrOFDMDemodulate(carrier,rxWaveform);
При подготовке к декодированию PBCH извлекают символы из принятой сетки и сетки оценки канала.
[pbchRxSym,pbchHestSym] = nrExtractResources(pbchInd,rxGrid,hEstGrid); figure; plot(pbchRxSym,'o:'); title('Received PBCH Constellation');
Выравнивание символов путем выполнения MMSE эквализации на извлеченных ресурсах. Постройте график результатов.
pbchEqSym = nrEqualizeMMSE(pbchRxSym,pbchHestSym,nEst); figure; plot(pbchEqSym,'o:'); title('Equalized PBCH Constellation');
Извлеките мягкие биты путем выполнения декодирования PBCH на уравненных символах.
pbchBits = nrPBCHDecode(pbchEqSym,ncellid,v)
pbchBits = 864×1
1010 ×
-2.0000
-2.0000
2.0000
-2.0000
-2.0000
2.0000
2.0000
-2.0000
-2.0000
-2.0000
⋮