デジタルデータの通信において、ノイズや干渉によるデータの変質は避けられない課題です。送信側から受信側にデータが届くまでの間に、ビットが反転したり欠落したりすることで、本来の意味とは異なる情報が伝わってしまうことがあります。こうした不安定な通信路においても、正確に情報を届けるための技術が誤り検出・訂正(EDAC: Error Detection and Correction)です。
簡単に言えば、誤り検出は「データが壊れていることを見つける」技術であり、誤り訂正は「壊れたデータを元の正しい状態に復元する」技術を指します。これらの仕組みは、私たちが日常的に利用するインターネットから、宇宙探査機の通信、ハードディスクのデータ保存に至るまで、あらゆるデジタルインフラの根幹を支えています。
Key Facts
- 冗長性の活用: すべての誤り制御は、チェック用の「余分なデータ(冗長ビット)」を付加することで整合性を確認する。
- ARQ(自動再送要求): 誤りを検出した際に、送信側にデータの再送を求める方式。
- FEC(前方誤り訂正): 受信側だけでデータを復元する方式で、再送が不可能なリアルタイム通信や深宇宙通信に不可欠。
- 多様なアルゴリズム: 単純なパリティビットから、高度なリード・ソロモン符号やLDPC符号まで、用途に応じて使い分けられている。
誤り制御の歴史:古代の写本から現代の理論まで
データの正確性を保とうとする試みは、コンピュータの誕生より遥か昔から存在していました。例えば、古代のヘブライ聖書の写本師たちは、書き写しのミスを防ぐために文字数を厳格にカウントしていました。7世紀から10世紀にかけては「数値的マソラ」という体系が整備され、行や節、書ごとの単語数などが詳細に記録されました。1947年に発見された死海文書の正確性は、こうした徹底した誤り訂正の習慣が数世紀にわたって機能していたことを証明しています。
現代的な誤り訂正符号の基礎を築いたのは、1947年のリチャード・ハミングです。彼の開発した「ハミング符号」は、クロード・シャノンの情報理論によって体系化され、その後マルセル・ゴレイらによってさらに発展しました。
また、デジタル時代以前の通信でも、転記ミスを防ぐための工夫が見られました。例えば、1896年の電報では、数字をあらかじめ定義されたランダムな単語に置き換えて送信することで、誤読による致命的なミスを回避していました。

誤り制御の基本原理とアプローチ
誤り制御の核心は、メッセージに冗長性(本来の情報以上のデータ)を持たせることにあります。これにより、受信側でデータの整合性を検証することが可能になります。手法は大きく分けて2つの形式があります。
- 組織的符号(Systematic): 元のデータに、計算によって導き出したチェックビットを単純に付け加える形式。
- 非組織的符号(Non-systematic): 元のデータを変換し、情報そのものを符号化したメッセージとして送信する形式。
また、発生するエラーの性質によって対策が異なります。ランダムに発生する「単発エラー」と、連続して発生する「バーストエラー」があり、それぞれに適した符号を選択する必要があります。通信路の特性が不明確な場合は、検出と再送を組み合わせたARQ(自動再送要求)や、FECとARQを併用したハイブリッドARQ(HARQ)が採用されます。
誤り訂正の主要な手法
1. 自動再送要求 (ARQ)
受信側がエラーを検知した際、送信側に「正しく届かなかった」ことを伝え、データの再送を求める方式です。確認応答(ACK)や否定応答(NACK)、タイムアウトなどの仕組みを利用します。インターネットのTCP/IPなどのプロトコルで広く利用されています。
2. 前方誤り訂正 (FEC)
送信時にあらかじめ十分な冗長データを付加し、受信側でエラーを自己修復させる方式です。送信側へのフィードバック(戻り道)が不要なため、以下のケースで必須となります。
- 低遅延が求められる通信: 電話などのリアルタイム会話(再送を待つ時間がないため)。
- 一方向の送信: テレビ放送や宇宙探査機(再送要求を送る手段がない、または時間がかかりすぎるため)。
- ストレージ: フラッシュメモリやHDD(書き込まれた後に再送を求めることができないため)。
FECには、ビット単位で処理する「畳み込み符号」と、ブロック単位で処理する「ブロック符号」があります。ブロック符号の代表例であるリード・ソロモン符号は、CDやDVDの傷によるデータ欠損の修復に利用されています。
地球の大気圏を通過する際に生じる通信エラーを、ゴダード宇宙飛行センターの科学者がリード・ソロモン符号を用いてクリーンアップした例があります。これにより、欠落したピクセルや偽信号が除去され、鮮明な画像が復元されました。

