質問

そこで、この夏はハミングコードを使ってメッセージ送信のエラーを修正するプロジェクトに取り組みたいと思っていますが、実際にどのように機能するのかわかりません。ネットでたくさんの記事を読みましたが、アルゴリズムがよくわかりません。誰か簡単な言葉で説明してもらえますか?

ありがとう。

役に立ちましたか?

解決

これは、すべてのハミング距離についてです。

二つの基地-2の値との間のハミング距離は、それらが異なるれるビットの数です。あなたがAを送信するが、私はBを受けるのであれば、その後の送信に切り替えられている必要がありますビット数はAとBの間のハミング距離である。

各コードワードのビットを別々に何とか送信された場合、

ハミングコードは有用です。符号化した後、我々は、それらが直列または並列しているかどうか気にしないが、それらはいくつかのビットを表すアナログ値に合わせ、例えばない、または圧縮/暗号化されます。

このように、各ビットのいずれかが正しく受信、または反転、(いくつかの固定された確率でランダムに)独立です。トランスミッションはかなり信頼性があると仮定すると、ほとんどのビットが正しく受信されています。だから、少ないビット数でのエラーは、より可能性があり、そして多くのビット数の同時エラーはほとんどありません。

そこで、ハミングコードは、通常、1ビットエラーを訂正するために、及び/又は(2つの主なタイプの詳細については、Wikipediaの記事を参照)、2ビットのエラーを検出することを目的とします。正しい/検出大きなエラーを構築することができますが、私の知る限りできるだけ多く使用されていません。

コード

のコードは、均等数学的にメトリックとしてハミング距離と関連するワードサイズのすべての値からなる距離空間である「ハミング空間」のコードポイントを離間することによって機能します。各コードポイントは無効な値の小さな「緩衝地帯」に囲まれていることを想像してみてください。値は、コード・ポイントではありませんが受信される場合にのみ有効なコード・ポイントがこれまでに送信されるため、エラーが発生している必要があります。

バッファゾーン内の値を受信した場合、

は、は1ビットエラーがの発生したことを想定して、送信された値は、受信された値からの距離が1でなければなりません。コードポイントが広がっているので、しかし、閉じ一つだけのコード・ポイントがあります。だから、それが1ビットエラーが受信した値を生成するために他のコード・ポイントのために必要とされるであろう大きな誤差よりも可能性が高いことを理由に、そのコードポイントに「修正」です。確率面では、あなたは近くのコードポイントを送られた条件付き確率はあなたが私が私がした値を受け取ったことを考えると、他のコード・ポイントを送信する条件付き確率よりも大きくなります。だから私は、あなたが、伝送の信頼性と各ワードのビット数に基づいて、一定の自信を持って、近くのものを送っていることと思います。

無効な値が2つのコード・ポイントから等距離にある受信された場合は、

、その後、私は1つが他よりも真の値である可能性が高いと言うことはできません。だから私は、エラーを検出したが、私はそれを修正することはできません。

もちろん3ビットのエラーはSECDEDハミングコードによって訂正されていません。受信した値は、それはいくつかの他のコード・ポイントにあるよりも、あなたが実際に送信された値から離れている、と私は誤って間違った値にそれを「修正します」。だから、あなたがそれらを気にしない、または他のあなたにも、より高いレベルのエラー検出が必要であることを十分に信頼性の高い伝送を必要とするいずれか(例えば、メッセージ全体にわたるCRC)ます。

他のヒント

具体的には ウィキペディア, 、アルゴリズムは次のとおりです。

  1. ビットに 1 から始まる番号を付けます。ビット 1、2、3、4、5 など。
  2. ビット番号を2進数で書きます。1、10、11、100、101など
  3. 2 のべき乗であるすべてのビット位置 (位置の 2 進形式で 1 ​​ビットが 1 つだけある) はパリティ ビットです。
  4. バイナリ形式で 2 つ以上の 1 ビットを含む他のすべてのビット位置は、データ ビットです。
  5. 各データ ビットは、そのビット位置のバイナリ形式によって決定される、2 つ以上のパリティ ビットの一意のセットに含まれます。
    1. パリティ ビット 1 は、最下位ビットが設定されているすべてのビット位置をカバーします。ビット 1 (パリティ ビット自体)、3、5、7、9 など。
    2. パリティ ビット 2 は、下位から 2 番目のビットが設定されているすべてのビット位置をカバーします。ビット 2 (パリティ ビット自体)、3、6、7、10、11 など。
    3. パリティ ビット 4 は、下位から 3 番目のビットが設定されているすべてのビット位置をカバーします。ビット 4 ~ 7、12 ~ 15、20 ~ 23 など。
    4. パリティ ビット 8 は、下位 4 番目のビットが設定されているすべてのビット位置をカバーします。ビット 8 ~ 15、24 ~ 31、40 ~ 47 など。
    5. 一般に、各パリティ ビットは、パリティ位置とビット位置の 2 進 AND がゼロ以外のすべてのビットをカバーします。
scroll top