本人是初学者一枚,写下笔记分享自己的一些见解,若有错误之处希望各位大神多多海涵,并请指出理解有误的地方,谢谢
海明校验码
海明码由校验位+信息位组成,其中规定校验位的位置位于整个编码 2n2^n2n 的位置。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
I4I_4I4 | I3I_3I3 | I2I_2I2 | I1I_1I1 | 信息位 | |||
r2r_2r2 | r1r_1r1 | r0r_0r0 | 校验位 |
其中校验位与信息位的位数公式:2r>=n+r+12^r>=n+r+12r>=n+r+1 ,其中r代表检验位的位数,n代表信息位的位数。
求信息位1011的海明码?
这里的信息位个数为4,则需要3位校验位。
先填写信息位
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 信息位 | |||
222^222 | 212^121 | 202^020 | 校验位 |
其中可以看到信息位放置在第7、6、5和3的位置,把这些位置化成二进制的形式。
7=22+21+207=2^2+2^1+2^07=22+21+20
6=22+216=2^2+2^16=22+21
5=22+205=2^2+2^05=22+20
3=21+203=2^1+2^03=21+20
其中,也就是第7位信息位的值会影响到第4、2和1位的校验位的结果,其他如此类推…
下一步计算异或
r2=I4⨁I3⨁I2r_2=I_4\bigoplus I_3 \bigoplus I_2r2=I4⨁I3⨁I2
r1=I4⨁I3⨁I1r_1=I_4\bigoplus I_3 \bigoplus I_1r1=I4⨁I3⨁I1
r0=I4⨁I2⨁I1r_0=I_4\bigoplus I_2 \bigoplus I_1r0=I4⨁I2⨁I1
其中,与校验位22(也就是r2位)2^2(也就是r_2位)22(也就是r2位)有关的是第7、6和5这三个位置的信息位,因此这三个位置的值之间需要做异或,r2=1⨁0⨁1=0r_2=1\bigoplus 0 \bigoplus 1=0r2=1⨁0⨁1=0,其余的计算方式相同…
最终得到r2=0,r1=0,r0=1r^2=0,r^1=0,r^0=1r2=0,r1=0,r0=1 ,再重新写入表格内
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 信息位 | |||
0 | 0 | 1 | 校验位 |
最终1011的海明码为1010101
海明码不仅可以检查错误,还可以纠出错误。
假设这时候收到的海明码为1010100
则用正确的海明校验码与这个海明校验码异或:
0=0⨁00=0\bigoplus00=0⨁0
0=0⨁00=0\bigoplus 00=0⨁0
1=1⨁01=1\bigoplus 01=1⨁0
则可以通过哪一个位置值为1则哪一个位置信息出错了。
———————————————————————————————————
补充信息
异或的计算:
0⨁0=00\bigoplus0=00⨁0=0
1⨁1=01\bigoplus1=01⨁1=0
0⨁1=10\bigoplus1=10⨁1=1
1⨁0=11\bigoplus0=11⨁0=1