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