ベル研究所、1947年
Richard Hammingは1946年にBell Telephone Laboratoriesに入社した。そこのリレーコンピュータは平日のみ稼働し、エラーが発生するとテクニシャンが再起動できるまで待つ必要があった。週末は何か問題が起きるとマシンが停止し、月曜日までジョブはキューに留まった。
Hammingは激怒した。「マシンがエラーを検出できるのなら、なぜそれを特定して訂正することができないのか?」と考えた。この怒りは、二進演算とパリティチェックに関する深い知識と相まって、重大な発見の土台となった。
最初の洞察:矩形符号
Hammingの最初のアイデア:メッセージビットをm×n矩形に配置し、すべての行とすべての列にパリティチェックを追加する。単一エラーはちょうど1つの行チェック失敗と1つの列チェック失敗を生成する。それらの交差点がエラーの位置を示す。
冗長度比:(m+1)(n+1) / mn。微積分はあなたに、固定メッセージサイズに対して正方形がこれを最小化することを伝える。しかし、mとnが大きくなるにつれて、二重エラーの可能性がより高くなる — これは普遍的な答えを持たないエンジニアリング判断。
矩形冗長度の最小化
4×4矩形は16個のメッセージビットを4個の行チェック、4個の列チェック、および1個のコーナーパリティビット(計9個のチェックビット)で保護する。
冗長度比:(m+1)(n+1) / mn = 25/16 ≈ 1.56。
10×10矩形の場合:100メッセージビット、121ビット合計、冗長度 ≈ 1.21。
バイナリ数としてのシンドローム
矩形符号の洞察の数週間後、Hammingはニュージャージーの農地を通ってニューヨークへ向かっていた。彼は頭の中で自分の成功を見直していた。三角形符号の考えが浮かんだ — より良い冗長度。そして立方体。そして4次元、5次元...
次元が増えるごとに冗長度が改善された。n次元の辺が2の超立方体はわずかにn+1個のパリティチェックで2^n個の頂点を使用する。しかし、これは最適か?
計数論証
n+1個のパリティビットがシンドロームを生成する:(n+1)ビットのバイナリ数。そのシンドロームは2^n + 1個の異なる結果を識別する必要がある:2^n個のエラー位置それぞれ、プラス特殊な「エラーなし」の結果。
2^(n+1) = 2·2^n — ほぼ十分。係数2だけ不足。Hammingは問題を棚上げにした。
重要な洞察
後に、Hammingは新しいアイデアで戻ってきた:シンドローム自体をバイナリ数として使用し、エラー位置を示す。位置1 = 二進数001、位置2 = 二進数010、位置3 = 二進数011、など。すべてゼロをエラーなしのために予約する。
これはシンドロームをパリティチェックの出力からアドレスへと変換する。パリティチェックは、任意の単一ビットが反転したときに正確に正しいアドレスを生成するように設計されている。
(7,4)符号の設計
7ビット符号(3パリティビット、4メッセージビット)の場合、位置1から7は二進数では:001、010、011、100、101、110、111。
パリティチェック1は、ビット0 = 1の位置をカバー:位置1、3、5、7。
パリティチェック2は、ビット1 = 1の位置をカバー:位置2、3、6、7。
パリティチェック3は、ビット2 = 1の位置をカバー:位置4、5、6、7。
パリティビットは2のべき乗位置を占める:1、2、4。メッセージビットは残りを占める:3、5、6、7。
ビット6が反転した場合、パリティチェック2と3が失敗(二進数110 = 6)。シンドロームは110を読む = 6。位置6を反転。完了。
単一誤り訂正、二重誤り検出
(7,4) Hamming符号は単一エラーを訂正する。しかし、2ビットが反転する場合はどうか?追加の保護がなければ、デコーダはシンドロームルールを適用し、コードワードを「訂正」して間違ったメッセージにする — 静かな誤り訂正。
SECDED:もう1つのパリティビット
コードワード全体(すべての7ビット)をカバーする単一のパリティビットp₀を追加する。現在、シンドロームには4つのエントリがある:元の3つのチェックプラスp₀。
``
古いシンドローム 新しいp₀ 意味
000 0 正解
000 1 p₀のみのエラー
xxx 1 単一エラー、古いシンドロームがそれを示す
xxx 0 二重エラー — フラグを立てる
``
4つのケースは網羅的である。2つのビットが反転した場合:古いシンドロームは000を読まない(両方のビットが一緒に2つのチェックを破損させる)が、p₀は2回反転して0に戻る。パターンxxx + 0は識別不可能。
SECDEDが機能する理由
SECDEDルールはパリティのモジュラー構造を利用する。偶数パリティを使用して、任意の単一反転がp₀を変更する。任意の二重反転はp₀を変更されないままにする。したがって、p₀はエラー数をモジュロ2でカウント。
幾何学的な図
Hammingは異なる方向から同じ場所に到達した:解析幾何学。各nビット文字列をnドの超立方体の頂点として表現する。単一ビット反転は1つの軸に沿って1つのエッジ長だけポイントを移動させる。2反転:2エッジ。メトリックはHamming距離である。
Hamming球をコードワードcの周りの半径tとして定義する:cのtビット反転以内のすべてのポイント。単一エラー訂正の場合、t = 1。
単一エラー訂正の条件:異なるコードワードのペアの周りの半径1の球が重なってはいけない。重複する場合、受け取られたワードが重複内にある可能性があり、デコーダは失敗する。
これは直接最小距離に変換:2つの半径1の球は、コードワードが少なくとも3離れている場合と当たり前(d_min ≥ 3)。
(7,4)符号はd_min = 3を達成する。Hammingの限界:2^7 / (1 + 7) = 16 = 2^4。ちょうど16個のコードワード。完全符号:16個の半径1の球は{0,1}^7をギャップや重複なしでタイル張る。
エンジニアリングの判断
Hammingは明示的だった:エラー訂正符号は純粋な数学ではなく、エンジニアリング判断を含む。
メッセージ長:より長いメッセージはより効率的なコーディングを可能にする(nメッセージビットに対してlog nパリティビット)。しかし、より長いメッセージはより多くのノイズを蓄積し、二重エラーが偽の単一訂正として滑り込む危険性を高める。
訂正レベル対検出:1つのエラー訂正を2つの余分なエラー検出とトレードオフ。最適な分割は、チャネルのノイズ特性に依存する。
フィールド保守値:機器が複雑になるにつれて、フィールド技術者は第一原則からすべての故障を診断することはできない。自己診断システムは保守に必要なスキルを劇的に削減する。Hammingはこれを最も重要な利点の1つ、しばしば生のリライアビリティ利益よりも重要だと呼んだ。
スタイル:幸運は準備された心に味方する
Hammingは第12章を直接的な挑戦で閉じた。彼は発見をBell Labsでの主要な義務を実行しながら、主にまばらな時間に3〜6ヶ月の作業を必要とするものとして説明した。
彼は3つのことを特定した、それを可能にしたもの:
1. 準備:問題が現れる前に、パリティチェック、二進演算、& 群論に対する深い精通。
2. 成功をレビュー:過去のソリューションを常に再生して、それらのスタイルを内部化する。三角形符号は通勤中に矩形符号を精神的に見直しながら浮かんだ。
3. 「見た目が良い」で落ち着かない:彼は一度指をやけどさせた見た目の最適性を受け入れることで。彼はコードが最良であることを証明できるまで押し続けた。