奇偶校验码
最简单实用的一种校验数据的方式。在原始数据的后面加一个校验位来实现数据的校对。
若原始数据为:(D=(D_1,D_2...D_n))
偶校验:$D_偶 = D_1 igoplus D_2 igoplus...D_n $
奇校验:(D_奇 = overline{ D_1 igoplus D_2 igoplus...D_n })
验算时:
(F = overline{D_1 igoplus D_2 igoplus...D_n igoplus D_奇})
(F = D_1 igoplus D_2 igoplus...D_n igoplus 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