海明检验码过程(超详细)

目录

原理

例子

1. 选择数据位

2. 确定校验位数量

3. 决定数据位和校验位的位置

4. 插入数据位

5. 计算校验位(若不懂请看最后)

6. 插入校验位

7. 检测和纠正错误

校验位的覆盖范围举例

文章推荐


海明检验码(Hamming Code)是一种用于错误检测和纠正的编码方法,由理查德·海明(Richard Hamming)于1950年提出。它通过增加冗余位到数据中,能检测并纠正单比特错误。以下是对海明检验码的介绍:

原理

海明码的基本思想是通过增加冗余校验位,使得任何单比特错误导致的不同码字之间的汉明距离至少为3,这样可以检测并纠正单比特错误。

例子

1. 选择数据位

假设我们有4位数据需要传输:1011。

2. 确定校验位数量

我们需要找到合适的校验位数量 r,使得满足公式:

2r≥k+r+1

其中 k 是数据位的数量。在这个例子中, k=4。

我们尝试不同的 r 值:

  • r=2 : 22=4 ,不满足 4≥4+2+1=7
  • r=3 : 23=8 ,满足 8≥4+3+1=8

所以我们需要3个校验位。

3. 决定数据位和校验位的位置

我们将校验位放在2的幂次位置(1,2,4,……),数据位放在其他位置:

  • 第1位:校验位 P1
  • 第2位:校验位 P2
  • 第3位:数据位 D1
  • 第4位:校验位 P4
  • 第5位:数据位 D2
  • 第6位:数据位 D3
  • 第7位:数据位 D4

所以,位置应该是:_ _ D1 _ D2 D3 D4。

4. 插入数据位

将数据位(1011)插入相应位置:

  • 第1位: P1
  • 第2位: P2
  • 第3位: 1
  • 第4位: P4
  • 第5位: 0
  • 第6位: 1
  • 第7位: 1

暂时得到:_ _ 1 _ 0 1 1

5. 计算校验位(若不懂请看最后)

校验位的计算涉及到覆盖特定位的奇偶校验:

  • P1 覆盖位置 1, 3, 5, 7:

    • P1=D1⊕D2⊕D4=1⊕0⊕1=0
  • P2 覆盖位置 2, 3, 6, 7:

    • P2=D1⊕D3⊕D4=1⊕1⊕1=1
  • P4 覆盖位置 4, 5, 6, 7:

    • P4=D2⊕D3⊕D4=0⊕1⊕1=0

6. 插入校验位

将计算得到的校验位插入相应位置:

  • 第1位: 0
  • 第2位: 1
  • 第3位: 1
  • 第4位: 0
  • 第5位: 0
  • 第6位: 1
  • 第7位: 1

最终得到的海明码为:01101010110101

7. 检测和纠正错误

假设传输过程中接收到的码是:01100010110001。

我们重新计算校验位来检测错误:

  • 检查 P1 :

    • 位置 1, 3, 5, 7: 0⊕1⊕0⊕1=0(正确)
  • 检查 P2 :

    • 位置 2, 3, 6, 7: 1⊕1⊕1⊕1=0(正确)
  • 检查 P4 :

    • 位置 4, 5, 6, 7: 0⊕0⊕1⊕1=0(正确)

---------------------------------------------------------------------------------------------------------------------------------

大家可能对p_=D_+D_+D_怎么来的不太懂,现在来解释下:

位置二进制表示说明
10001P1
20010P2
30011D1
40100P4
50101D2
60110D3
70111D4

校验位的覆盖范围举例

再详细看看校验位 P1 的覆盖范围:

  • P1 需要覆盖所有位置的二进制表示中第1位为1的位。
  • 位置1(二进制:0001),第1位为1。
  • 位置3(二进制:0011),第1位为1。
  • 位置5(二进制:0101),第1位为1。
  • 位置7(二进制:0111),第1位为1。

所以,P1 覆盖位置1, 3, 5, 7。

类似地,校验位 P2 覆盖所有位置的二进制表示中第2位为1的位:

  • 位置2(二进制:0010),第2位为1。
  • 位置3(二进制:0011),第2位为1。
  • 位置6(二进制:0110),第2位为1。
  • 位置7(二进制:0111),第2位为1。

文章推荐

如果你觉得这篇文章对你有帮助,不妨看看以下几篇相关文章,内容同样精彩:

  1. 病毒肆虐,电脑遭殃,360和火绒哪家强?
    探讨了流行杀毒软件360和火绒的各自优缺点,以及在面对不同病毒威胁时的表现。
  2. 编码器与译码器的工作原理及应用
    详细解析了编码器与译码器的工作原理,特别是n位2^n线编码器的运算规律,对于学习计算机硬件的读者非常有帮助。
  3. python课程设计作业-TCP客户端-服务端通信
    介绍了如何使用Python进行TCP客户端与服务端通信的课程设计作业,适合对网络编程感兴趣的读者。
  4. 海明检验码过程(超详细)
    详尽讲解了海明检验码的原理和实现过程,适合需要了解错误检测与纠正编码的读者。

每篇文章都经过精心编写,涵盖了丰富的知识点和实用技巧,希望能为你的学习和实践提供更多帮助!

计算机原理复习目录汇总        [⬇️点击这里阅读完整文章⬇️](计算机组成原理复习与预习指南~持续更新~-CSDN博客)

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CongSec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值