このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
HARQ を使用した 5G NR トランスポート チャネルのモデル化
この例では、ダウンリンク共有チャネル (DL-SCH) の符号化器と復号化器の 5G Toolbox™ System object を使用し、複数のハイブリッド自動再送要求 (HARQ) プロセスで 5G NR トランスポート チャネルをモデル化する方法を示します。
はじめに
次の図は、5G ダウンリンク リンクのコンテキストのうち、この例においてモデル化されるリンク要素を示しています。その要素は以下のとおりです。
DL-SCH の符号化と復号化
物理ダウンリンク共有チャネル (PDSCH) の符号化と復号化
HARQ 管理
他のリンク要素は、この例でモデル化されていません。
この例では、AWGN チャネルを使用してブロック エラー レート (BLER) も測定します。次の図は、この例でモデル化されるすべてのリンク要素とそれに続く BLER の計算を示しています。
次の図は、DL-SCH 符号化器が内部バッファーを使用して各 HARQ プロセスのトランスポート ブロックを保存し、次にアクティブな HARQ プロセス バッファー コンテンツを選択して符号化することを示しています。DL-SCH 復号化器は、同様のバッファリング メカニズムを使用して、HARQ プロセスを保存および選択します。
DL-SCH 符号化器および復号化器は、HARQ プロセスを内部的に管理しません。この例では、HARQ プロセスの管理に HARQ エンティティ オブジェクト HARQEntity.m
を使用します。次の図は、HARQ エンティティ オブジェクトの構造を示しています。
シミュレーション パラメーター
シミュレーションするトランスポート ブロックの数と S/N 比 (SNR) を指定します。
noTransportBlocks = 100;
SNRdB = 7; % SNR in dB
再現性を確保するために乱数発生器をリセットします。
rng("default");
DL-SCH 構成
符号化率、HARQ プロセスの数、および冗長値 (RV) シーケンスを指定します。このシーケンスは、エラーが発生した場合の冗長バージョンの再送信を制御します。
% DL-SCH parameters codeRate = 490/1024; NHARQProcesses = 16; % Number of parallel HARQ processes to use rvSeq = [0 2 3 1];
DL-SCH の符号化器オブジェクトおよび復号化器オブジェクトを作成します。複数のプロセスを使用するには、両方のオブジェクトで MultipleHARQProcesses
プロパティを true
に設定します。複数の HARQ プロセスで再送信を有効にするために、符号化器は入力ビットをバッファリングします。復号化器でも、各 HARQ プロセスで再送信のソフト結合を有効にする同様のメカニズムが必要です。
% Create DL-SCH encoder object encodeDLSCH = nrDLSCH; encodeDLSCH.MultipleHARQProcesses = true; encodeDLSCH.TargetCodeRate = codeRate; % Create DL-SCH decoder object decodeDLSCH = nrDLSCHDecoder; decodeDLSCH.MultipleHARQProcesses = true; decodeDLSCH.TargetCodeRate = codeRate; decodeDLSCH.LDPCDecodingAlgorithm = "Normalized min-sum"; decodeDLSCH.MaximumLDPCIterationCount = 6;
DL-SCH の符号化器オブジェクトおよび復号化器オブジェクトは、最大 16 個の HARQ プロセスをモデル化できます。符号化器および復号化器のオブジェクトは、以下の操作のいずれかを実行するときに、HARQ エンティティ オブジェクトの HARQprocessID
プロパティを使用してアクティブな HARQ プロセスを特定します。
送信する新しいトランスポート ブロックの設定
データの符号化
ソフト バッファーのリセット
データの復号化
キャリアと PDSCH の構成
キャリアと PDSCH パラメーターを指定します。これらのパラメーターは、PDSCH の符号化と復号化、およびトランスポート ブロック サイズの計算に使用されます。
サブキャリア間隔 (SCS) と帯域幅 (BW) を指定して、キャリア オブジェクトを作成します。
% Numerology SCS = 15; % SCS: 15, 30, 60, 120 or 240 (kHz) NRB = 52; % BW in number of RBs (52 RBs at 15 kHz SCS for 10 MHz BW) carrier = nrCarrierConfig; carrier.NSizeGrid = NRB; carrier.SubcarrierSpacing = SCS; carrier.CyclicPrefix = "Normal"; % "Normal" or "Extended"
PDSCH 構成オブジェクトを作成します。PDSCH パラメーターは、使用可能なビット容量とトランスポート ブロック サイズを決定します。
modulation = "16QAM"; % Modulation scheme pdsch = nrPDSCHConfig; pdsch.Modulation = modulation; pdsch.PRBSet = 0:NRB-1; % Assume full band allocation pdsch.NumLayers = 1; % Assume only one layer and one codeword
HARQ 管理
HARQ プロセスを管理する HARQ エンティティ オブジェクトを作成します。HARQ プロセスごとに、オブジェクトは以下の要素を保存します。
HARQ ID 番号。
RV。
特定のトランスポート ブロックが何回送信されたかを示す送信番号。
新しいデータが必要かどうかを示すフラグ。トランスポート ブロックが正常に受信された場合、またはシーケンス タイムアウトが発生した場合 (すべての RV 送信が失敗した場合) は、新しいデータが必要です。
シーケンス タイムアウトが発生した (すべての RV 送信が失敗した) かどうかを示すフラグ。
harqEntity = HARQEntity(0:NHARQProcesses-1,rvSeq,pdsch.NumCodewords);
HARQ エンティティは、DL-SCH 符号化器および復号化器でバッファーを管理するために使用されます。
BER シミュレーション
トランスポート ブロックの数だけループ処理します。各トランスポート ブロックで、次を行います。
トランスポート ブロック サイズをビット数で計算。
新しいデータ ブロックを生成するか、復号化器でバッファーをリセット。
DL-SCH 符号化を適用。
ビットをシンボルに変調。
AWGN を適用。
ソフト ビットを復調 (シンボルからソフト ビット)。
DL-SCH を復号化。
HARQ プロセスを更新。
% Initialize loop variables noiseVar = 1./(10.^(SNRdB/10)); % Noise variance numBlkErr = 0; % Number of block errors numRxBits = []; % Number of successfully received bits per transmission txedTrBlkSizes = []; % Number of transmitted info bits per transmission for nTrBlk = 1:noTransportBlocks % A transport block or transmission time interval (TTI) corresponds to % one slot carrier.NSlot = carrier.NSlot+1;
トランスポート ブロック サイズの計算
トランスポート ブロック サイズを計算します。
% Generate PDSCH indices info, which is used to calculate the transport % block size [~,pdschInfo] = nrPDSCHIndices(carrier,pdsch); % Calculate transport block sizes Xoh_PDSCH = 0; trBlkSizes = nrTBS(pdsch.Modulation,pdsch.NumLayers,numel(pdsch.PRBSet),pdschInfo.NREPerPRB,codeRate,Xoh_PDSCH);
ビット単位の PDSCH 容量 pdsch.G
は動的に決定されるため、実際の符号化率は、encodeDLSCH
オブジェクトの TargetCodeRate
プロパティによって指定されるターゲット符号化率と厳密に等しくない場合があります。
HARQ 処理 (バッファー管理)
このセクションでは、符号化器および復号化器でのバッファー管理について説明します。
DL-SCH 符号化器バッファー: アクティブな HARQ プロセスに新しいデータが必要な場合は、新しいトランスポート ブロックを生成します。トランスポート ブロックを対応するバッファーに保存します。新しいデータが必要ない場合、DL-SCH 符号化器でバッファリングされたビットが再送信に使用されます。
DL-SCH 復号化器バッファー: 受信機のソフト バッファーには、同じトランスポート ブロックの過去に受信済みのバージョンが保存されます。これらのバッファーは、受信が成功 (CRC エラーなし) すると自動的にクリアされます。ただし、復号化に成功せずに RV シーケンスが終了した場合は、オブジェクト関数
resetSoftBuffer
を呼び出してバッファーを手動でフラッシュしなければなりません。
% Get new transport blocks and flush decoder soft buffer, as required for cwIdx = 1:pdsch.NumCodewords if harqEntity.NewData(cwIdx) % Create and store a new transport block for transmission trBlk = randi([0 1],trBlkSizes(cwIdx),1); setTransportBlock(encodeDLSCH,trBlk,cwIdx-1,harqEntity.HARQProcessID); % If the previous RV sequence ends without successful decoding, % flush the soft buffer explicitly if harqEntity.SequenceTimeout(cwIdx) resetSoftBuffer(decodeDLSCH,cwIdx-1,harqEntity.HARQProcessID); end end end
DL-SCH 符号化
DL-SCH トランスポート ブロックを符号化します。
codedTrBlock = encodeDLSCH(pdsch.Modulation,pdsch.NumLayers,pdschInfo.G, ...
harqEntity.RedundancyVersion,harqEntity.HARQProcessID);
PDSCH 符号化
PDSCH シンボルを生成します。
modOut = nrPDSCH(carrier,pdsch,codedTrBlock);
AWGN チャネル
ホワイト ガウス ノイズを付加します。
rxSig = awgn(modOut,SNRdB);
PDSCH 復調
受信したシンボルを軟復調します。
rxLLR = nrPDSCHDecode(carrier,pdsch,rxSig,noiseVar);
DL-SCH 復号化
DL-SCH 復号化を適用します。
decodeDLSCH.TransportBlockLength = trBlkSizes;
[decbits,blkerr] = decodeDLSCH(rxLLR,pdsch.Modulation,pdsch.NumLayers, ...
harqEntity.RedundancyVersion,harqEntity.HARQProcessID);
結果
結果を保存して BLER を計算します。
% Store values to calculate throughput (only for active transport blocks) if(any(trBlkSizes ~= 0)) numRxBits = [numRxBits trBlkSizes.*(1-blkerr)]; txedTrBlkSizes = [txedTrBlkSizes trBlkSizes]; end if blkerr numBlkErr = numBlkErr + 1; end
HARQ プロセスの更新
現在の HARQ プロセスを CRC エラーで更新し、次のプロセスに進みます。このステップは、HARQ エンティティ内のアクティブな HARQ プロセスに関連する情報を更新します。
statusReport = updateAndAdvance(harqEntity,blkerr,trBlkSizes,pdschInfo.G);
現在の復号化の試行に関する情報を表示します。
disp("Slot "+(nTrBlk)+". "+statusReport); end % for nTrBlk = 1:noTransportBlocks
Slot 1. HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 2. HARQ Proc 1: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 3. HARQ Proc 2: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 4. HARQ Proc 3: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 5. HARQ Proc 4: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 6. HARQ Proc 5: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 7. HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 8. HARQ Proc 7: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 9. HARQ Proc 8: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 10. HARQ Proc 9: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 11. HARQ Proc 10: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 12. HARQ Proc 11: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 13. HARQ Proc 12: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 14. HARQ Proc 13: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 15. HARQ Proc 14: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 16. HARQ Proc 15: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 17. HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 18. HARQ Proc 1: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 19. HARQ Proc 2: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 20. HARQ Proc 3: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 21. HARQ Proc 4: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 22. HARQ Proc 5: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 23. HARQ Proc 6: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 24. HARQ Proc 7: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 25. HARQ Proc 8: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 26. HARQ Proc 9: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 27. HARQ Proc 10: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 28. HARQ Proc 11: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 29. HARQ Proc 12: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 30. HARQ Proc 13: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 31. HARQ Proc 14: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 32. HARQ Proc 15: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 33. HARQ Proc 0: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 34. HARQ Proc 1: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 35. HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 36. HARQ Proc 3: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 37. HARQ Proc 4: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 38. HARQ Proc 5: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 39. HARQ Proc 6: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 40. HARQ Proc 7: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 41. HARQ Proc 8: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 42. HARQ Proc 9: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 43. HARQ Proc 10: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 44. HARQ Proc 11: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 45. HARQ Proc 12: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 46. HARQ Proc 13: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 47. HARQ Proc 14: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 48. HARQ Proc 15: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 49. HARQ Proc 0: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 50. HARQ Proc 1: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 51. HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 52. HARQ Proc 3: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 53. HARQ Proc 4: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 54. HARQ Proc 5: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 55. HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 56. HARQ Proc 7: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 57. HARQ Proc 8: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 58. HARQ Proc 9: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 59. HARQ Proc 10: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 60. HARQ Proc 11: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 61. HARQ Proc 12: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 62. HARQ Proc 13: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 63. HARQ Proc 14: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 64. HARQ Proc 15: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 65. HARQ Proc 0: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 66. HARQ Proc 1: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 67. HARQ Proc 2: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 68. HARQ Proc 3: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 69. HARQ Proc 4: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 70. HARQ Proc 5: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 71. HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 72. HARQ Proc 7: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 73. HARQ Proc 8: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 74. HARQ Proc 9: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 75. HARQ Proc 10: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 76. HARQ Proc 11: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 77. HARQ Proc 12: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 78. HARQ Proc 13: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 79. HARQ Proc 14: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 80. HARQ Proc 15: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 81. HARQ Proc 0: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 82. HARQ Proc 1: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 83. HARQ Proc 2: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 84. HARQ Proc 3: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 85. HARQ Proc 4: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 86. HARQ Proc 5: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 87. HARQ Proc 6: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 88. HARQ Proc 7: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 89. HARQ Proc 8: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 90. HARQ Proc 9: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 91. HARQ Proc 10: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 92. HARQ Proc 11: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 93. HARQ Proc 12: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 94. HARQ Proc 13: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 95. HARQ Proc 14: CW0: Retransmission #1 passed (RV=2,CR=0.481509). Slot 96. HARQ Proc 15: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 97. HARQ Proc 0: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 98. HARQ Proc 1: CW0: Initial transmission failed (RV=0,CR=0.481509). Slot 99. HARQ Proc 2: CW0: Initial transmission passed (RV=0,CR=0.481509). Slot 100. HARQ Proc 3: CW0: Initial transmission failed (RV=0,CR=0.481509).
BLER の結果
BLER とスループット (正常に受信されたトランスポート ブロックの割合) を計算します。統計的に意味のある結果を得るには、多くのトランスポート ブロックに対してこのシミュレーションを実行します。
maxThroughput = sum(txedTrBlkSizes); % Maximum possible throughput totalNumRxBits = sum(numRxBits,2); % Number of successfully received bits disp("Block Error Rate: "+string(numBlkErr/noTransportBlocks))
Block Error Rate: 0.42
disp("Throughput: " + string(totalNumRxBits*100/maxThroughput) + "%")
Throughput: 58%