汉明码与奇偶校验控制之间有什么关系吗?

时间:2015-12-18 16:22:19

标签: data-transfer transmission hamming-code

我需要通过线路传输数据并产生一些噪音。每个传输包只有一个字节(8位)。我需要接收器能够捕获错误(并且可选地纠正其中一些错误 - 但这并不重要,因为我可以在出错时重复传输)。

现在我知道两个选择:

  1. 汉明码(12个传输中的8个数据位)。性能非常好(单次校正和双重检测)但很难实现(或者这并不是很难,但我不太了解代码的想法)和33%的速度(50%冗余)。
  2. 奇偶校验控制。很容易实现。但是不太可靠:只会检测到一个错误(没有更正,双重错误会导致数据传输失败)。
  3. 那么可能有任何中间编码算法比奇偶校验控制更可靠但比汉明码更容易吗?

1 个答案:

答案 0 :(得分:1)

好的,你可以这样做:

取任意2位(或字节,只是理解大多数语言比位运算符更多地支持字节运算符),将它们放在一起......这是你的验证码......

所以你有:

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;

然后你将位和pbit混合在一起并将它们放在线上:

[p1,p2,a,p3,b,c,d,p4如果存在]

所以如果你计算另一边的奇偶校验码:

如果翻转一位,则可以恢复:

(假设未指定的所有奇偶校验位都正确)

  • 如果a关闭,那么p1和p2将是错误的,
  • 如果b关闭,那么p1将是错误的,
  • 如果c关闭,那么p2和p3将是错误的,
  • 如果d关闭,那么p1,p2和p3将是错误的......

如果它不是这些状态之一......则有2位或更多位错误,您必须重新发送......

您还可以使用第4个奇偶校验位添加一些验证,这也很方便地适合8位字节......