数据校验码(奇偶校验,海明校验,循环冗余校验)内容总结及个人经验分享

来源:互联网 发布:js获取兄弟节点 编辑:程序博客网 时间:2024/06/04 18:09

引言:
常用的数据校验方法有三种:奇偶校验,海明校验和循环冗余校验(CRC)。其对应的是三种不同而又有关联的码制,以下编者打算从它们的编码原理,需要的基础知识以及实例来对此进行大致的分析。在了解数据校验之前,首先谈谈它有什么作用。
了解计算机数据格式的伙伴们都知道,计算机数据的存储是以二进制(0和1)组成的。然后8个位(8个1或者1)是一个位byte,这就是我们平常kb中的b。一谈到这里大家就豁然开朗了。如果我们没有数据校验码来协助检测传输的数据的正确性,那么可能一个小小的二进制位就可能导致文件的损坏,数据校验的重要性由此可知。当然,数据校验码也是由二进制0和1组成。

    接下来我们逐步介绍这三种互相有关联的编码制度。

一,海明校验码
1)优点:并行纠错(类似于宽敞的高速公路),耗时短,校验位开销小(校验码数目相对较少,码距为4)
2)缺点:硬件开销大(高速公路的造价很高)
3)原理:假如有r个二进制校验位(默认值为0),它们需要对已知的k个二进制数据进行分组校验 。
那么需要满足这个公式:2^r≥k+r+1(r个二进制校验位共有2的r次方种方法,k个数据位,1位备用位)。这个公式的含义就是:你要以r个二进制位表示出总的数据长度。这样就能完整地表示所需要校验的数据了。 这个公式有一个局限:只能校验一个二进制位。
我们可以理解到,所有的数值都能用1,2,4,8表示出来,即(2^0,2^1,2^2,2^3)
如果我们想校验两个二进制位呢?
2^(r-1)≥k+r这个公式就能表示出来了,原理如下图。这里写图片描述
4)海明校验码的步骤:
确定校验位数;
确定校验码位置(1,2,4,8);
数据位拆分(插入到被测数据中);
5)海明校验码校验结果(可选总校验位)
6)分组码海明校验线路
重点:译码器(4~16),非门,奇偶形成电路

二,循环冗余校验(CRC)码
1)优点:串行纠错(人行通道),硬件开销小
2)缺点:耗时长,校验位开销大
3)原理:在确认校验位数目k之后,将原有的待检测数据左移k位,其余位置0。通过选择生成多项式G(x)(如1011)模2除,得到余数R(x),将得到的余数位填满至待检测数据右侧。
4)CRC的译码与纠错:
我们知道,通过应用数学找到一个可以利用的生成多项式G(x)就可以找到余数与出错位的联系。所以,“生成多项式”和“码制”是决定CRC码纠错的两个决定因素。最后,我们参照CRC码出错模式图,一一参照即可找到出错的位置。
或者,我们可以亲身去尝试一次。从第一次模2运算,将商右移一位,继续模2运算。这样就可以得到最后出错的余数。以这样逆过程的方式一步步推导出相应出错的原因。

三,奇偶校验码
1)优点:校验位为1,码距为2,开销小
2)缺点:适用性小
3)原理:如果待测数据有8个二进制位。
使用奇校验编码时,观察被测数据中“1”的数目。如果为偶数(数值0也算),则置1;如果为奇数,则置1。
使用偶校验编码时,观察被测数据中“1”的数目。如果为偶数(数值0也算),则置0;如果为奇数,则置0。
最后将结果加在数据的左边,构成奇偶校验码。

掌握三种校验需要的基础:
1.奇偶校验:原理很简单;
2.海明校验:编码步骤,线路中的译码器作用,两种位数不同的纠错方法,总校验位S和其他校验位S(i);
3.CRC校验:模2乘除运算(基于异或操作的方法),CRC码的多项式表达.

接下来谈谈三者之间的联系和区别:
奇偶校验构成了海明校验的奇偶形成电路;CRC校验是与海明校验原理类似,但是串行的一种校验方式;海明校验适用于比较大型的数据校验,因为并口多;CRC校验是串行纠错,因此接口会很少,开销小。

0 0
原创粉丝点击