校验码
- 位错误:0变1,1变0
由若干位代码组成的一个字叫码字,
将两个码字逐位进行对比,具有不同的位的个数称为两个码字间的距离。
一种编码方案可能有若干个合法码字,各合法码字间的最小距离为码距d
当d=1,无检错能力;当d=2时,有检错能力;当d>=3时,若设计合理,可能具有检错,纠错能力。
奇偶校验码
- 奇校验码:保证整个校验码“1”的个数为奇数
- 偶校验码:保证整个校验码中“1”的个数为偶数
异或运算
海明码
海明码设计思路:将信息位分组进行偶校验,即多个校验位。
多个校验位能携带多种状态信息,(对/错,错在哪)。
循环冗余校验码(CRC码)
思想:数据发送、接收方约定一个“除数”(一般为一个生成多项式)
-
K个信息位与R个校验位作为“被除数”,添加校验位后需保证除法的余数为0
-
确定K、R以及生成多项式对应的二进制码,其中K=信息码长度,R=生成多项式最高次幂
-
移位: 信息码左移R位,低位补0
-
相除:对移位后的信息码,用生成多项式进行模2除法,产生余数
ps:模2除就是取被除数(除完一次之后就是对余数进行判断)最高位如果为1,则商1,对除数后三位与对应的被除数三位进行异或运算
-
-
收到数据后,进行除法检查余数是否为0
-
若余数非0说明出错。
-
K个信息位,R个校验位,若生成多项式选择得当且2R>=K+R+1则CRC码可以纠正1位错。(实际上一般只用来检错)