DL-SCH와 UL-SCH를 위한 LDPC 처리
이 예제에서는 5G NR 다운링크 및 업링크 공유 전송 채널(DL-SCH와 UL-SCH)을 위한 LDPC(저밀도 패리티 검사) 코딩 체인을 중점적으로 보여줍니다.
공유 채널 파라미터
예제에서는 처리 과정을 DL-SCH를 사용해 설명하며, 이는 UL-SCH에도 적용됩니다.
DL-SCH(downlink shared channel)에서 전송되는 전송 블록에 대한 파라미터를 선택합니다.
rng(210); % Set RNG state for repeatability A = 10000; % Transport block length, positive integer rate = 449/1024; % Target code rate, 0<R<1 rv = 0; % Redundancy version, 0-3 modulation = 'QPSK'; % Modulation scheme, QPSK, 16QAM, 64QAM, 256QAM nlayers = 1; % Number of layers, 1-4 for a transport block
선택한 전송 블록 길이와 목표 코딩율에 따라, nrDLSCHInfo
함수를 사용하여 DL-SCH 코딩 파라미터가 결정됩니다.
% DL-SCH coding parameters cbsInfo = nrDLSCHInfo(A,rate); disp('DL-SCH coding parameters') disp(cbsInfo)
DL-SCH coding parameters CRC: '24A' L: 24 BGN: 1 C: 2 Lcb: 24 F: 244 Zc: 240 K: 5280 N: 15840
DL-SCH는 다중 코드워드 송신(즉, 두 개의 전송 블록)을 지원하는 반면 UL-SCH는 하나의 코드워드만 지원합니다. 또한 UL-SCH는 DL-SCH에 대해 위에 나열된 것 외에 pi/2-BPSK 변조도 지원합니다.
LDPC 코딩을 사용한 전송 블록 처리
MAC 계층에서 물리 계층으로 전달되는 데이터를 전송 블록이라고 합니다. DL-SCH(downlink shared channel)의 경우 전송 블록은 다음의 처리 단계를 거칩니다.
CRC 첨부
코드 블록 분할 및 코드 블록 CRC 첨부
LDPC를 사용한 채널 코딩
레이트 매칭 및 코드 블록 결합
위의 처리 단계는 스크램블링, 변조, 계층 매핑, 리소스/안테나 매핑을 위해 PDSCH(physical downlink shared channel)로 전달되기 전에 이루어집니다. 각 단계는 다음과 같이 함수에 의해 수행됩니다.
% Random transport block data generation in = randi([0 1],A,1,'int8'); % Transport block CRC attachment tbIn = nrCRCEncode(in,cbsInfo.CRC); % Code block segmentation and CRC attachment cbsIn = nrCodeBlockSegmentLDPC(tbIn,cbsInfo.BGN); % LDPC encoding enc = nrLDPCEncode(cbsIn,cbsInfo.BGN); % Rate matching and code block concatenation outlen = ceil(A/rate); chIn = nrRateMatchLDPC(enc,outlen,rv,modulation,nlayers);
레이트 매칭 및 코드 블록 결합 과정에서의 출력 비트 수는 사용 가능한 리소스를 기준으로 PDSCH의 비트 용량과 일치해야 합니다. 이 예제에서는 PDSCH가 모델링되지 않았으므로 이전에 선택한 전송 블록 크기를 기준으로 목표 코드율을 달성하도록 설정됩니다.
UL-SCH 코드워드의 수신자가 PUSCH(physical uplink shared channel)인 UL-SCH의 경우에도 유사한 처리 과정이 적용됩니다. 다음 도식은 두 채널의 처리를 나타낸 것입니다.
재전송에 대한 추가 지원과 함께, 전송 블록당 처리를 캡슐화하는 nrDLSCH
System object와 nrULSCH
System object를 참조하십시오.
채널
이 예제에서는 잡음이 없는 간단한 양극성 채널을 사용합니다. PDSCH 또는 PUSCH의 완전한 처리와 더불어, 페이딩 채널, AWGN, 기타 RF 손상도 고려할 수 있습니다.
chOut = double(1-2*(chIn));
LDPC 디코딩을 사용한 수신 처리
DL-SCH 채널에 대한 수신단 처리는 다음을 포함하는 송신단에 대응하는 쌍대 연산으로 구성됩니다.
레이트 복원
LDPC 디코딩
Code 블록 분할 해제 및 CRC 디코딩
전송 블록 CRC 디코딩
각 단계는 다음과 같이 함수에 의해 수행됩니다.
% Rate recovery raterec = nrRateRecoverLDPC(chOut,A,rate,rv,modulation,nlayers); % LDPC decoding decBits = nrLDPCDecode(raterec,cbsInfo.BGN,25); % Code block desegmentation and CRC decoding [blk,blkErr] = nrCodeBlockDesegmentLDPC(decBits,cbsInfo.BGN,A+cbsInfo.L); disp(['CRC error per code-block: [' num2str(blkErr) ']']) % Transport block CRC decoding [out,tbErr] = nrCRCDecode(blk,cbsInfo.CRC); disp(['Transport block CRC error: ' num2str(tbErr)]) disp(['Recovered transport block with no error: ' num2str(isequal(out,in))])
CRC error per code-block: [0 0] Transport block CRC error: 0 Recovered transport block with no error: 1
표시된 것처럼 코드 블록 레벨과 전송 블록 레벨 모두에서 CRC 오류가 없습니다. 따라서 잡음이 없는 채널의 경우 예상대로 오류 없이 전송 블록이 복구되고 디코딩될 수 있습니다.
성능 향상을 위한 재전송의 추가 소프트 결합(soft combining)을 포함해, 코드워드당 수신 처리를 캡슐화하는 nrDLSCHDecoder
및 nrULSCHDecoder
System object를 참조하십시오.
참고 항목
함수
nrLDPCEncode
|nrRateMatchLDPC
|nrRateRecoverLDPC
|nrLDPCDecode
|nrDLSCHInfo
|nrCRCEncode
|nrCRCDecode
|nrCodeBlockSegmentLDPC
|nrCodeBlockDesegmentLDPC
|nrULSCHInfo
|nrDLSCHDecoder
|nrDLSCH
|nrULSCH
|nrULSCHDecoder