ハミングコードのメモ

誤り訂正符号 - ハミング符号

ハミング コード:ダブルビット エラーを検出し、シングルビット エラーを修正できます。

作業過程

  1. チェックコード桁数を確認 r
  2. チェックサムとデータの場所を特定する
  3. チェックコードの値を調べる
  4. エラーを検出して修正する

01 チェックコード桁数を確認 r

ハミングの不等式: 2 r ≥ k + r + 1 k は情報ビット、r は冗長情報ビット\text{ハミングの不等式:} 2^r \geq k + r + 1 \\ k は情報ビット、r は冗長な情報ビットハミングの不等式: 2rk+r+1k情報ビットr冗長情報ビット

原則:

合計 r ビットの冗長情報ビットがあります2 r 2^r2r通りの組み合わせのうち、識別情報が正しい 1 を除いて、2 r − 1 2^r-12r識別するための1 つの組み合わせ2 r − 1 2^r - 12r1位置エラー。この場合、識別エラーの組み合わせの数 >= 送信ビットの総数が存在するはずです。つまり、2 r − 1 ≥ k + r 2^r - 1 \geq k + r2r1k+r

02 チェックコードとデータの位置を決定する

データD = 101101 D=101101と仮定します。D=1 0 1 1 0 1

ハミングの不等式によれば、r = 4 r = 4r=4

チェックデジットを左から右にP 1 、 P 2 、 P 3 、 P 4 P_1、 P_2、 P_3、 P_4 とします。P1P2P3P4、データは左から右にD 1 、 D 2 、 D 3 、 D 4 、 D 5 、 D 6 D_1、 D_2、 D_3、 D_4、 D_5、 D_6 です。D1D2D3D4D5D6

チェック ディジットは 2 の累乗数個に配置され、データ ビットは空のビットに左から右に埋められます。

位置 1 2 3 4 5 6 7 8 9 10
コード P1P_1P1 P2P_2P2 D1D_1D1 P3P_3P3 D2D_2D2 D3D_3D3 D4D_4D4 P4P_4P4 D5D_5D5 D6D_6D6
実価 1 0 1 1 0 1

03 チェックコードの値を調べる

各チェック ディジットは 2 の累乗位置に埋められるため、その「位置の 2 進表現」には 1 が 1 つだけあり、右から r 番目の位置に設定されます。このチェックディジットは、「位置バイナリ表現」の右からr番目のビットが1であるデータを検証します。

例: P 1 P_1P1位置バイナリ表現の右から1桁目が1の場合、「位置バイナリ表現」の右から1桁目が1であるデータ、つまり3番目、5番目、7番目、9番目...をすべて検証します。 . 3、5、7、9 \ldots3、5、7、9 _ _ _ _ _ _...ビット、P 2 P_2P23 番目、6 番目、7 番目、10 番目を確認してください... 3、6、7、10 \ldots3 6 7 1 0...ビット、P 3 P_3P35 番目、6 番目、7 番目を確認してください... 5、6、7 \ldots5、6、7 _ _ _ _...ビット、P 4 P_4P49 番目、10 番目...9 番目、10 番目の \ldotsを確認してください9、10 _ _ _ちょっと。

