データのエラーは2通りの方法で生じる.一つは,メモリーやハードディスクの製造時に おける欠陥である.もう一つは,稼働時のおける書き込みあるいは読み込みの間違い,あ るいはデータ保存時にビットが変化してしまうことによるエラーである.
前者のエラー,製造時のエラーは欠陥部分を使わないようにしてしまうことにより回避で きる.いつも,同じ場所でエラーが生じるので,検査によりそのビットを使わないように する.
ここで問題とするのは後者のエラーである.すなわち,装置に欠陥が無いものの,書き込 んだものと異なる値が読み出される場合である.これは熱や宇宙線の作用により,記憶装 置のビットが変化する場合に起きる.このようなビットの変化は,ランダムに生じ,時や 場所を特定することができない.
ランダムにビットが変化するようなエラーは,情報の保存のみならず,情報の伝達の時も 生じる.情報を伝達のケーブルの電圧を下げると熱振動によるノイズの影響によりビット が変化するかもしれない.また,通信速度を上げると,パルス幅が短くなり,トランジス ターが誤動作するかもしれない.
熱や宇宙線によるこれらのビットの変化が生じる確率は,ゼロでは無いが非常に少ない.問題の無 いレベルになるように,記憶装置や通信装置を慎重に設計を行わなければならない.ただ, ゼロにすることは不可能なので,ビットが変化しても情報が失われないように,データ蓄 積と転送のとき工夫する.
データ蓄積と転送は全く異なる技術に見えるが,ランダムにビットが変化するエラーを防 ぐためには同じような技術が使える.
データを読み出すときに,1の数を数えれば誤りの有無が分かる.もし,何らかの原因で どれか一つのビットが反転した場合,全体の1の数は奇数となるので,おかしいと気 付く.
この方法だと,二つのビットの誤り(二重誤り)には気付かない.どのようにすれば,二重 あるいは3重の誤りが分かるだろうか?
偶数パリティを加えることにより,正しい符号のハミング距離は2以上になる.パリティ ビットを含んだ符号全体の1の数は,いつも偶数であるからである.従って,一つの誤り が生じると,正しい場合に比べてハミング距離が1変化し,不当な符号になる.もし,2重 の誤りが生じると,正しい符号と区別がつかなくなる.従って,誤りの検出ができない.
このことを一般化すると,個の誤りを検出するためには,正しい符号のハミング距離
を
以上にする必要がある(図1).
個のビットの誤りがある場合,ハミング距離が
以上ならば,誤りを検出して訂
正までできる.このことを,図2を用いて説明する.この図,次
のように理解する.
実際に,誤りの訂正ができることを教科書のハミング符号で示す(図 3).この教科書のハミング符号によると,以下のようなこと が分かる.
実際に使われているハミング符号は,もっと高度なもので,高速に処理ができるようになっ ている.教科書のハミング符号は,分かりやすく書くために書かれており,処理の効率は 悪い.