(二-2)三种校验码【计算机组成原理】

校检码



(一)奇偶校验码

思想

image-20220128142752962

如果使用两个比特位来表示传输信息,那么可以做到一一对应的关系。但是如果传输的信息发生跳变(发送的是01,接收到的是00),由于00是合法的,所以接收端是发现不了错误的。进行优化:用三个比特位表示传输信息,那么就会有四种冗余状态,这样就可以检查储错误(发送的是001,接收到的是000,但是000是非法的状态,所以接收方就会发现错误)。

码字:由若干位代码组成的字。(也就是不同的情况,分为合法的码字和非法的码字)

两个码字间的距离: 将两个码字逐位对比,具有不同位的个数称为两个码字的距离。(左边表中的码字为1,右边表中的码字为2)

码距: 合法码字之间的最小距离。左边的编码方案码距为1,右边的编码方案的码距为2。

如果码距为1,那么倘若发生跳变,那么也不会发现。如果码距为2,如果只有一个比特位发生跳变,那么跳变完的码字肯定不是合法的码字,接收端就会发现错误。

所以,当码距=1的时候是没有检错能力的;当码距=2的时候,有检错能力;当码距>=3时,可能具备检错和纠错的能力。



重点
image-20220128144817044

如果使用奇校验码,那么必须保证调整完奇偶校验位后整个编码的1的个数为奇数个。使用偶校验码也是同样的道理。

例:如果使用偶校验码,在传输信息的过程中有一位比特发生跳变,那么接收端收到的1的个数肯定是奇数个,发现错误。但是如果有偶数位发生跳变,那么接收端就不会发现错误。这就是奇偶校验的局限性。

  • 偶校验的硬件(机器)实现?

    (1)将奇偶校验位补上 : 将所有位进行异或后的得数。

    (2)判断正误的过程:将所有位进行异或,结果是1就证明是错误的。



复习

image-20220128150001953

奇偶校验的码距就是1,只能检查出奇数位跳变的错误,而且清楚错误的位置,只能要求发送端重传






(二)海明码


思想

在偶检验的基础上的改进。将有n位信息位的数据分成k组,每组分别进行偶校验,每个分组会对应一个校验位,最终就会携带k个校验位。多个校验位可以携带多种状态信息,不但可以反映出对错,也可以反映出出错的位置。


重点
  • 需要多少位的校验位呢?

    有n个信息位,k个校验位,总共的位数是n+k位。一共有2的k次方种状态。n+k位都可能会发生跳变,而且还有不发生跳变的情况,所以必须保证2的k次方种状态将这些情况全部包括。所以必须满足2的k次方>=n+k+1。


    image-20220128152038503

    如上,信息位是4位,通过计算可以得出需要3个校验位。所以海明码一共7位,然后校验位必须按照1,2,4,8的这种顺序来插入。怎么分的组,每一组的校验位怎么求呢?将信息位写成二进制的形式,按照1,2,4的权重进行分组。比如:3化成二进制是011,那么1处的权重是1,那么它的校验位是1,2处的权重是1,那么它的校验位也有2,但是没有4。依次类推:P1对应的分组中有3,5,7;P2对应的分组中有1,3,4;P3对应的分组中有2,3,4。P1,P2,P3这三个校验位的值就可以通过自己分组中信息位的异或算出,结果分别是0,1,0。接收端的纠错:将组内的数全部异或(包括校检位),如果结果时都是0,那么没有发生跳变。如果检验位(S3,S2,S1,这里的编码按照从大到小来规定)的结果是110,那就说明是第六位(H6)出现问题。

补充图片:

image-20220128154151173


海明码具有两位的检错能力和一位的纠错能力

但是,海明码在这种状态下是没有办法区分是1位比特跳变 还是 两位比特跳变。不能仅仅通过S1 = 1,S2 = 1就判断是H3出的问题。可能是P2和P1都出现了问题。所以有必要进行优化,增加全校验位。

  • 全校验:就是对整个编码进行依次总的偶校验。首先设置初始值,因为前面已经有了3个1,所以它必须也是1。

    这个时候,
    1,如果S3 S2 S1的值为:000,而且全体偶校验的结果是0,那么整个编码就没有出现问题。

    2, 如果S3 S2 S1的值不是000,而且全体偶校验的结果是1,有一位出错,直接找出来就行。

    3,如果S3 S2 S1的值不是000,而且全体偶校验的结果是0,那么证明有两位出错(无法确定),需要重传。

复习

image-20220128155638721





(三)循环冗余校验码(CRC)


思想

要传输的数据 除一个生成多项式(发送方和接收方已经约定好的) 得到商 和 余数。 将数据与余数一块传给接收方。余数和要传输的数据相加后再除以之前的生成多项式,若结果是0,那么传输过程中没有发生改变。

若生成多项式的位数是r位(这个位数是看位置数的最高次方数+1(包括0次方),比如x的3次方+ x +1 化成标准形式就是1001),那么在数据后面加上的余数的位数一定是r-1位。

  • 总结

在传输之前,先将余数求出来:若生成多项式的位数是r位,那么就先在数据之后加上r-1位的0,然后通过与生成多项式作除得到余数。这个余数就是FCS帧检验序列/冗余码。然后将冗余码拼接到数据的后见传给接收方,由接收方对其 除生成多项式来进行检验。

注意:在计算二进制与二进制的除法的时候,写商的时候只看最高项时不是1,然后就商1,后面的数进行异或。image-20220128162609323

接收方在收到了数据和冗余码以后 与 除数进行相除,余数不是000,就说明出错。

余数的值和出错位的关系是以8为周期进行循环:

image-20220128162853084

那是不是说循环冗余校验码只有差错的能力,没有纠错的能力呢?其实是不对的,因为上面的例子不能纠错是因为信息位太长了,上面例子中的信息位置如果短一点,保证在4位或4位以内,那么就可以找到出错位进行纠错。

总结:生成多项式决定着余数的个数,余数的个数决定着能够纠错的上限个数,上限个数 = 数据数+余数。

余数如果有3个,那么可以纠错7个(1个正确)。因为余数自身个数为3,所以数据数上限就是4。

这就与那个公式相呼应了:2的R次方 >= K + R + 1

如果满足这个公式,CRC校验码就有可以纠正一位错误的能力。

image-20220128164039177
复习

image-20220128164127294

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是小明同学啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值