校验码的作用
校验码可以用于检查传输的信息中是否存在错误、对错误进行纠正。能够被校验的数据,码距必须大于1,否则数据中任何一位发生变化,都会变成另外一个合法的编码。
每种校验码都有3个需要重点关注的地方:
1. 校验码在数据中所处的位置
2. 校验码的数值
3. 校验后如何判断传递的信息是否有误
奇偶校验码
奇偶校验码是通过奇偶性对传输数据的正确性做判断的。从校验码在信息中所处的位置,可以将其分为水平奇偶校验、垂直奇偶校验、水平垂直奇偶校验。校验码的数值确定方式,是要能在增加校验位之后,让编码中1的个数都变成奇数(奇校验),或者让编码中的1的个数都变成偶数(偶校验)。加上校验位,数据传输过程中,通过编码中数据1的个数是奇数、还是偶数,判断信息是否存在错误。奇偶校验码的缺点是,只能检查出奇数个位置出错的编码,且无法定位错误发生的位置。
海明码
海明码也是利用奇偶性校验错误,其优势是不但能检查出错误,还能确定错误发生的位置。发明这个的人好聪明,虽然我不知道海明码为何可以做到这一点。如图中所示,对数据位的每个数据,判断其需要哪些校验位进行校验。就可以得到计算校验码数值的公式。例如,计算P1的公式为
信息传输后,使用P1与D0,D1,D3,D4,D6再做异或,得到P1的校验结果G1。同样,可以得到P2,P3, P4的校验结果G2,G3,G4。偶校验为例,当G4G3G2G1全为0时,表示信息正确。否则,其表示的十进制值指出海明码中发生错误的位置。
循环冗余校验
循环冗余校验常用在通信和存储领域。这块没有详细了解,大致的做法如图中所示,如有错误,欢迎纠正。