パリティ ビットは、すべてのパリティ位置のデータをそれ自体と XOR して 0 にする必要があります (偶数パリティとして理解できます)。
P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 ⊕ D 5 = 0 ⟹ P 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0 ⟹ P 1 = 0 P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 ⊕ D 6 = 0 ⟹ P 2 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0 ⟹ P 2 = 0 P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 = 0 ⟹ P 3 ⊕ 0 ⊕ 1 ⊕ 1 = 0 ⟹ P 3 = 0 P 4 ⊕ D 5 ⊕ D 6 = 0 ⟹ P 4 ⊕ 0 ⊕ 1 = 0 ⟹ P 4 = 1 \begin{aligned} & P_1 \oplus D_1 \oplus D_2 \oplus D_4 \oplus D5 = 0 & \implies & P_1 \oplus 1 \oplus 0 \oplus 1 \oplus 0 = 0 & \implies P_1 = 0 \\ & P_2 \oplus D_1 \oplus D_3 \o​​plus D_4 \oplus D6 = 0 & \implies & P_2 \oplus 1 \oplus 1 \oplus 1 \ oplus 1 = 0 & \implies P_2 = 0 \\ & P_3 \o​​plus D_2 \oplus D_3 \o​​plus D_4 = 0 & \implies & P_3 \o​​plus 0 \oplus 1 \oplus 1 = 0 & \implies P_3 = 0 \\ & P_4 \oplus D_5 \oplus D_6 = 0 & \暗黙的 & P_4 \oplus 0 \oplusP1D1D2D4D5 _=0P2D1D3D4D6_ _=0P3D2D3D4=0P4D5D6=0P11010=0P21111=0P3011=0P401=0P1=0P2=0P3=0P4=1

結果のチェック デジット値を入力します

位置 1 2 3 4 5 6 7 8 9 10
バイナリ表現 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
コード P1P_1P1 P2P_2P2 D1D_1D1 P3P_3P3 D2D_2D2 D3D_3D3 D4D_4D4 P4P_4P4 D5D_5D5 D6D_6D6
実価 0 0 1 0 0 1 1 1 0 1

つまり、送信データは 0010 0111 01

04 エラーの検出と修正

送信時の5ビット目がD 2 D_2であるとします。D2エラーが発生しました。受信した結果は 0010 1 111 01でした

チェック値方式による XOR 演算を行う
P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 ⊕ D 5 = 0 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0 = 1 P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 ⊕ D 6 = 0 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 = 0 P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 = 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1 P 4 ⊕ D 5 ⊕ D 6 = 1 ⊕ 0 ⊕ 1 = 0 \ begin {aligned} & P_1 \oplus D_1 \oplus D_2 \oplus D_4 \oplus D5 & = & 0 \oplus 1 \oplus 1 \oplus 1 \oplus 0 & = 1 & \\ & P_2 \oplus D_1 \oplus D_3 \o​​plus D_4 \oplus D6 & = & 0 \oplus 1 \oplus 1 \oplus 1 \oplus 1 & = 0 \\ & P_3 \o​​plus D_2 \oplus D_3 \o​​plus D_4 & = & 0 \oplus 1 \oplus 1 \oplus 1 & = 1 \\ & P_4 \oplus D_5\oplus D_6 & = & 1 \oplus 0 \oplus 1 & = 0 \end{aligned}P1D1D2D4D5 _P2D1D3D4D6_ _P3D2D3D4P4D5D6====01110011110111101=1=0=1=0
下から上にソートした結果は 0101 で、これは 10 進数の 5 に相当します。つまり、5 番目のビットが間違っているので、それを 1 から 0 に変更するだけです。

注: シングル ビット エラーとダブル ビット エラーの両方を検出できますが、訂正できるのはシングル ビット エラーのみです。2 ビット エラーが発生した場合、ハミング コードのチェック結果はエラーのみを示します。つまり、チェック結果がすべて 0 になるわけではありませんが、対応する位置が必ずしも間違っているとは限りません。この場合、ハミング コードのデフォルトは単一です。 -bit エラーが発生し、修正されます。エラー修正とエラーの問題が発生します。

原理:あるチェックビットエラー検出のXOR出力が1の場合、エラービットの「位置バイナリ表現」の位置が1でなければならないことを意味します。XOR出力が0の場合、「位置バイナリ表現」の位置が1であることを意味します。エラービットの「バイナリ表現」は 1 でなければなりません。位置は 0 です。そして、下から上にソートされたチェック結果は、エラー ビットの「位置バイナリ表現」を正確に表します。

私の個人的な理解ですので、間違いや理解が深まりましたら、修正していただければ幸いです。

上記は個人的な学習ノート、学習ビデオリンクB ステーション - 王島大学院入試 - コンピュータ ネットワーク

おすすめ

転載: blog.csdn.net/qq_44856695/article/details/105350019