检错与纠错、奇偶校验码与海明校验码

检错与纠错的原由

元件故障、噪声干扰等因素常常导致计算机在传输、存储或处理的过程中出现错误,故采用专门的逻辑电路对信号进行编码有便于检测错误甚至校验错误。本文介绍奇偶检验码和海明码。

奇偶校验码

这是一种最简单且应用最广泛的检错码,用的是以为校验位的奇偶校验。分成水平奇校验和水平偶校验。

1、水平奇校验

设数据X是一个n位字,在其高位前增加1位奇校验位,保证数据(包括奇校验位在内)的n+1位中,1的个数为奇数,这也就是奇校验称呼的由来。
例:
有X = 0100010,采用水平奇校验时,由于X本身的1的个数是2个,所以在高位前添加1使得X的1的个数是奇数个,即X变成10100010.

2、水平偶校验

与奇校验类似,水平偶校验在数据的高位前添加一位校验位使得此数据各位上1的个数为偶数。当传输到对方的时候可以通过对传过来的数据X进行检测,如果没有出现问题则可认为在传输或者存储的过程中没有发生1位错误。
例:
有X = 0100010,采用水平奇校验时,由于X本身的1的个数是2个,所以在高位前添加0使得X的1的个数是偶数个,即X变成00100010.当传输到对方的时候可以通过对传过来的数据X进行检测,如果没有出现问题则可认为在传输或者存储的过程中没有发生1位错误。

3、不足和改进

对于出现一位错误的情况,奇偶校验可以检测出错误但却不能检测出错误的准确位置,同时,当数据出现两位同时出现错误会导致检错码失去作用,但由于实现起来非常简单容易由此得到了广泛的应用。对于上述提到的两个问题,伟大的先人(是不是说老了,其实很多人还挺年轻的)在上面两个校验码的基础之上相继发明了垂直奇偶校验码和水平垂直检验码(在这我就不多说了)。

海明校验码

为了针对更复杂更庞大的数据能及时检错和纠错,通常将原数据配成海明编码。

1、编码纠错理论–编码最小距离(码距)

指在一种编码系统中任意两组合法代码之间的最少二进制位数的差异。
根据纠错理论:
L - 1 = D + C 且 D >= C
即编码最小距离L越大,则其检测错误的位数D越大,纠正错误的位数C也越大,且纠错能力恒小于或等于检错能力。如当编码最小距离L=3时,最多能检错两位,或能检错一位、纠错一位。海明码就是根据这一理论提出的具有一位纠错能力的编码。

2、检错

为了使检测的二进制代码具有纠错能力,需添加位检测位,添加的检测位的位数k有下面的公式得到:、
2^k > = n + k + 1
插入的位置分别是2的0次方,2的1次方,2的2次方以此类推,各位添加的检测码的值由在二进制数位置数有含有检测码的所有位置上的数进行模二加得到。
例:
X = 10101
通过上面的公式可以得到k=4,故要插入4位检测码,将每位检测码称为Pi,每位数据码称为Di,则有:
P1 = D1 + D2 + D4 + D5 = 1
P2 = D1 + D3 + D4 = 1
P3 = D2 + D3 + D4 = 1
P4 = D5 = 1

故添加的检测码是1111,所以最后传输的数据是11101011。

3、纠错

当接收方接收到数据以后,首先提取出检测码1111,然后求出指错字,设指错字为Gi,通过下列计算出指错字Gi:
G1 = P1 + D1 + D2 + D4 + D5 = 0
G2 = P2 + D1 + D3 + D4 = 0
D3 = P3 + D2 + D3 + D4 = 0
D4 = P4 + D5 = 0

上面求出的指错字是无数据出错的状态下的,当有数据出错时指错字的大小就是出错数据位的位置。

4、不足

海明码优点多多(当初学习的时候感觉发明这种检错码的人简直是天才!!!),但当检测出错误并得到错误数据位位置后的实际纠错的方式并没有太过先进的地方(虽然已经很好了),同时也只能检测并纠错一位数据位错误。

这是我的人生中的第一篇博客,打算记录下自己在学习计算机组成原理中感觉比较有意思的知识,大家以后多多关照(≧▽≦)/啦!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值