机器级数据的检错与纠错

二进制数据的检错纠错

计算机在用“高低电平”的方式传输和表示数据的时候,会因为电平毛刺等导致某些位出错,这时就需要相应的数据纠错检错的机制。比如多用于服务器的ECC内存,其同时具备纠错和检错功能。而普通PC内存通常只有检错功能。计算机电路结构使数据出错时不会出现“多位或少位”的情况,只会出现“位值”的错误,并且多个位中的每个位是否出错可看作是概率独立的。

目前主要的纠错检错机制是纠错码,其核心是在原字(数据位)额外加若干位(校验位),新数据称为码字(用于和区分),码字同样是定长的,实际传输数据会传输码字而不是字。下面通过汉明距离给出编码方案纠错检错能力间的关系,汉明距离的定义之前在<算法>中讨论过:

1) 若两两合法码字的汉明距离是\(d+1\)且错误不大于\(d\)位则必可检错。因为到合法码字汉明距离为\(1-d\)的所有数据中,不可能有合法码字;

2) 若两两合法码字的汉明距离是\(2d+1\)且错误不大于\(d\)位则必可纠错。因为距错误码最近的合法码,汉明距离必不大于\(d\),而距错误码第2近的合法码,汉明距离必大于\(d\),第2近的已不满足题设。所以纠错的方法就是找到具错误码汉明距离最近的合法码;

3) 若两两合法码字的汉明距离是\(2d\)且错误不大于\(d-1\)位则必可纠错。即(2)的偶数距离版;

 

奇偶校验码(1位检错)

下面讨论种简单且常用的奇偶校验纠错码方案,其可检错1位且无法纠错。其能力看似不强,但实际的应用场景往往是需要在纠错检错能力和额外数据量中做取舍的。

奇偶校验分为奇校验偶校验,其中奇校验的码字规则是“原字1的总数为奇数则在原码追加1,否则追加0”,偶校验反之。然后分析奇校验的能力,设存在2个码字的汉明距离是1。如果这1位差异在奇校验位,那么二者的数据位一定不完全相同导致矛盾。如果是在数据位,则一定导致二者奇偶性不同,从而校验位一定不同导致矛盾。故奇校验码的汉明距离至少为2,故其可检错1位且无法纠错

 

汉明码(1位纠错)

先研究可纠错1位编码最小码字长度与原字长度的关系。设编码方案中的字和其码字的长度为\(m,n\),那么首先确定合法非法的码字共有\(2^n\)个。根据上述理论,合法码字间的汉明距离至少为3。这保证“所有合法码字的所有1位错误”没有重复,即合法码字与1位错误码字的比为\(1:n\)。把所有其他错误码字计为\(\alpha\),则正确码字的数目为\(\frac{2^n}{1 + n + \alpha}\)。考虑到正确码字的数目一定不能小于原字的数目(即正确码字必须能映射到全部上原字),所以正确码字数目满足\(\frac{2^n}{1 + n} \geq \frac{2^n}{1 + n + \alpha} \geq 2^m\)。还可设校验位数目\(r=m-n\),然后通过代换得校验位数目码字长度的关系\(m+r+1\leq 2^r\)。

下面讨论达上述下界的可纠错1位的汉明码。其方案是“在原字混入校验位,其中第\(i\)(从1开始计数)个校验位是码字第\(2^{i-1}\)位,然后设想把码字所有位的序号(从1开始计数)用二进制数表示,那么该校验位的值等于第\(i\)位等于1的所有二进制序号对应的码字位的值的偶校验码”。举例子:

校验位1) 码字的第1位,关联第1,3,5,7…位的码字(第1,11,101,111…位的码字);

校验位2) 码字的第2位,关联第2,3,6,7…位的码字(第10,11,110,111…位的码字);

校验位3) 码字的第4位,关联第4,5,6,7…位的码字(第100,101,110,111…位的码字);

校验位4) 码字的第8位,关联第8,9,10,11…位的码字(第1000,1001,1010,1011…位的码字);

可该方式可关联到码字的所有位,且若码字位的序号(二进制)中含\(n\)个1,则有\(n\)个校验位关联了码字的该位,改变它会改变\(n\)个校验位的值。显然所有码字的位的序号都有\(n\geq 1\),其中\(n=1\)意味该序号对应1个校验位,否则对应1个数据位。纠错方法是先不管是否有错误,先用全部数据位算出全部校验位,然后假设已知道码字最多只错1位。可分情况讨论:

1) 若有1个校验位的计算结果有出入,则该位就是错误位。因为若是有1位数据位出错则计算结果会显示有2个校验位出错,若是其他的1个校验位出错也是不可能的;

2) 若有2个或以上的校验位的计算结果有出入,则一定是1个数据位出错。因为若是1个校验位出错,则计算结果会显示1个校验位出错。想定位这个错误数据位,最朴素的可行方法就是遍历所有错误校验位都关联的码字位,如果改变其中1个码字位后整个码字变得合法,那这就是错误数据位;

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部