Perform MMSE equalization on extracted resource elements of the physical broadcast channel (PBCH).
Create symbols and indices for a PBCH transmission.
ncellid = 146;
v = 0;
E = 864;
cw = randi([0 1],E,1);
pbchTxSym = nrPBCH(cw,ncellid,v);
pbchInd = nrPBCHIndices(ncellid);
Generate an empty resource array for one transmitting antenna. Populate the array with the PBCH symbols by using the generated PBCH indices.
carrier = nrCarrierConfig('NSizeGrid',20);
P = 1;
txGrid = nrResourceGrid(carrier,P);
txGrid(pbchInd) = pbchTxSym;
Perform OFDM modulation.
txWaveform = nrOFDMModulate(carrier,txGrid);
Create channel matrix and apply channel to transmitted waveform.
R = 4;
H = dftmtx(max([P R]));
H = H(1:P,1:R);
H = H / norm(H);
rxWaveform = txWaveform * H;
Create channel estimate.
hEstGrid = repmat(permute(H.',[3 4 1 2]),[240 4]);
nEst = 0.1;
Perform OFDM demodulation.
rxGrid = nrOFDMDemodulate(carrier,rxWaveform);
To prepare for PBCH decoding, use nrExtractResources to extract symbols from received and channel estimate grids. Plot the received PBCH constellation.
[pbchRxSym,pbchHestSym] = nrExtractResources(pbchInd,rxGrid,hEstGrid);
figure;
plot(pbchRxSym,'o:');
title('Received PBCH Constellation');
Decode the PBCH with the extracted resource elements. Plot the equalized PBCH constellation.
[pbchEqSym,csi] = nrEqualizeMMSE(pbchRxSym,pbchHestSym,nEst);
pbchBits = nrPBCHDecode(pbchEqSym,ncellid,v);
figure;
plot(pbchEqSym,'o:');
title('Equalized PBCH Constellation');