纠错编码【海明码】

海明码(Hamming Code)

基本概念

  • 对于连续比特的检验有检错和纠错两种形式

    检错编码:

    1. 奇偶校验码
    2. CRC冗余码

    但是对于检错编码不能找到出错的位置,因此这里介绍一种纠错编码:海明码

  • 海明码:

    • 能够检查出错位和纠正出错位
    • 其特点为,检查偶数位,纠正奇数位
  • 海明不等式:

    2 ^ r - 1 >= k + r

    • r:冗余信息位
    • k:数据信息位

基本步骤

  • 根据传输的数据和海明不等式得到需要的冗余位个数:

    例如:

    ∵ data = 101101【6位即k = 6】

    ∴ 需要的最小冗余码个数位2 ^ r - r >= 7 ==> r = 4

    ∴ 需要4位冗余位

  • 将数据码填入正确的位置并留出冗余码的位置

    冗余码的位置均为2^i --> 1,2,4,8…

    因此冗余码对应的数据位均只有1位1,其余位均为0,且1的位置逐次升高

    数据位置0001【1】0010【2】0011【3】0100【4】0101【5】0110【6】0111【7】1000【8】1001【9】1010【10】
    信息(k)/冗余®r1r2k1r3k2k3k4r4k5k6
    数值101101
  • 通过冗余码的数据位置,填充数组

    一个冗余码控制多个相应位置

    每个冗余码控制信息位对应位置位1的数据位置【由于冗余码的填充位置为2^i决定】:

    例:

    ​ r1 = 0001最低位为1,因此所有数据位置最低位为1的位置均受其控制【0011(k1),0101(k2),0111(k4),1001(k5)】

    填充方法:

    r1 ⊕ k1 ⊕ k2 ⊕ k4 ⊕ k5 = 0 ==> r1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0 ==> r1 = 0

    数据位置0001【1】0010【2】0011【3】0100【4】0101【5】0110【6】0111【7】1000【8】1001【9】1010【10】
    信息(k)/冗余®r1r2k1r3k2k3k4r4k5k6
    数值0010011101
  • 对于接收方的校验:

    • 对于所有检验位均再次对应异或运算:

      例:

      【表格种第五为发生了错误】

      重新查看校验码:

      r1 ⊕ k1 ⊕ k2 ⊕ k4 ⊕ k5 = 1(P1)

      r2 ⊕ k1 ⊕ k3 ⊕ k4 ⊕ k6 = 0(P2)

      r3 ⊕ k2 ⊕ k3 ⊕ k4 = 1(P3)

      r4 ⊕ k5 ⊕ k6 = 0(P4)

      P4P3P2P1 = 0101 = 5即第5位发生错误

      数据位置0001【1】0010【2】0011【3】0100【4】0101【5】0110【6】0111【7】1000【8】1001【9】1010【10】
      信息(k)/冗余®r1r2k1r3k2k3k4r4k5k6
      数值0010111101
  • 将错误位取反即纠错结束

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值