디코딩을 위한 PBCH 심볼 및 채널 추정값 추출
빔포밍된 PBCH을 디코딩하기 위한 준비 과정으로, 수신된 그리드와 관련 채널 추정값에서 PBCH(physical broadcast channel) 심볼을 추출합니다.
PBCH 코딩 및 빔포밍
BCH 코드워드에 대응하는 이진 값으로 구성된 랜덤 시퀀스를 생성합니다. TS 38.212 Section 7.1.5에 지정된 대로 코드워드 길이는 864입니다. 코드워드를 사용하여 PBCH 송신을 위한 심볼과 인덱스를 만듭니다. 물리 계층 셀 ID 번호를 지정합니다.
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 0.3i];
[~,bfInd] = nrExtractResources(pbchInd,txGrid);
txGrid(bfInd) = pbchTxSym*F;OFDM은 송신기 리소스 배열에 매핑된 PBCH 심볼을 변조합니다.
txWaveform = nrOFDMModulate(carrier,txGrid);
PBCH 송신 및 디코딩
채널 행렬을 생성하여 파형에 적용합니다. 송신된 파형을 수신합니다.
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); scatterplot(pbchRxSym(:),[],[],'y+'); title('Received PBCH Constellation');

추출된 리소스에 대해 MMSE 이퀄라이제이션을 수행하여 심볼을 이퀄라이징합니다. 결과를 플로팅합니다.
pbchEqSym = nrEqualizeMMSE(pbchRxSym,pbchHestSym,nEst); scatterplot(pbchEqSym(:),[],[],'y+'); 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
2.0000
-2.0000
-2.0000
2.0000
-2.0000
⋮