校验码

能够发现错误或者自动纠错的数据编码,也称为检错纠错码。校验码的原理是通过增加一些冗余码,来检错或纠错编码。
任意两个合法码字之间的最少变化的二进制位数,叫做码距。码距越大,检错、纠错能力越强,且检错能力>=纠错。

码距大于等于2的数据校验码,开始具有检错能力。

三种常见的校验码:

1、奇偶校验码

在首部增加一位二进制位(校验位),称为奇偶校验码,它可以检测出一位错误,而且只能是奇数位错误。它的码距为2。
通过数有效信息位和校验位的“1”的个数来判断是奇校验码还是偶校验码。奇校验码中1的总个数为奇数,偶校验码中1的个数为偶数。

缺点:具有局限性,只能检测出奇数位(比如3个数位)出错的情况,通过编码中1的个数的变化判断是都出错,但不能确定出错的位置,也不能纠正错误。

2、海明码:多重奇偶校验码,具有纠错能力。

能发现两位错误,纠正一位错误。

假设数据有n位,校验码有m位。则校验码一共有2m2^m2m种取值方式。其中需要一种取值方式表示数据正确,剩下2m−12^m-12m−1种取值方式表示有一位数据出错。因为编码后的二进制串有n+m位,因此m应该满足:

2m−1≥n+m2^m-1 ≥ n+m2m−1≥n+m

求海明码的具体步骤

看例子:

【例】在n = 4,k = 3时,求1010的海明码?

1、确认海明码的位数:

在这里,n是有效信息位数,k是校验位数,应满足n+k+1<=2^k ,把k、n带入发现是有效的。
设信息位为D4D3D2D1(1010),共4位,校验位有3位,设为P3P2P1。
对应的海明码为:H7H6H5H4H3H2H1,共7位(这只是说明有7个码组成,并没有确定具体每一位的值和属性)

2、确定校验位的位置:

规定校验位Pi(1<=i<=k)在海明位号为2^(i-1)的位置,其余为信息位。因此P1在海明位号为1的位置,即H1;
P2在编号为2的位置,即H2;P3在编号为4的位置,即H4;
海明码的分布为:D4D3D2P3D1P2P1(海明位号每位在序列H7H6H5H4H3H2H1中对应的下标数字,例如D2的海明位号为5)

3、分组,形成校验关系:

每个数据位用多个校验位进行校验,满足条件是:数据位的海明位号等于校验它的校验位的海明位号之和。
只需要看数据位就行了。比如:D1放在H3的位置上,3 = 0011由P1P2进行校验,因为P2P1的海明位号为2+1=3;
D2放在了H5上,就要由和是5 = 0101的校验位来校验,发现是片P1P3,因为他们的海明位号和为4+1=5;
D3放在了H6上,找和为6 = 0110的校验位,是P2P3,海明位号分别为4和2,4+2-6。
D4放在了H7,找和为7的校验位,发现7 = 0111,对应是P1P2P3,同理因为4+2+1=7。

4、校验位取值(也称编码):

校验位Pi(1<=i<=k)的值为 被Pi校验过的数据位的异或值。
P1 = D1⊕D2⊕D4 = 0⊕1⊕1 = 0;
P2 = D1⊕D3⊕D4 = 0⊕0⊕1 = 1;
P3 = D2⊕D3⊕D4 = 1⊕0⊕1 = 0;
所以,1010对应的海明码为101(0)0(10)。小括号内为校验位。

5、译码方程,即用一个校验位和形成这个校验码的编码方程执行异或,通过检查S的结果,可以实现纠错检错的目的。若出错的数据位,对其求反则实现纠错,若出错的是校验位,不必理财。找出错误位置。

S1= P1⊕D1⊕D2⊕D4 = 0;
S2,S3类似……,若S3S2S1 = 000那么说明没出错;否则S3S2S1值为几就是那一位出错,
例如S3S2S1 = 001,则说明第一位出错,直接将该出错位取反就达到了纠错的目的。

3、循环冗余校验码Cyclic Redundancy Check,CRC:

在k位信息码后面增加r位校验码,整个编码长度为n。又称(N,K)码
(注意k和海明码代表的意义不一样)

能发现并纠正信息穿读写、存储、传送过程中的一位或者多位错误。
原理

基于线性编码理论,在发送端,将要发送的k位二进制信息码,向左移动r位,将它与生成多项式G(x)做模2除法,生成一个r位校验码,并附在信息码后面,构成一个新的二进制码(CRC)。共有K+R位。在接收端,利用生成多项式对接收到的编码做模2除法,以检测出错的位置,如无错误则删除。

生成多项式G(x)是发送端与接收端的一个约定。G(x)的最高项为R,则转化为二进制数有R+1位。
例子

生成多项式G(x),做模2除法。
G(x) = x^3 + x^2 + 1,信息码为101001,求其CRC码?

1、生成多项式的最高次幂是3,则说明r = 3。由题意知k = 6,n = k + r = 9。G(x)对应的二进制码为 1101
2、移位,将原信息码向左移r位,低位补零,得到101001000
3、相除,模2除法,产生余数,也就是异或运算。将上一步得到的移位码对G(x)的二进制码做模2运算。
当每一步异或之后得到的余数最高位为1时,商为1,最高位为0,商为0。除数右移,跟除法运算差不多。
当余数位数小于除数(1101)的时候,该余数是最终余数。把这个余数加到信息位的最后,得到CRC码。
4、检错纠错。将得到的CRC码和生成多项式做模2除法,如果余数为0,则没出错。
否则哪一位不为0,哪一位就出错了,取反即可。

