纠1位错的海明码


要传输的数据是m位,冗余位r应该是多少,才能纠正1位错来呢?

设一个系统中,编码后的码字位数是n,则n=m+r。因为要传输的数据位是m位,该系统需要传输的正确的码字个数应该是2^m,全部码字的个数是2^n,而n位码字每一位都可能发生跳变,且跳变之后不能变成另一个正确的码字,所以每个码字至少需要n+1个码字来表示它(别忘了还有它本身)

由上可以得到公式



海明纠错码

  • 每一个码字从左到右编号,最左边为第1位
  • 第1,2,4,8,16……为校验位,其它为数据位
  • 校验规则可以为偶校验/奇校验
  • 对于编号为4的校验位,设p表示其它位的编号,它所检测的是所有满足p&4不为0的位置

例子(其中的特殊符号为异或):


那么海明码如何纠错呢?

假如接收方收到一个码字:"100110001100",请问这个码字对还是错?如果错,正确的码字应该是什么

  1. 可以得出m = 8,r = 4
  2. 计算P1 = 0,P2 = 1,P3 = 1,P4 = 0
  3. 其中P1位和P2位不对应,所以发生错误的是第 1+2=3 位
  4. 正确的应该是码字和原始码字(数据位)分别是:"101110001100"和"11001100"

一个机智的方法应对突发错误:

假设突发错误导致连续的k为全出错,那么只需要将数据排成一个长度为k的矩阵,然后每1列作为一个码字,这样一共有k个码字,并且每个码字最多只会有一个错误


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值