Main Content

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)을 포함해, 코드워드당 수신 처리를 캡슐화하는 nrDLSCHDecodernrULSCHDecoder System object를 참조하십시오.

참고 항목

함수

관련 항목