概述
汉明码
- 1.首先确定汉明码的位数
- 如何标注
- 2、求出校验位的值
- 3、纠错过程
1.首先确定汉明码的位数
公式:
2
k
≥
n
+
k
+
1
2^kgeq n+k+1
2k≥n+k+1
字母含义:
k
k
k表示检验位数,
n
n
n表示传送的信息位数
简单解释一下这个公式怎么来的,因为我们要检验传送的信息中到底是哪一位出错了,所以首先会有传送的信息位数
n
n
n,然后我们的校验位数
k
k
k也插入到传送的信息当中去了,所以总位数变成
n
+
k
n+k
n+k,最后还要留出一个正确状态位,所以最后加
1
1
1,而校验码所能检错的总位数为
2
k
2^k
2k,当
2
k
≥
n
+
k
+
1
2^kgeq n+k+1
2k≥n+k+1时,才能把所有位置标注出来。
下面有个表格
n | 1 | 2-4 | 5-11 | 12-26 | 27-57 | 58-120 |
---|---|---|---|---|---|---|
k | 2 | 3 | 4 | 5 | 6 | 7 |
简单记一下这个表,一般k=3,4,5用的比较多。
如何标注
在唐朔飞版的教材中用的是
C
i
C_i
Ci表示校验位,
b
i
b_i
bi表示信息位。
标注方法:校验位应该位于
2
k
−
1
2^{k-1}
2k−1序号处,信息位按顺序依次填入
举个例子:欲传送的信息为1010
首先根据
2
k
≥
n
+
k
+
1
2^kgeq n+k+1
2k≥n+k+1求出校验位
k
=
3
k=3
k=3
我比较喜欢顺着来就设
b
1
b
2
b
3
b
4
=
1010
b_1b_2b_3b_4=1010
b1b2b3b4=1010,
C
1
C
2
C
4
C_1C_2C_4
C1C2C4分别表示三个校验码。
二进制序号 | H 1 H_1 H1 | H 2 H_2 H2 | H 3 H_3 H3 | H 4 H_4 H4 | H 5 H_5 H5 | H 6 H_6 H6 | H 7 H_7 H7 |
---|---|---|---|---|---|---|---|
名称 | C 1 C_1 C1 | C_2 | b 1 b_1 b1 | C 4 C_4 C4 | b 2 b_2 b2 | b 3 b_3 b3 | b 4 b_4 b4 |
1 | 0 | 1 | 0 |
根据此表,以 C 4 C_4 C4为例, C 4 C_4 C4应填到第 2 k − 1 = 2 3 − 1 = 4 2^{k-1}=2^{3-1}=4 2k−1=23−1=4位处,其他两个也是如此,然后将 b i b_i bi依次填入(k表示 C i C_i Ci是第几个校验位)。
2、求出校验位的值
H
3
=
3
=
011
H_3=3=011
H3=3=011
H
5
=
5
=
101
H_5=5=101
H5=5=101
H
6
=
6
=
110
H_6=6=110
H6=6=110
H
7
=
7
=
111
H_7=7=111
H7=7=111
这里的等于说的是
H
3
H_3
H3为第三位,只不过使用二进制表示
其中
H
3
=
b
1
H_3=b_1
H3=b1 ,
H
5
=
b
2
H_5=b2
H5=b2 ,
H
6
=
b
3
H_6 =b3
H6=b3 ,
H
7
=
b
4
H_7=b_4
H7=b4
H
3
=
H
5
=
H
6
=
H
7
=
[
0
1
1
1
]
[
1
0
1
1
]
[
1
1
0
1
]
begin{matrix} H_3=\H_5 = \ H_6= \ H_7= end{matrix} begin{bmatrix} 0\1 \ 1 \ 1 end{bmatrix}begin{bmatrix} 1\0 \ 1 \ 1 end{bmatrix}begin{bmatrix} 1\1 \ 0 \ 1 end{bmatrix}
H3=H5=H6=H7=⎣⎢⎢⎡0111⎦⎥⎥⎤⎣⎢⎢⎡1011⎦⎥⎥⎤⎣⎢⎢⎡1101⎦⎥⎥⎤
最后一列表示
C
1
=
H
3
⨁
H
5
⨁
H
7
=
b
1
⨁
b
2
⨁
b
4
C_1=H_3bigoplus H_5bigoplus H_7=b_1bigoplus b_2bigoplus b_4
C1=H3⨁H5⨁H7=b1⨁b2⨁b4(注意这里
C
i
C_i
Ci的位置正好和列的位置相反)
其中
⨁
bigoplus
⨁表示异或。
取值规则为:
C
1
C_1
C1取用二进制表示的位置最后一列为一所对应的信息位。
C
2
C_2
C2取用二进制表示的位置倒数第二列为一所对应的信息位。
C
4
C_4
C4取用二进制表示的位置倒数第三列为一所对应的信息位。
依次类推。
还有一种就是按照定义方式,先分小组。
有三个要求:
(1)
g
i
g_i
gi小组独占第
2
i
−
1
2^{i-1}
2i−1位(i=1,2,3,…)
(2)
g
i
,
g
j
g_i,g_j
gi,gj共同占有第
2
i
−
1
+
2
j
−
1
2^{i-1}+2^{j-1}
2i−1+2j−1位(i,j=1,2,3,…)
(3)
g
i
,
g
j
,
g
l
g_i,g_j,g_l
gi,gj,gl共同占有第
2
i
−
1
+
2
j
−
1
+
2
l
−
1
2^{i-1}+2^{j-1}+2^{l-1}
2i−1+2j−1+2l−1位(i,j,l=1,2,3,…),是其他小组没有的
C i C_i Ci | g g g | 检测的 g i g_i gi小组包含的位 |
---|---|---|
C 1 C_1 C1 | g 1 g_1 g1 | 1,3,5,7,9,11,… |
C 2 C_2 C2 | g 2 g_2 g2 | 2,3,6,7,10,11,14,15,… |
C 4 C_4 C4 | g 3 g_3 g3 | 4,5,6,7,12,13,14,15,… |
C 8 C_8 C8 | g 4 g_4 g4 | 8,9,10,11,12,13,14,15,24,… |
如何理解这几个要求呢,以
C
2
C_2
C2为例说明一下。
C
2
,
i
=
2
C_2,i=2
C2,i=2,根据(1)知,包含
2
2
−
1
=
2
2^{2-1}=2
22−1=2;根据(2)知,包含
2
2
−
1
+
2
j
−
1
,
(
j
=
1
,
2
,
3
,
.
.
)
所
以
可
以
的
到
3
,
6
,
10
,
.
.
.
(
i
≠
j
)
2^{2-1}+2^{j-1},(j=1,2,3,..)所以可以的到3,6,10,...(ineq j)
22−1+2j−1,(j=1,2,3,..)所以可以的到3,6,10,...(i̸=j);根据(3)知,包含
2
2
−
1
+
2
j
−
1
+
2
l
−
1
,
(
j
,
l
=
1
,
2
,
3
,
.
.
)
2^{2-1}+2^{j-1}+2^{l-1},(j,l=1,2,3,..)
22−1+2j−1+2l−1,(j,l=1,2,3,..),所以有7,11,14,…。我感觉这种方法不如上面那种方法好用。
继续求
C
i
C_i
Ci:
C
1
=
H
3
⨁
H
5
⨁
H
7
=
b
1
⨁
b
2
⨁
b
4
=
1
⨁
0
⨁
0
=
1
C_1=H_3bigoplus H_5bigoplus H_7=b_1bigoplus b_2bigoplus b_4= 1bigoplus 0bigoplus0=1
C1=H3⨁H5⨁H7=b1⨁b2⨁b4=1⨁0⨁0=1
C
2
=
H
3
⨁
H
6
⨁
H
7
=
b
1
⨁
b
3
⨁
b
4
=
1
⨁
1
⨁
0
=
0
C_2=H_3bigoplus H_6bigoplus H_7=b_1bigoplus b_3bigoplus b_4= 1bigoplus 1bigoplus0=0
C2=H3⨁H6⨁H7=b1⨁b3⨁b4=1⨁1⨁0=0
C
4
=
H
5
⨁
H
6
⨁
H
7
=
b
2
⨁
b
3
⨁
b
4
=
0
⨁
1
⨁
0
=
1
C_4=H_5bigoplus H_6bigoplus H_7=b_2bigoplus b_3bigoplus b_4= 0bigoplus 1bigoplus0=1
C4=H5⨁H6⨁H7=b2⨁b3⨁b4=0⨁1⨁0=1
如果不懂异或直接数一的个数,奇数个就等于1,偶数个等于0。
3、纠错过程
P
1
=
H
1
⨁
H
3
⨁
H
5
⨁
H
7
=
C
1
⨁
b
1
⨁
b
2
⨁
b
4
=
1
⨁
1
⨁
0
⨁
0
=
0
P_1=H_1bigoplus H_3bigoplus H_5bigoplus H_7=C_1bigoplus b_1bigoplus b_2bigoplus b_4=1bigoplus 1bigoplus 0bigoplus 0=0
P1=H1⨁H3⨁H5⨁H7=C1⨁b1⨁b2⨁b4=1⨁1⨁0⨁0=0
P
2
=
H
2
⨁
H
3
⨁
H
6
⨁
H
7
=
C
2
⨁
b
1
⨁
b
3
⨁
b
4
=
0
⨁
1
⨁
1
⨁
0
=
0
P_2=H_2bigoplus H_3bigoplus H_6bigoplus H_7=C_2bigoplus b_1bigoplus b_3bigoplus b_4=0bigoplus 1bigoplus 1bigoplus 0=0
P2=H2⨁H3⨁H6⨁H7=C2⨁b1⨁b3⨁b4=0⨁1⨁1⨁0=0
P
4
=
H
4
⨁
H
5
⨁
H
6
⨁
H
7
=
C
4
⨁
b
2
⨁
b
3
⨁
b
4
=
1
⨁
0
⨁
1
⨁
0
=
0
P_4=H_4bigoplus H_5bigoplus H_6bigoplus H_7=C_4bigoplus b_2bigoplus b_3bigoplus b_4=1bigoplus 0bigoplus 1bigoplus 0=0
P4=H4⨁H5⨁H6⨁H7=C4⨁b2⨁b3⨁b4=1⨁0⨁1⨁0=0
P
i
P_i
Pi的取值规则,通过上面的事例应该能看出来,是
P
i
P_i
Pi对应的
C
i
C_i
Ci,再加上
C
i
C_i
Ci对应的
b
i
b_i
bi。
P
4
P
2
P
1
=
000
P_4P_2P_1=000
P4P2P1=000,表示没有错。
错误实例:传递信息还是1010,加上检错码为1011010,但是在传输过程中,出现一位错误,变成1011011,。
P
1
=
H
1
⨁
H
3
⨁
H
5
⨁
H
7
=
1
⨁
1
⨁
0
⨁
1
=
1
P_1=H_1bigoplus H_3bigoplus H_5bigoplus H_7=1bigoplus 1bigoplus 0bigoplus 1=1
P1=H1⨁H3⨁H5⨁H7=1⨁1⨁0⨁1=1
P
2
=
H
2
⨁
H
3
⨁
H
6
⨁
H
7
=
0
⨁
1
⨁
1
⨁
1
=
1
P_2=H_2bigoplus H_3bigoplus H_6bigoplus H_7=0bigoplus 1bigoplus 1bigoplus 1=1
P2=H2⨁H3⨁H6⨁H7=0⨁1⨁1⨁1=1
P
4
=
H
4
⨁
H
5
⨁
H
6
⨁
H
7
=
1
⨁
0
⨁
1
⨁
1
=
1
P_4=H_4bigoplus H_5bigoplus H_6bigoplus H_7=1bigoplus 0bigoplus 1bigoplus 1=1
P4=H4⨁H5⨁H6⨁H7=1⨁0⨁1⨁1=1
则
P
4
P
2
P
1
=
111
=
7
P_4P_2P_1=111=7
P4P2P1=111=7,表示第七位出错。
最后
以上就是迅速猫咪为你收集整理的汉明码详解的全部内容,希望文章能够帮你解决汉明码详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复