奇偶校验
这个校验主要的应用场景是ASCII码的校验,因为ASCII一共有 128个,所以只需要7位足够了,但是计算机基本按照字节存储,所以自然而然多出来一位,也就是8位。那么左边的那个bit位就可以用来做奇偶校验位置了。
核心思想:对信息位中的1进行异或运算,然后根据这个异或结果和奇偶校验的方法决定校验位的值。
公式:
举个例子:
对于奇偶校验来说,只能检测出来奇数位出错的情况,也就是出错的位的个数可能为1,3,5,7……
汉明码
汉明码的计算流程如下:
- 利用公式:
计算需要的校验位数
- 确定校验位分布,汉明校验位的分部服从:
- 分组形成校验关系
- 校验位取值并计算最后的结果
所有计算机组成的书上这个计算过程根本就写不明白,这里我推荐利用表格计算,以1010为例:
- 利用公式计算位数
解得k为3
- 计算分布(
)
- 分组形成校验关系
这里直接用表格计算就行了
这里的
就是汉明校验位置了,那么怎么计算的呢?
这里需要根据表格中可以看出来,对于信息位来说,可以总结出来这样一个公式
这样的一个公式可以好好理解一下,对照上面的计算方法,可以很清楚了明白计算了。
关于校验
校验计算完成以后根据
的值检查是否有问题,如果全为0则没有问题,如果不为0,则转换为10进制,所代表的就是这个十进制数代表的位置出现了错误,纠错很简单直接进行位反转就行了,0转1,1转0
CRC
这个里面的核心算法是一个叫做模2除法的东西,这个东西应该是CRC中的核心部分了。
模2除法:
计算过程就是最高位够用就按照四则混合运算的除法在商位置写1,然后余数使用异或计算。
CRC的算法流程如下
- 根据多项式最高次项的系数进行移位,例如对于多项式
移位补0后:
- 进行模2除法 被除数为信息码移位后结果 101001000 除数为
二进制展开1101
- 得到的余数就是CRC校验码,把这个CRC校验码写到后面就可以了,结果为101001001
校验过程是一个逆过程,对一个含有CRC的信息串通过模2除,计算余数,如果不全为0,则十进制数代表的位置的信息出现了错误,反转就可以了