计算机组成与体系结构-检错与纠错码

#奇偶校验码

  • 简单来说如果是奇校验码,那么数值部分各个位上数的和与校验位的和应该是一个奇数,同理对于偶校验位就应该是一个偶数
    计算机组成与体系结构-检错与纠错码_第1张图片

#循环冗余校验码

通过某种数学运算建立数据和校验位之间的约定关系。它具有以下的特性:
纠正所有一位错误;
检测所有一位或两位错误;
检测所有奇数位错误;
检测所有低于16位的突发性错误;
大于16位的突发性错误,可以检测出的概率为99.9%。

编码与译码过程
对于发送端:1)被校验数据除以生成多项式。2)被校验数据减去余数,结果作为发送数据。其中生成多项式的表示:如生成多项式G=1011,表示生成多项式为G(X)=X3+X+1
对于接收端:接收数据除以生成多项式。可以除尽,编码正确;除不尽,余数指明出错位所在的位置。

下面举例如下
计算机组成与体系结构-检错与纠错码_第2张图片
:这里的模2除法其实就是各位异或就好了
计算机组成与体系结构-检错与纠错码_第3张图片

发现如果接收到的数据没有问题那么余数应该全是0,否则就说明数据有问题

同时需要注意的是被除数必须保证首位是1才行,如果不是1,那么此处的商就为0,接着继续往下顺延直到首位为1即可。

#海明码

海明码主要用于存储器数据的校验与纠正。采用奇偶校验的原理,错误检测和校正能力随着信息字中加入奇偶校验位的数目线性增加。适用于最有可能发生随机错误的系统。每一位的出错概率相同;每一位与其它位是否出错没有任何关联。

对于一个数据如果有m个数据,那么用来检验的数据长度r与m存在如下的关系(m+r+1)≤2^r

  • 海明码的编码规则:编号是2的整数次幂的位置为奇偶校验位,其它位为数据位,按顺序填写。用如下方法确定某数据位应被哪些奇偶校验位所检测:第b位数据应被第b1、b2、…、bj位奇偶校验位所检测。其中,b1、b2、…、bj必为2的整数次幂,且b1+b2+…+bj=b。
    比如,位置编号为7(即b=7)的数据,由于b=1+2+4,则此数据位应被位置编号为1、2、4的奇偶校验位所检测。
    这里写图片描述

  • 计算机组成与体系结构-检错与纠错码_第4张图片

对1位置:因为3,5,6,7,9,11的二进制编码对应的权值为1的部分为1的部分是10101,所以D3+D5+D7+D9+D11=3是一个奇数,所以1位置应该填1。
对2位置:因为3,6,7,10,11的二进制编码对应的权值为2的部分为11101,所以求和后1的数量是偶数,所以2位置应该填0。
对4位置:因为5,6,7,12的二进制编码对应的权值为4的部分为0110,所以求和后1的数量为2是偶数,所以4的位置应该填0。
对8位置:因为9,10,11,12的二进制编码对应的权值为4的部分为0100,所以求和后1的数量为1是奇数,所以8的位置应该填1。

这样我们就求出“M”的编码字为:010011100101。

如果我们尝试修改数据的某一处如第六位的编码,那么可以知道,第二位校验码和第四位的校验码进行校验时就会发生错误,那么2+4就等于6,就说明了错误出在了第六处。这样就可以通过一轮校验定位数据出错的位置,非常方便

你可能感兴趣的:(▶︎计算机组成与体系结构)