一个重要的不等式
海明纠错码允许最多一位出错并用数个不同带有不同参数的异或函数的出错组合,来唯一标识出错的位号。这是我认为海明纠错码的核心原理。4个异或函数组成 4 2 4^2 42不同的情况。能够标识16个数据位,当然,没必要用到所有的组合,选取若干满足需求就可以了。
一个n位码字通常包含m位数据位和r位检验位。每个有效码字(n位01组合是有含义的)对应与其海明距离为1的n种编码。m位数据位可组成 2 m 2^m 2m位有效码字,而n位可组成 2 n 2^n 2n种组合情况。那么有 2 m ∗ ( n + 1 ) < = 2 n 2^m*(n+1)<=2^n 2m∗(n+1)<=2n,进而可推导出: 2 r > = m + r + 1 2^r>=m+r+1 2r>=m+r+1,看那!这给出了m位数据位所需的最少检验位。
检验位分配和用法
检验位怎么分配呢?海明码的检验位不是连续的,而是分配在位号为2的整数幂的位上( 1 = 2 0 , 2 = 2 1 . . . . 1=2^0,2=2^1.... 1=20,2=21....),位号从1开始。
检验位的用法用实例来说明比较好:
有个码字为11位,7个数据位,4个检验位。假如检验11位正不正确,就把它化成2的整数幂的和形式:11=1+2+8,位号11的检验将与检验位1,2,8有关。
检验位的分配表格
r
k
代
表
检
验
位
,
d
k
代
表
数
据
位
r_k代表检验位,d_k代表数据位
rk代表检验位,dk代表数据位
位号 | r 1 r_1 r1 | r 2 r_2 r2 | r 4 r_4 r4 | r 8 r_8 r8 |
---|---|---|---|---|
r 1 r_1 r1 | 1 | 0 | 0 | 0 |
r 2 r_2 r2 | 0 | 1 | 0 | 0 |
d 3 d_3 d3 | 1 | 1 | 0 | 0 |
r 4 r_4 r4 | 0 | 0 | 1 | 0 |
d 5 d_5 d5 | 1 | 0 | 1 | 0 |
d 6 d_6 d6 | 0 | 1 | 1 | 0 |
d 7 d_7 d7 | 1 | 1 | 1 | 0 |
r 8 r_8 r8 | 0 | 0 | 0 | 1 |
d 9 d_9 d9 | 1 | 0 | 0 | 1 |
d 10 d_{10} d10 | 0 | 1 | 0 | 1 |
d 11 d_{11} d11 | 1 | 1 | 0 | 1 |
PS:
1代表检验位,0代表非本位的检验位
这个表格怎么看?
11=1+2+8,检验位1,2,8是第11位的校验位。则看 d 11 d_{11} d11那一行, r 1 , r 2 , r 4 = 1 r_1,r_2,r_4=1 r1,r2,r4=1
设下出错情况
要强调奇校验和偶校验的概念,还是原来的11位码字。
如果要传输码字1000001,计算校验位1,2,4,8。
这是一个典型的问题:
我们做出一个异或函数,这个异或函数的参数是校验位
r
k
r_k
rk参与校验的所有码位(上表中纵向来看,
r
1
r_1
r1列中不为1的位)和校验位。我们把此集合称为
G
r
k
G_{r_k}
Grk。
即异或函数
X
O
R
(
G
r
k
)
XOR(G_{r_k})
XOR(Grk)的表示如下:
X
O
R
(
G
r
k
)
=
r
k
⊕
d
1
⊕
d
2
.
.
.
.
⊕
d
n
XOR(G_{r_k})=r_k\oplus d_1 \oplus d_2....\oplus d_n
XOR(Grk)=rk⊕d1⊕d2....⊕dn
G
r
k
.
s
i
z
e
=
n
,
d
i
∈
G
r
k
,
i
∈
[
1
,
n
]
G_{r_k}.size=n,d_i \in G_{r_k},i\in[1,n]
Grk.size=n,di∈Grk,i∈[1,n]
如果采用奇校验,则
X
O
R
(
G
r
k
)
=
1
,
k
∈
[
1
,
r
]
XOR(G_{r_k})=1,k\in[1,r]
XOR(Grk)=1,k∈[1,r];
如果采用偶校验,则
X
O
R
(
G
r
k
)
=
0
,
k
∈
[
1
,
r
]
XOR(G_{r_k})=0,k\in[1,r]
XOR(Grk)=0,k∈[1,r];
你可以看到,校验位的结果是由参数中1的个数所决定的。本例中,校验位
r
8
r_8
r8校验
d
9
,
d
10
,
d
11
=
001
d_9,d_{10},d_{11}=001
d9,d10,d11=001,若采用奇校验,则
r
1
=
0
r_1=0
r1=0,因为要保持异或函数结果为1。偶校验
r
8
=
1
r_8=1
r8=1。
根据上述方法,采用偶校验可以算出完整的码字:00100001001
纠错
就像原来说的那样,4个校验位有16种错误组合。假如接收方的码字种最多被限制一个位出错,则表格从横向来看,一种错误组合可唯一标识一个码位出错。
d 7 = 0 d_7=0 d7=0出错变成1,参与计算异或函数 X O R ( G r 1 ) , X O R ( G r 2 ) , X O R ( G r 4 ) = 1 XOR(G_{r_1}),XOR(G_{r_2}),XOR(G_{r_4})=1 XOR(Gr1),XOR(Gr2),XOR(Gr4)=1,对应校验位 r 1 , r 2 , r 4 r_1,r_2,r_4 r1,r2,r4。