对于循环汉明码还是比较熟悉的,但是海明码是什么鬼?不急,博客上有许多讲解这个的。
参考:
http://blog.youkuaiyun.com/yudandan10/article/details/11878421
类比循环码的特点(不熟悉的一定要去复习下)。
对于k位的信息位,如果要有纠正一位误码的能力,必须满足
2^r-1>k+r(减一是r位校验位为零是没有意义的~)
举例,对于k=8,原码:10101111至少需要校验位的位数r=4。
1.这样就确定了海明码的码长n=r+k,我们目前n=12;
2.接下来确定校验位是如何放的~
P1-P4都是校验位其他照着要校验的码直接按顺序填写即可
3.信息位和校验位的位置确定后,那么问题就剩下校验位怎么产生的了
要想校验第几位 (i) 那么i就等于校验位所在位号的和 举个简单的例子,加入我要校验第3位,那么3=1+2 也就是3 由第一个和第二个校验位来校验,照这样的算法,以此类推,我们就可以知道每个位置都需要哪个校验位来校验了 。(一般从大号往小号取,比如6=4+2,不能搞个1+1+1+1+1+1)
通过对占用的校验号统计,我们知道P1-P4分别是那些校验后位号的奇偶校验和。
No.1 bit has parity collection: 1,3,5,7,9,11 (即P1由3,5,7,9,11这些位异或而得,后面的也是如此)
No.2 bit has parity collection: 2、3、6、7、10、11
No.4 bit has parity collection: 4、5、6、7、12
No.8 bit has parity collection: 8、9、10、11、12