数据校验码概述

奇偶校验码

最简单实用的一种校验数据的方式。在原始数据的后面加一个校验位来实现数据的校对。

若原始数据为:\(D=(D_1,D_2...D_n)​\)

偶校验:$D_偶 = D_1 \bigoplus D_2 \bigoplus...D_n $

奇校验:\(D_奇 = \overline{ D_1 \bigoplus D_2 \bigoplus...D_n }\)

验算时:

\(F = \overline{D_1 \bigoplus D_2 \bigoplus...D_n \bigoplus D_奇}\)

\(F = D_1 \bigoplus D_2 \bigoplus...D_n \bigoplus D_偶\)

如果 \(F\) 的值为 0 ,则传输正确,否则错误

奇偶校验码只能检查一位错,并且无法纠错

海明检验码

若一共有 k 个数据位,则需要 r个检验位来完成一位纠错,两位检错。

$ 2^{r-1} \geq k + r$

新生成的数据为 k+r位,其中每个校验位放在2的幂次方的位置上

其值为原始数据位在新的排列后,其位次的二进制中有对应位的数的异或和

最后一个校验位的值是前面所有位的异或和,其作用是判断是一位错还是两位错

当接收方接收数据后。先看最后一位,若是1则代表一位错。具体位置由各个位置的海明码组成的二进制表示。

若是0,则若是其他位校验码都是0表示传输正确,否则就是两位错。

CRC循环校验码

前置技能:模2除法

传输前双方约定好一个二进制串,设长度为r,要求最高位和最低位的值必须为1

先将原始数据右移r-1位,低位补0。

然后将这个数除之前的二进制串,得到的余数和之前处理好的数据相加。得到校验码。

PS.这个余数一定是要r-1位的,若不够则高位补0

posted @ 2018-06-28 21:15 SCaryon 阅读(...) 评论(...) 编辑 收藏