> hamming | (7,4) | ecc <
// ハミングコード – 信頼性の高いデータ伝送のための誤り訂正コード
誤り訂正
データ内の 1 ビット誤りを自動的に検出して訂正します。
二重誤りの検出
各ブロック内の 2 ビット誤りを検出できます(訂正はできません)。
オーバーヘッドが小さい
4 ビットのデータに対してパリティビットはわずか 3 ビット(効率 75%)。
>> 技術情報
ハミングコードの仕組み:
Hamming(7,4) コードは、4 ビットのデータごとに 3 ビットのパリティビットを追加し、7 ビット長のブロックを生成します。パリティビットは 2 のべき乗の位置(1, 2, 4)に配置されます。誤りが発生すると、シンドローム(パリティチェックの結果)が誤りビットの位置を直接示します。
Hamming(7,4) の構造:
データ: 1011 (4 ビット) 位置: P1 P2 D1 P3 D2 D3 D4 Hamming: 1 0 1 1 0 1 1 P1 = D1 ⊕ D2 ⊕ D4 = 1 ⊕ 0 ⊕ 1 = 0 P2 = D1 ⊕ D3 ⊕ D4 = 1 ⊕ 1 ⊕ 1 = 1 P3 = D2 ⊕ D3 ⊕ D4 = 0 ⊕ 1 ⊕ 1 = 0
ハミングコードを使う理由:
- >メモリエラー訂正
- >衛星通信
- >データストレージシステム
- >ネットワーク伝送
- >RAID アレイ
>> よくある質問
ハミングコードとは?
ハミングコードは、リチャード・ハミングが 1950 年に考案した誤り訂正コードです。データにパリティビットを追加し、1 ビット誤りを自動的に検出・訂正できるようにします。
(7,4) はどういう意味ですか?
Hamming(7,4) とは、合計 7 ビットのうち 4 ビットがデータ、3 ビットがパリティビットであることを意味します。7 ビットブロック内の任意の 1 ビット誤りを訂正できます。他のバリエーションとして (15,11) や (31,26) などがあります。
誤り訂正はどのように動作しますか?
受信側ではパリティビットが再計算されます。一致しない場合、シンドローム(差分)がどのビットが誤っているかを直接示します。そのビットを反転することで誤りを修正します。
ハミングコードと他の ECC の違いは?
ハミングコードは、1 ビット誤りに対してシンプルで効率的です。Reed–Solomon のようなより複雑なコードは複数の誤りを訂正できますが、オーバーヘッドが大きくなります。ハミングコードは低ノイズの通信路に最適です।
// クイックリファレンス
| Pos | bit | covered by |
|---|---|---|
| 1 | p1 | p1 |
| 2 | p2 | p2 |
| 3 | d1 | p1 p2 |
| 4 | p3 | p3 |
| 5 | d2 | p1 p3 |
| 6 | d3 | p2 p3 |
| 7 | d4 | p1 p2 p3 |
// 計算例
Data 1011 -> positions 3,5,6,7 = 1,0,1,1 p1 = d3^d5^d7 = 1^0^1 = 0 p2 = d3^d6^d7 = 1^1^1 = 1 p3 = d5^d6^d7 = 0^1^1 = 0 Codeword (pos 1..7) 0110011 Received 0110111 (bit 5 flipped) Syndrome s3 s2 s1 = 1 0 1 = 5 -> flip bit 5 -> 0110011 corrected
>> その他の質問
Q: ハミング符号の(7,4)とは何ですか?
A: 4ビットのデータに3ビットのパリティを加えた7ビットの符号語です。パリティビットは2のべき乗の位置(1、2、4)に置かれます。最小距離は3で、1ビット誤りを訂正でき、2ビット誤りは検出のみ可能です。
Q: シンドロームはどのように誤り位置を示しますか?
A: 各パリティビットは、位置番号の対応するビットが立っている位置を検査します。3つの結果を2進数として読むと誤りビットの位置になります(0は誤りなし)。例では101が位置5を示します。
Q: 拡張ハミング符号(SECDED)とは?
A: 全体パリティビットを加えて(7,4)を(8,4)にすると、1ビット訂正・2ビット検出ができます。ECCメモリも同じ原理で、通常は64データビットに8検査ビットの(72,64)です。