DL-SCH と UL-SCH の LDPC 処理
この例では、5G NR のダウンリンクとアップリンクの共有トランスポート チャネル (DL-SCH と UL-SCH) の低密度パリティ チェック (LDPC) 符号化チェーンについて説明します。
共有チャネル パラメーター
この例では、DL-SCH を使用して処理について説明しますが、UL-SCH にも適用されます。
ダウンリンク共有チャネル (DL-SCH) で送信されるトランスポート ブロックのパラメーターを選択します。
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 ではマルチ コードワード伝送 (2 つのトランスポート ブロック) をサポートし、UL-SCH ではシングル コードワード伝送のみをサポートします。UL-SCH では、上記の DL-SCH の処理に加え、pi/2-BPSK 変調もサポートします。
LDPC 符号化を使用したトランスポート ブロック処理
MAC レイヤーから物理レイヤーに送信されるデータは、トランスポート ブロックと呼ばれます。ダウンリンク共有チャネル (DL-SCH) の場合、トランスポート ブロックは次の処理段階を経由します。
CRC の付加
コード ブロックのセグメンテーションとコード ブロック CRC の付加
LDPC を使用したチャネル符号化
レート マッチングとコード ブロックの連結
これは、スクランブル、変調、レイヤー マッピング、リソース/アンテナ マッピングのために、物理ダウンリンク共有チャネル (PDSCH) に渡される前に行われます。これらの各段階は、次に示す関数によって実行されます。
% 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) が UL-SCH コードワードを受信します。次の図は、この 2 つのチャネルの処理を示しています。
トランスポート ブロックごとの処理をカプセル化するnrDLSCH
System object とnrULSCH
System object を参照してください。これは、再送信のためのサポートも備えています。
チャネル
この例では、ノイズのないシンプルなバイポーラ チャネルを使用します。PDSCH または PUSCH の完全な処理では、フェージング チャネル、AWGN、その他の RF 劣化要因も考慮できます。
chOut = double(1-2*(chIn));
LDPC 復号化を使用した受信処理
DL-SCH チャネルの受信端処理は、次を含む送信端処理に対応するデュアル操作で構成されます。
レート リカバリ
LDPC 復号化
コード ブロックのデセグメンテーションと 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 エラーはありません。ノイズレス チャネルの場合は予想どおり、トランスポート ブロックがエラーなしで復元され、復号化されます。
コードワードごとの受信処理をカプセル化するnrDLSCHDecoder
System object とnrULSCHDecoder
System object を参照してください。これは、性能向上のための再送信のソフトコンバインも備えています。
参考
関数
nrLDPCEncode
|nrRateMatchLDPC
|nrRateRecoverLDPC
|nrLDPCDecode
|nrDLSCHInfo
|nrCRCEncode
|nrCRCDecode
|nrCodeBlockSegmentLDPC
|nrCodeBlockDesegmentLDPC
|nrULSCHInfo
|nrDLSCHDecoder
|nrDLSCH
|nrULSCH
|nrULSCHDecoder