博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计组笔记(4)--海明校验码
阅读量:3957 次
发布时间:2019-05-24

本文共 749 字,大约阅读时间需要 2 分钟。

海明校验码/汉明校验码

海明码是什么?

首先需要知道什么是奇偶校验码:在 n 位有效信息位前 或 后添加一个校验码改变整个校验码的1的个数。

在这里插入图片描述

举个栗子,如果我们使用偶校验的方式检查数据是否出错:

  • 1010这个信息位,其中1的个数刚好为偶数,说明数据正确。我们在其有效信息位前(也就是奇偶校验位)添加一位0,表示数据正确。这种校验方式的缺点就是只能判断数据是否出错,但是无法确定哪里出错,也就是没有纠错能力。遇到出错就只能重传数据。

海明码就是改进偶校验的具有纠错功能的校验码,其思路是在有效信息位中分组,对每个分组添加校验位(这样就有多个校验位可以表示更多的结果,之前的偶校验位只有0/1两种结果,所以只能表示对错),同时根据校验位还可以标注出错的位置。

但是随之而来的问题有下面这几个

  • 需要多少个校验位?

假设我们有n位有效信息位,k 个校验位,那么总校验码长度为(n+k);我们需要使用校验位来判断以下情况

  • 数据正确
  • 数据在每一个位置都有可能出错,需要能用校验码表示 (n+k) 个位置

所以我们需要的校验位个数应该大于等于 n+k+1,它们的关系可以不等式表达如下:

在这里插入图片描述

例如n = 4 ,那么 k 至少需要等于 3 才能满足汉明码的校验码要求;2^3 >= (4+3+1)

常见的有效信息位 n 和海明校验码个数 k 的关系,
在这里插入图片描述

  • 校验位放哪里?

在这里插入图片描述

存放的结果如下

在这里插入图片描述

  • 怎么对信息位进行分组?

  • 首先将信息位的位置使用二进制表示,例如 3 为 011…

在这里插入图片描述

具体校验码的分组包含哪些信息位根据其二进制的值决定。

在这里插入图片描述

最后得到海明校验码的值如下

在这里插入图片描述

  • 如何纠错?

利用校验位和其分组内的信息位进行偶校验(即异或),得到结果为0说明正确。

在这里插入图片描述

根据得到的校验结果的二进制转为十进制得到错误位置。注意S1对应二进制的低位;

在这里插入图片描述

在这里插入图片描述

总结

在这里插入图片描述

转载地址:http://cpozi.baihongyu.com/

你可能感兴趣的文章
C# string.Format使用说明
查看>>
Linux下安装Mysql数据库开发环境
查看>>
Linux用户及用户组添加和删除操作
查看>>
通用 Makefile 的编写方法以及多目录 makefile 写法
查看>>
C++的4种智能指针剖析使用
查看>>
RPC框架实现之容灾策略
查看>>
Docker私库
查看>>
hdu——1106排序(重定向)
查看>>
hdu——1556Color the ball(树状数组)
查看>>
hdu——1541Stars(树状数组)
查看>>
快速幂的精简代码
查看>>
求大数乘方的前n位数字(对数加快速幂)
查看>>
hdu——2602Bone Collector(第一类背包问题)
查看>>
hdu——1711Number Sequence(kmp专练)
查看>>
strstr函数和find函数的异同
查看>>
Java的反射
查看>>
HTTP请求之POST与GET区别
查看>>
SSM结合Redis
查看>>
优化数据库的八种方法
查看>>
Java Web服务收到请求时线程的情况以及session情况
查看>>