レッスン
理論 — ハミング符号:位置を突き止めてビットを訂正する
ハミング符号はデータにパリティビットを加え、反転した一ビットを見つけて元に戻せるようにします。各パリティビットは、選ばれた位置にある1の個数を偶数にします。これがパリティ検査です。復号器は受信語に対して同じ検査を行います。失敗のパターンであるシンドロームを二進数として読むと、誤ったビットの位置が得られ、0なら誤りなしを表します。チェックディジットでわかるのは、どこかが誤っていることまでです。ハミング符号なら位置までわかります。拡張符号は、符号語全体の1の個数を偶数にするビットを一つ加えます。これにより、任意の一箇所の反転を訂正し、任意の二箇所の反転を訂正せずに検出できます。これがSECDEDです。
各記号の意味
dᵢ- 位置3、5、6、7にある四つのデータビット
p₁, p₂, p₄- それぞれ添字と同じ位置に置かれるパリティビット。p0は拡張符号の全体パリティビット
s- シンドローム4s4 + 2s2 + s1。受信時に円kの1の個数が奇数なら、skは1
P- 拡張符号で受信した全ビットのパリティ。1なら反転数が奇数
p- ビット誤り率。各ビットがほかのビットとは独立に反転する確率
- 前提
- すべてのビットが同じ確率pで、互いに独立に反転すると仮定します。現実の通信路やメモリでは、隣接する複数のビットが一度に壊れるバースト誤りも起こります。こうした多重反転は、この種の符号が最も苦手とする誤りです。
- 成り立たない場合
- 三箇所が反転すると破綻します。拡張符号では全体パリティが奇数になるため、三重反転を一重反転と読み違え、正しかったビットを訂正してしまいます。全反転を調べた表では、896通りの三重反転がすべて、フラグなしで誤ったデータを出力しています。
全プロセスの詳細解説
-
64ビット語にはパリティビットがいくつ必要か 4 ステップ
64個のデータビットを同じ方法で保護します。 拡張符号・一箇所反転を押してください。四つのデータビットに四つのパリティビットを使い、符号化率は50.0%です。一つの64ビット語について、任意の一箇所の反転を訂正し、任意の二箇所を検出するには、パリティビットがいくつ必要でしょうか。また、このプリセットのp = 0.001では、長い符号語にどれほどの代償が生じるでしょうか。
-
パリティ検査がr個なら、シンドロームは2r通りの値を取ります。一つは誤りなしを表し、m + r個の各位置にも固有の値が必要なので、2r ≥ m + r + 1です。このページではm = 4で、r = 3なら余りなく条件を満たします。
-
m = 64の場合、検査が六つでは64通りしかなく、必要な71通りに足りません。七つなら128通りあり、72ビットに十分です。したがって、71ビットあれば任意の一箇所の反転を訂正できます。
-
さらに全体パリティビットを一つ加えると72ビットになり、そのうち8ビットが検査用です。符号化率は88.9%で、このページの50.0%を大きく上回ります。
-
ただし、符号語が長いほど二箇所反転を拾いやすくなります。SECDEDが訂正できないのは、まさにこの二重反転です。一つの8ビット語でその確率を求めるには、ページに表示された二つの値を足します。
解答
パリティビットは八つ、符号語は72ビット、符号化率は88.9%です。 p = 0.001では、二箇所以上が反転する確率は2.44×10⁻³です。同じ64ビットを十六個の8ビット語として送る場合、どれか一つでも失われる確率は4.46×10⁻⁴です。長い符号語では64ビットを失う確率が約5.5倍になる一方、パリティビット数は八分の一で済みます。
-
学習の道すじ
アルゴリズムが正しい理由
参考文献 (2)
- The code itself, the requirement that the checking number give the position of any single error, the check positions 1, 2, 4 and the reason for them, the extended code that adds double-error detection, and the relay computers that motivated it: R. W. Hamming, "Error Detecting and Error Correcting Codes." Bell System Technical Journal 29(2), April 1950, pp. 147-160. DOI 10.1002/j.1538-7305.1950.tb00463.x
- How Hamming told the story in his later course: a relay computer that could detect an error, retried three times and then dropped the problem, and the question that followed: R. W. Hamming, The Art of Doing Science and Engineering: Learning to Learn, Session 12, "Error-Correcting Codes". Lecture slides, Naval Postgraduate School, Monterey (course delivered 1995).