0

回線上でノイズを伴うデータを送信する必要があります。各送信パケットは 1 バイト (8 ビット) のみです。レシーバーがエラーをキャッチできるようにする必要があります (オプションでエラーの一部を修正しますが、エラーが発生した場合に送信を繰り返すことができるため、必須ではありません)。

これで、次の 2 つのオプションがわかりました。

  1. ハミング コード (送信された 12 のうちの 8 データ ビット)。非常に優れたパフォーマンス (1 回の修正と 2 回の検出) ですが、実装が難しく (または、それほど難しくはありませんが、コードの概念がよくわかりません)、速度が 33% 低下します (50% の冗長性)。
  2. パリティ制御。実装は非常に簡単です。ただし、信頼性は高くありません。検出されるエラーは 1 つだけです (修正なし、二重のエラーはデータ転送の失敗につながります)。

では、パリティ制御よりも信頼性が高く、ハミングコードよりも簡単な中間コーディングアルゴリズムが存在する可能性がありますか?

4

1 に答える 1

1

ここにあなたができることがあります:

任意の 2 ビット (またはバイト、ほとんどの言語がビット演算子よりもはるかに多くのバイト演算子をサポートしていることを理解してください) を取り、それらを一緒に xor します...これはあなたの検証コードです...

だからあなたは持っています:

xor (^) table
_________________________
  | 0 | 1 
0 | 0 | 1
1 | 1 | 0

ある種のコード:

byteA = 0x3d;
byteB = 0x47;

verificationCode = byteA ^ byteB;

次に、これらの 3 バイトをネットワーク経由で送信すると、それらを使用して伝送障害を検出できます...

これはハミングコードではなく、単純な検出方法です...

ハミング コードはニブル、半バイトで機能します。

ビット型を想像してください:

bit a = 1;
bit b = 0;
bit c = 1;
bit d = 1;

bit p1 = (a + b + d) % 2;
bit p2 = (a + c + d) % 2;
bit p3 = (b + c + d) % 2;

次に、bits と pbits を一緒にマッシュして、ワイヤ上に配置します。

[p1,p2,a,p3,b,c,d, p4 (存在する場合)]

したがって、反対側でパリティ コードを計算すると、次のようになります。

1 つのビットが反転した場合は、回復できます。

(指定されていないすべてのパリティ ビットが正しいと仮定します)

  • a がオフの場合、p1 と p2 は間違っています。
  • b がオフの場合、p1 は間違っています。
  • c がオフの場合、p2 と p3 は間違っています。
  • dがオフの場合、p1、p2、およびp3は間違っています...

これらの状態のいずれでもない場合... 2 つ以上のビットが間違っているため、再送信する必要があります...

4番目のパリティビットを使用して検証を追加することもできます。これも8ビットバイトに便利に収まります...

于 2015-12-20T15:28:10.160 に答える