一下子看懂校验码,CRC,海明码相关推荐

  1. 计算机系统基础知识——校验码之海明码(Hamming Code)

    前言:海明码在传输的消息流中插入验证码,当计算机插入或者移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误.由于汉明码简单,被广泛应用于内存. 1. 海明码   海明码是由贝尔实验室的Rich ...

  2. BUU-MISC-你能看懂音符码

    BUU-MISC-你能看懂音符码 下载下来的压缩包打不开,就查看16进制,返现文件头错了. 修改文件头rar文件头(52617221),winhex修改文件头 文档中用了文字隐写,打开隐写就能看见了. ...

  3. 2.1.5 校验码(一文带你分析搞懂:奇偶校验码、海明码、CRC码)

    文章目录: 什么是校验码? 为什么要有校验码? 1.奇偶校验码 怎么通过奇偶校验码判断数据是正确还是错误呢? (1)奇校验 (2)偶校验 为什么无法检查出偶数个错误? 2.海明(汉明)校验码 什么是海 ...

  4. 【雷神源码解析】无基础看懂AAC码流解析,看不懂你打我

    一 前言 最近在尝试学习一些视频相关的知识,随便一搜才知道原来国内有雷神这么一个真正神级的人物存在,尤其是在这里(传送门)看到他的感言更是对他膜拜不已,雷神这种无私奉献的精神应当被我辈发扬光大.那写这 ...

  5. spring源码深度解析 第2版 pdf_吹爆!阿里爆款Spring源码高级笔记,原来看懂源码如此简单...

    Spring的影响力想必无需与大家多说,如果你用spring,那么读读源码有助于对你最重要的工具的理解,好的框架源码也可以帮助我们理解什么是好代码. 刚参加工作那会,没想过去读源码,更没想过去改框架的 ...

  6. 吹爆!阿里新产Spring源码高级笔记,原来看懂源码如此简单

    Spring的影响力想必无需与大家多说,如果你用spring,那么读读源码有助于对你最重要的工具的理解,好的框架源码也可以帮助我们理解什么是好代码. 刚参加工作那会,没想过去读源码,更没想过去改框架的 ...

  7. 进制转换及如何求校验码(海明校验码及循环冗余校验CRC码)

    文章目录 前言 一.进制转换 1.1 二进制转换为八进制数和十六进制数 1.2 任意进制数转换为十进制数 1.3 十进制转换为任意进制 二.校验码求取 2.1海明校验码 2.2循环冗余校验CRC码 总 ...

  8. 3.3.1网络原理数据链路层之差错控制(检错编码和纠错编码)-(奇偶校验码、CRC循环冗余码、海明码)

    文章目录 0.脑图时刻 1.为什么会出现差错? 2.检验和纠正差错的编码方法 (1)关于数据链路层和物理层的编码区别 (2)冗余编码 3.检错编码 (1)奇偶校验码 (2)循环冗余码(CRC) 4.纠 ...

  9. 数据链路层之差错控制(检错编码和纠错编码)-(奇偶校验码、CRC循环冗余码、海明码)...

    思维导图 为什么会出现差错? 检验和纠正差错的编码方法 关于数据链路层和物理层的编码区别 冗余编码 检错编码 关于检验码和纠错码中的奇偶校验码.循环冗余码(CRC).海明码可参考我之前写的:校验码(一 ...

最新文章

  1. LeetCode简单题之分发饼干
  2. java web oracle 分页_Oracle分页的两种方式
  3. python: 关于解决‘\u‘开头的字符串转中文的方法
  4. Could not get dialect instance.
  5. 数据结构与算法 / 霍夫曼树、霍夫曼编码和解码
  6. D. Anton and Chess 模拟题 + 读题
  7. knex 单表查询_knex.js
  8. 学习EXT第九日:表单入门
  9. 互联网应用程序压力测试的那点事
  10. php在web服务器中的工作原理
  11. ubuntu/Windows双系统,在ubuntu隐藏window分区的方法
  12. php想做一个无刷新弹窗,php+ajax实现无刷新的新闻留言系统
  13. rapidxml往xml文件循环写入内容
  14. 起底量化交易的发展之路
  15. 人月神话札记:系统设计
  16. 前段JavaScript学习---狂神说java笔记
  17. 【随便搞搞】自己写了一个用于炒股软件的自动选股分析代码 0603更新 天齐锂业两个板出局
  18. 郭德纲最新相声:韩国学艺
  19. 0x01.被动信息收集
  20. 系统中出现许多wmiprvse.exe进程的处理方法

热门文章

  1. 趣谈Python垃圾回收机制
  2. 【各种**问题系列】什么是 LTS 长期支持
  3. 【andriod】一文带你走位设备APP的MQTT通讯
  4. 最全PDF转换器使用方法以及功能介绍 文件转换不再困难
  5. artdialog ajax,artDialog v6 iframe 跨域请求
  6. Http缓存机制与原理
  7. 解决Tomcat的端口号与oracle端口号冲突问题
  8. css 文字上下居中
  9. 判断链表是否有环,并且找出链表环的接点
  10. openCV python低通滤波方法汇总