3. ハイブリッド方式 (HARQ)
FECとARQを組み合わせた手法です。まずFECで修復を試み、それでも不十分な場合にのみARQで再送を要求する、あるいは最初は最小限のデータで送り、エラーが出た時だけFEC用の情報を追加で送るというアプローチがあります。
誤り検出の具体的なテクニック
誤り検出は、主にハッシュ関数やチェックサムを用いて行われます。受信側で同じ計算を行い、送信されたタグと一致するかを確認します。
- パリティビット: 最も単純な手法で、1の個数が偶数か奇数かを確認します。単一ビットのエラー検出に有効です。
- チェックサム: データの合計値を計算して付加します。人間による入力ミスを検知するルーンアルゴリズムなどが含まれます。
- 巡回冗長検査 (CRC): バーストエラーの検出に非常に強く、イーサネットやハードディスクなどのハードウェア実装に最適です。
- 暗号学的ハッシュ関数・デジタル署名: 偶発的なエラーだけでなく、悪意のある改ざんを検知するために利用されます。HTTPS通信の根幹を成す技術です。
実社会での応用例
| 適用分野 | 採用技術 | 目的・理由 |
|---|---|---|
| インターネット (TCP/IP) | CRC-32, チェックサム, ARQ | パケットの整合性確認と確実な配送 |
| 深宇宙通信 (Voyager等) | 畳み込み符号, リード・ソロモン符号 | 極めて微弱な信号からのデータ復元 |
| データストレージ (HDD/SSD) | リード・ソロモン符号, ECCメモリ | 物理的な劣化や放射線によるビット反転の防止 |
| 光学メディア (CD/DVD) | リード・ソロモン符号 | ディスク表面の傷によるデータ欠損の補完 |
深宇宙探査における挑戦
惑星間通信では、信号が極端に減衰するため、高度な誤り訂正が不可欠です。初期のミッションでは単純な符号が使われていましたが、ボイジャー計画では畳み込み符号とゴレイ符号、さらにはリード・ソロモン符号を組み合わせた強力な階層構造が採用されました。現在は、さらに効率的なターボ符号やLDPC符号への移行が進んでいます。
メモリの信頼性向上 (ECCメモリ)
サーバーや科学計算用PCで使われるECCメモリは、宇宙線などの影響でメモリ上のビットが反転する「ソフトエラー」を防ぎます。ハミング符号などを用いて、動作中に発生したエラーをリアルタイムで検出し、修正することでシステムダウンを回避しています。
Frequently Asked Questions
誤り検出と誤り訂正の決定的な違いは何ですか?
誤り検出は「データに間違いがあること」を知らせるだけで、どこが間違っているか、どう直すべきかは判断しません。一方、誤り訂正は間違いを検知した上で、元の正しいデータを数学的に導き出して復元します。
なぜすべての通信に誤り訂正(FEC)を使わないのですか?
FECはデータに冗長な情報を付加するため、送信データ量が増え、帯域を圧迫します。また、計算負荷も高くなります。再送が可能な環境であれば、シンプルな検出(CRCなど)と再送(ARQ)を組み合わせる方が効率的であるためです。
リード・ソロモン符号がCDやDVDに使われているのはなぜですか?
CDやDVDの傷は、特定の箇所がまとめて消える「バーストエラー」という形式で発生します。リード・ソロモン符号はこのような連続的なデータ欠損に非常に強く、一部が物理的に失われても復元できるため最適なのです。
インターネットではどのようにエラーを防いでいますか?
多層的な防御が行われています。物理層に近いイーサネットではCRCでエラーを検出し、不適切なフレームを破棄します。また、トランスポート層(TCP)では、届かなかったデータを再送させるARQの仕組みによって、最終的なデータの完全性を保証しています。
ECCメモリは一般のPCにも必要ですか?
一般的な利用であれば、OSやアプリケーション側でエラーが処理されることが多く、必須ではありません。しかし、金融システムや医療機器、科学計算など、たった1ビットの誤りが致命的な結果を招くミッションクリティカルな環境では不可欠な技術です。
References
- "Masorah". Jewish Encyclopedia.
- Pratico, Gary D.; Pelt, Miles V. Van (2009). Basics of Biblical Hebrew Grammar: Second Edition. Zondervan. .
- Mounce, William D. (2007). Greek for the Rest of Us: Using Greek Tools Without Mastering Biblical Languages. Zondervan. p. 289. .
- , Tefillin, Mezuzah, and Sefer Torah, 1:2. Example English translation: Eliyahu Touger. The Rambam's Mishneh Torah. Moznaim Publishing Corporation.
- Brian M. Fagan (5 December 1996). "Dead Sea Scrolls". The Oxford Companion to Archaeology. . .
- Thompson, Thomas M. (1983), From Error-Correcting Codes through Sphere Packings to Simple Groups, The Carus Mathematical Monographs (#21), The Mathematical Association of America, p. vii,
- Shannon, C.E. (1948), "A Mathematical Theory of Communication", Bell System Technical Journal, 27 (3): 379–423, :10.1002/j.1538-7305.1948.tb01338.x, :10338.dmlcz/101429, 9230594
- Golay, Marcel J. E. (1949), "Notes on Digital Coding", Proc.I.R.E. (I.E.E.E.), 37: 657
- Gupta, Vikas; Verma, Chanderkant (November 2012). "Error Detection and Correction: An Introduction". International Journal of Advanced Research in Computer Science and Software Engineering. 2 (11). 17499858.
- A. J. McAuley, Reliable Broadband Communication Using a Burst Erasure Correcting Code, ACM SIGCOMM, 1990.
📸 フォトギャラリー

