チャネル符号化
前方誤り訂正によってリンクをシャノン限界の近くで動作させる仕組みを解説します。ブロック符号と畳み込み符号、ターボ符号・LDPC符号・ポーラ符号、軟判定復号、5G NRがどのチャネルにどの符号を使うか、HARQを扱います。
概要
チャネル符号化は、構造化された冗長性を加えることで、雑音やフェージングによる誤りを受信機が訂正できるようにします。符号化しないリンクには10 dB以上の余裕が必要ですが、現代のリンクがシャノン限界から数dBの範囲で動作できるのはチャネル符号化のおかげです。符号化利得は、無線機で得られる最も安価な利得です。処理と若干の伝送レートを必要としますが、送信電力・スペクトラム・アンテナ面積は必要としません。
本ハブでは、実用上重要な符号の系統、復号器による軟情報の使い方、セルラーシステムにおける符号化と再送の組み合わせ方を扱います。規格が特定の符号を選んだ理由、チップセットやFPGAの復号器が行っている処理、符号化リンクを正しくシミュレーションする方法を知る必要があるエンジニアを対象としています。
重要な考え方
冗長性・符号化率・軟判定
符号はK個の情報ビットをN個の符号化ビットに対応付けます。符号化率はR = K/Nです。冗長性があるため、一部のビットが誤っていても、復号器は送信された可能性が最も高い符号語を見つけられます。Hammingが1950年に発表した符号は、短いブロック内の単一誤りを訂正します。巡回冗長検査(CRC)は誤りを検出するだけです。セルラーのトランスポートブロックにはすべてCRCが付加されており、受信機は復号が成功したかどうかを判断できます。
実用上最大の利得は軟判定から得られます。復調器は0と1の硬判定値ではなく、ビットごとに対数尤度比(LLR)を渡します。LLRの正負は可能性の高い値を、大きさは信頼度を表します。軟判定復号は硬判定よりも測定可能なほど性能が高く、一部のビットが他のビットよりはるかに弱く届くフェージングチャネルでは、その差がさらに大きくなります。
畳み込み符号とターボ符号
畳み込み符号は、ビット列をシフトレジスタに通し、現在と直近の入力に依存するパリティビットを出力します。Viterbiが1967年に発表したアルゴリズムは、符号のトレリス上で最も可能性の高いパスを探索して復号します。その計算量はメッセージ長ではなく状態数に応じて増えます。畳み込み符号は現在も短い制御メッセージに使われています。
ターボ符号は、1993年にBerrou、Glavieux、Thitimajshimaが発表した符号で、2つの畳み込み符号器をインタリーバを介して連接します。復号器は軟情報を反復して交換し、原論文はシャノン限界に近い性能を報告しました。LTEはターボ符号を採用しました。3GPP TS 36.212(Release 19版)では、LTEは共有・ページング・マルチキャストのデータチャネルに符号化率1/3のターボ符号を、報知チャネルと下りリンク制御情報に符号化率1/3のテールバイティング畳み込み符号を使います。
5G NRのLDPC符号とポーラ符号
低密度パリティ検査(LDPC)符号は、1962年にGallagerが提案し、1996年にMacKayとNealが再発見した符号で、疎なパリティ検査行列で定義されます。確率伝搬(belief propagation)復号器は行列のエッジに沿ってメッセージを受け渡し、並列化しやすいため、NRの高いスループットに適しています。ポーラ符号は、2009年にArıkanが導入した符号です。対称な2元入力無記憶通信路において、低計算量の符号化・復号で通信路容量を達成することが証明されています。短いブロック長では、CRC支援の逐次除去リスト復号器で復号します。
3GPP TS 38.212(Release 19版)では、NRは上りリンク・下りリンクの共有チャネルとページングチャネルにLDPC符号を使います。2つのベースグラフが異なるブロックサイズと符号化率を受け持ちます。最大コードブロックサイズは、ベースグラフ1が8448 ビット、ベースグラフ2が3840 ビットです。ポーラ符号は、報知チャネル、下りリンク制御情報、12 ビット以上の上りリンク制御情報を保護します。11 ビット以下の上りリンク制御情報には小ブロック符号を使います。
HARQ
ハイブリッド自動再送要求(HARQ)は、符号化と再送を組み合わせる仕組みです。送信機は符号化したブロックを送信し、そのブロックを保持しておきます。CRC検査に失敗すると、受信機は軟値を保持したまま否定応答を送ります。再送されたデータは、保存済みの値と合成してから再度復号します。チェイス合成では、再送はすべて同一です。インクリメンタル冗長では、再送ごとに異なる符号化ビットを送るため、実効符号化率は試行のたびに下がります。
TS 38.300は、NRのHARQを非同期のインクリメンタル冗長と説明しています。レートマッチャはLDPCの出力を循環バッファに書き込み、0から3の値をとる冗長バージョンが読み出しの開始位置を決めます。TS 38.214は、セルあたり各方向に最大16個、端末(UE)が対応している場合は32個のHARQプロセスをサポートします。このため、前のブロックが確認応答を待っている間も、リンクは新しいデータを送り続けられます。残留誤りはHARQが捕捉するため、リンクアダプテーションは誤りゼロを目標にしません。TS 38.214の通常のCQIテーブルでは、UEはトランスポートブロック誤り確率が0.1を超えない最大のCQIを報告します。
どこから始めるか
入門トラックでは、符号化の前提となる変調と雑音を扱います。まず/learn/beginner/04-noise-snr-and-capacity/と/learn/beginner/05-digital-modulation/を読んでください。プロジェクト/projects/qpsk-modem-ber/では、符号化リンクと比較するための符号化なしのベースラインが得られます。畳み込み符号・LDPC符号・ポーラ符号の復号を扱う中級レッスンは準備中です。/reference/capacity-and-spectral-efficiency/と3GPP仕様マップを手元に置いておくと便利です。
ツールとプラットフォーム
| ツール | 用途 | ライセンス | プラットフォーム |
|---|---|---|---|
| AFF3CT | LDPC・ポーラ・ターボ・畳み込み・BCH・Reed-Solomon符号の高速なC++シミュレーション | MIT | /platforms/opensource/ |
| Sionna | リンクレベルシミュレータに含まれる5G NRのLDPC・ポーラ符号の符号器と復号器 | Apache-2.0 | /platforms/opensource/ |
| CommPy | Pythonによる畳み込み符号器、ViterbiおよびMAP復号器、ターボ符号、LDPC確率伝搬 | BSD-3-Clause | /platforms/opensource/ |
GNU Radioのfecモジュール |
畳み込み・LDPC・ポーラ符号の符号器と復号器をストリーミングブロックとして提供 | GPL-3.0 | /platforms/gnuradio/ |
復号器のハードウェアについては、FPGA GuideのDSP on FPGAハブで演算処理を解説しています。
よくある間違い
- 符号化ありと符号化なしの曲線を、Eb/N0ではなくシンボルあたりのSNRで比較すること。これでは符号化率によるペナルティが見えなくなります。
- 正負の規約やスケーリングが誤ったLLRを軟判定復号器に入力すること。まず雑音のない入力で確認してください。
- LDPC符号やターボ符号のエラーフロアを確認するには少なすぎるブロック数でシミュレーションすること。
- ブロック誤り率とビット誤り率を区別せずに引用すること。
- ある規格のLDPC復号器が別の規格でも使えると思い込むこと。パリティ検査行列が異なります。
さらに深く
- R. W. Hamming, Error detecting and error correcting codes, 「Bell System Technical Journal」 29(2), 1950.
- A. J. Viterbi, Error bounds for convolutional codes and an asymptotically optimum decoding algorithm, 「IEEE Transactions on Information Theory」 13(2), 1967.
- C. Berrou, A. Glavieux and P. Thitimajshima, Near Shannon limit error-correcting coding and decoding: turbo-codes, Proceedings of IEEE ICC ’93, 1993.
- R. G. Gallager, Low-density parity-check codes, 「IEEE Transactions on Information Theory」 8(1), 1962、および D. J. C. MacKay and R. M. Neal, Near Shannon limit performance of low density parity check codes, 「Electronics Letters」 32(18), 1996.
- E. Arıkan, Channel polarization: a method for constructing capacity-achieving codes for symmetric binary-input memoryless channels, 「IEEE Transactions on Information Theory」 55(7), 2009.
- T. Richardson and S. Kudekar, Design of low-density parity check codes for 5G New Radio, 「IEEE Communications Magazine」 56(3), 2018、および V. Bioglio, C. Condo and I. Land, Design of polar codes in 5G New Radio, 「IEEE Communications Surveys and Tutorials」 23(1), 2021.
- 3GPP TS 38.212(NRの多重化とチャネル符号化)とTS 36.212(LTEの対応仕様)。