汉明码和奇偶校验控制之间有什么区别吗



我需要在有一些噪声的线路上传输数据。每个传输数据包只有一个字节(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个字节,你可以用它们来检测传输故障。。。

这不是汉明码,这是一种简单的检测方法。。。

hamming码作用于半字节的半字节:

想象一个比特类型:

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;

然后你把比特和比特捣碎在一起,然后把它们放在电线上:

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

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

如果一个比特被翻转,那么你可以恢复:

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

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

如果不是这样的州。。。那么有2个或多个比特错误,您必须重新传输。。。

您还可以使用第4个奇偶校验位添加一些验证,它也可以方便地放入8位字节。。。

相关内容

  • 没有找到相关文章

最新更新