纠一位错误的海明码
设一个系统中,编码后的码字位数是 n,则 n=m+r。因为要传输的数据位是 m 位,该系统需要传输的正确的码字个数应该是2m,而全部码字的个数是2n。
如果每个正确码字发生1位错,能够被纠错,至少发生1位错不会变成另外1个正确的码字,如果n位码字的每一位都发生一次跳变,变成一个错误的码字,那么每个码字至少需要n+1个码字(海明码位数为2检查1)来表示它,所以,下面这个式子成立:

纠正单个错需要的冗余位跟数据位的关系
(m+r+1)<=2^r
根据这个公式,可以计算出传输m位数据,至少需要的冗余位数r,比如,传输m=5位,需要的冗余位r=4
纠正单个错误需要的校验位的下界满足:
m r n(码字的总位数)
1 2 3
2~4 3 5~7
5~11 4 9~15
12~26 5 17~31
27~57 6 33~63
58~120 7 65~127
海明纠错码
校验位和数据位
凡编号为2的乘幂的位是校验位,如1、2、4、8、16、……
其余是数据位,如3、5、6、7、9、……
每一个校验位设置根据:包括自己在内的一些位的集合的奇偶值(奇数或偶数)。
*校验位
将某一位数据位的编号展开成2的乘幂的和,那末每一项所对应的位即为该数据位的校验位(收方使用)。 反过来,校验位的校验集合也包含这个数据位。
如: 11 = 1 + 2 + 8
29 = 1 + 4 + 8 + 16
校验位1的检验集合为所有奇数位。
校验位2的检验集合:2、3、6、7、10、11、…
校验位4的检验集合:4、5、6、7、……
校验位8的检验集合:8、9、10、11、……
校验位的计算(m=7,r=4)
实例:发方怎么计算校验验位?
先来看第一个校验位,它的校验集合是所有的奇数位,对应的值分别是1、0、1、0、0,2个1,是偶数了,所以,校验位1只能填入0;
再看第二个校验位,其校验集合是第2、3、6、7、10、11位,对应的值分别是1、0、1、0、0, 2个1,是偶数了,所以,校验位2只能填入0;
校验位4对应的校验集合是第4、5、6、7为,对应的值分别是0、0、1,只有1个1,是奇数,所以,校验位4需要填入1,使校验集合的1的个数是偶数。
同样的道理,校验位8需要填入0
最后,发方得到了编码后的码字是00110010000
接收方如何纠错
首先将差错计数器置“0”,counter=0。
当码字到达接收端后,接收端逐个检查各个校验位的奇偶性。
如发现某一校验位和它所检测的集合的奇偶性不正确,就将该检验位的编号加到差错计数器中。最后,所有的校验位都检查完成之后,检查计数器counter的值
Counter=0,无差错
counter ≠0,出错,该值指明出错的位
例:接收纠错
一个采用了纠1位错海明码的系统,传输数据位数1位,冗余位4位,现在接收方收到了码字如下:00111000100,那么:
首先校验每个校验位,计数器counter初始化:
第一位:00111000100,校验集合有3个1,错
第二位:00111000100,校验集合有1个1,错
第四位:00111000100,校验集合有2个1,对
第八位:00111000100,校验集合有1个1,错
累加出错位编号:conuter=1+2+8=11
可计算得其第11位出错,将该位由0改为1,即纠正得到正确结果: 00111000101
利用海明码纠正突发错误
有时候,一个尖峰电压,可能导致突发错误。我们可以利用纠1位错的海明码纠正这样的突发错误。
将连续的k个码字按行排列成矩阵
发送数据时,按列发送码字,每列k位
如果一个突发性错误长度是k位,则在k个码字中,至多只有一位受到影响,正好可用海明码纠错改位后恢复
585

被折叠的 条评论
为什么被折叠?



