誤り訂正(ECC)の原理・方式・実装と最新動向 — 実務で使える設計ガイド

はじめに:誤り訂正とは何か

誤り訂正(Error Correction / ECC)は、ノイズや損失のある伝送路や記憶媒体で発生するビット誤りを検出・訂正するための数学的手法群です。通信・ストレージ・メモリ・光学メディアなど、デジタルシステムの信頼性を左右する基盤技術であり、符号化率(code rate)、復号複雑度、遅延、電力消費などのトレードオフを考慮して選定・実装されます。

基本概念と指標

代表的な用語・指標は次の通りです。

  • 符号長 n と情報長 k:ブロック符号では n ビット中 k ビットが情報、n−k が冗長ビット。
  • 符号率 R=k/n:冗長性の逆。R が低いほど冗長が多く、訂正能力が高くなる傾向。
  • ハミング距離 d_min:任意の異なる符号語間の最小ビット差。d_min が大きいほど誤り訂正力が高い(一般に t=⌊(d_min−1)/2⌋ ビットの誤りを訂正)。
  • ビット誤り率(BER)・フレーム誤り率(FER):システム性能を評価する基本指標。
  • シャノン限界(Shannon limit):与えられた帯域幅・SNR に対して誤り無く通信できる最大レートの情報理論的上限。

代表的な誤り訂正方式

パリティと巡回冗長検査(CRC)

単純なパリティは偶奇をチェックするだけで訂正はできません。CRC(Cyclic Redundancy Check)は多項式除算に基づく検出符号であり、Ethernet(CRC-32)などで広く用いられます。CRC は誤りの検出に優れるが、訂正機能はないため通常は FEC と併用されるか、ARQ(自動再送要求)で使われます。

ハミング符号とSECDED

ハミング符号は最も基本的な線形ブロック符号で、最小ハミング距離 3 を持ち単一誤りの訂正が可能です。実務では1ビット訂正・2ビット検出(SECDED)を実現するためにパリティを追加した拡張ハミングが使われます。サーバーの ECC DIMM(72-bit)などに見られる実装が代表例です。

畳み込み符号とビタビ復号

畳み込み符号は連続データ向けの符号化で、受信では Viterbi アルゴリズム(最尤復号)を用いることが多いです。リアルタイム性が要求される回線符号に適しており、かつて音声通信や衛星通信で広く使われました。

リード・ソロモン(RS)符号

RS は有限体(GF(2^m))上のブロック符号で、シンボル単位(バイト単位など)での誤りに強いため、光学メディア(CD/DVD)やストレージでよく用いられます。例えば RS(255,223) は 32 バイトの冗長により最大 16 シンボルの誤りを訂正できます。CD の CIRC(Cross-Interleaved Reed–Solomon Coding)は典型的な応用例です。

BCH 符号

BCH は二進ブロック符号で、任意の t に対する t ビット訂正符号を構成可能です。フラッシュメモリや組み込み用途で使われることが多く、NAND の初期世代では BCH が主流でした。

低密度パリティ検査(LDPC)符号

LDPC はパリティ検査行列が疎であることを利用した線形符号で、反復(belief propagation)復号によってシャノン限界に近い性能を実現します。DVB-S2、Wi‑Fi(オプション)、5G(データチャネルの主要符号)や SSD の近年の NAND 対策で広く採用されています。LDPC は「ウォーターフォール領域」と呼ばれる急激な BER の改善と、低 BER 領域での「誤り床(error floor)」が設計上の課題です。

ターボ符号とポーラー符号

ターボ符号は反復復号により極めて良好な性能を示し、LTE(3GPP)世代では広く使われました。5G NR では制御チャネルにポーラー符号(Polar codes)が採用され、これも理論上の極限に近づく新しい構成です。LDPC とポーラーの使い分けは5G仕様(3GPP)で明確に定められています。

ラティス/小包(Fountain)符号

LT 符号や Raptor 符号のような Fountain 符号は、不特定多数へのブロードキャストやパケットの欠失がランダムに起きる状況(例えば P2P、配信)で有効な「漸化的」符号です。受信側は十分な独立シンボルを受け取れば復元できます(エラーレスに近い性質)。

