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

Is there anything between Hamming code and parity control?

我需要通过带有一些噪音的线路传输数据。每个传输包只有一个字节(8 位)。我需要接收器能够捕获错误(并可选择纠正其中的一些错误 - 但这不是必需的,因为我可以在出现错误的情况下重复传输)。

现在我知道了两个选择:

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

那么是否有比奇偶校验控制更可靠但比汉明码更简单的中间编码算法?

好的,这是您可以做的事情:

取任意 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 位字节中...