検出(CRC/パリティ)と訂正(FEC/ARQ)の組合せ

検出と訂正はしばしば組み合わせて用いられます。FEC(前方誤り訂正)は再送無しで訂正を行うため遅延が小さい用途に向き、ARQ は誤りが検出されたフレームを再送して確実性を高めます。通信システムでは HARQ(Hybrid ARQ:FEC と再送の組合せ)を用い、ソフト情報を活用した逐次結合により効率を上げます(3G/4G/5G で一般的)。

実装面の考慮点

  • 遅延とバッファサイズ:リアルタイム処理(音声や制御)では復号遅延が制約となる。ブロック長が長いほど性能は良いが遅延も増える。
  • 計算資源:LDPC の反復復号や Viterbi の大規模状態数は FPGA/ASIC 実装が一般的。組み込み CPU でのソフト実装は処理負荷を考慮する必要。
  • 電力:IoT やモバイル機器では復号の電力消費が重要。低複雑度符号が選ばれる場合がある。
  • 誤りモデル:ビット反転(BSC)、ガウシアン(AWGN)、バースト誤りなど、チャネル特性に応じた符号設計(インタリーブ併用など)が必要。
  • インタリーブ:バースト誤りを広く分散させるための手法で、RS やターボ符号などと組み合わせると効果的。

設計と評価方法

実務では次の手順で符号を選定・検証します。

  • チャネルモデルの特定(BER、バースト長、SNR 統計)。
  • 要件整理(遅延許容、符号率、ハードウェア制約)。
  • 候補符号のシミュレーション:BER/FER カーブ、スループット、実装推定(ルックアップ表、反復回数)。
  • プロトタイプ実装(FPGA/ソフト)で実動作評価。
  • 長期間の信頼性試験と誤り床の確認(特に LDPC)。

実世界での応用例

  • メモリ:ECC DIMM(72/64 ビット、SECDED)でサーバ信頼性を確保。
  • ストレージ:HDD/SSD はセクタやページの誤り訂正に BCH/LDPC を使用。NAND の世代上昇で LDPC に移行。
  • 光学メディア:CD の CIRC、DVD の RS ベースの製品コード。
  • 衛星・放送:DVB-S2 は LDPC+BCH の組合せで高性能。
  • モバイル通信:LTE(ターボ符号)、5G NR(制御:Polar、データ:LDPC)、HARQ による信頼性向上。
  • 分散ストレージ:RAID-6 は二重パリティ(しばしば RS をベース)で複数障害に対応。

最新動向と今後の展望

近年は LDPC の成熟とポーラー符号の実用化が進み、さらにディープラーニングを用いたニューラル復号の研究も活発です。ストレージ分野では NAND の高密度化に伴い LDPC の採用が拡大し、適応的な復号アルゴリズム(反復回数の調整やソフト判定の活用)で延命を図っています。さらに量子誤り訂正(Quantum Error Correction)は量子コンピュータの実用化に向けた重要課題です。

設計上の実務的アドバイス

  • まずは要件(スループット、遅延、許容誤り率)を明確にすること。
  • 短期プロトタイプは既存のライブラリ(LDPC/Polar 実装、libfec 等)で性能を測る。
  • ソフト決定(LLR)情報を取り扱える設計にすると復号性能が向上する(HARQ/反復復号で重要)。
  • 誤り床が問題になりやすい符号(LDPC 等)は長時間試験での検証を必ず行う。
  • メモリ・ストレージでは CRC と FEC を併用し、検出→再試行の仕組みを設ける。

まとめ

誤り訂正は単なる理論ではなく、実際のシステム設計で性能とコストを最適化するための実務技術です。ハミングやRS といった古典的手法から LDPC・Polar・Fountain のような近年の方式まで、目的と制約に応じて適切な選択と検証を行うことが重要です。通信やストレージの要求が高まる中、アルゴリズム・実装・検証の三位一体で設計する姿勢が求められます。

参考文献