在通信领域中,为了确保信息在传输过程中的可靠性,常常需要对信息进行编码处理。线性分组码作为一种重要的编码方式,在数据传输和存储等场景中有着广泛应用。本文将深入探讨线性分组码的一般原理。
1 线性码的矩阵表示
线性分组码的监督位和信息位的关系是由一组线性代数方程式决定的:
{ a 6 ⊕ a 5 ⊕ a 4 ⊕ a 2 = 0 a 6 ⊕ a 5 ⊕ a 3 ⊕ a 1 = 0 a 6 ⊕ a 4 ⊕ a 3 ⊕ a 0 = 0 ( 1 − 1 ) \begin{cases} a_6 \oplus a_5 \oplus a_4 \oplus a_2 = 0 \\ a_6 \oplus a_5 \oplus a_3 \oplus a_1 = 0 \\ a_6 \oplus a_4 \oplus a_3 \oplus a_0 = 0 \end{cases} \quad (1- 1) ⎩ ⎨ ⎧a6⊕a5⊕a4⊕a2=0a6⊕a5⊕a3⊕a1=0a6⊕a4⊕a3⊕a0=0(1−1)
将此式改写成下列形式:
{
1
×
a
6
+
1
×
a
5
+
1
×
a
4
+
0
×
a
3
+
1
×
a
2
+
0
×
a
1
+
0
×
a
0
=
0
1
×
a
6
+
1
×
a
5
+
0
×
a
4
+
1
×
a
3
+
0
×
a
2
+
1
×
a
1
+
0
×
a
0
=
0
1
×
a
6
+
0
×
a
5
+
1
×
a
4
+
1
×
a
3
+
0
×
a
2
+
0
×
a
1
+
1
×
a
0
=
0
(
1
−
2
)
\begin{cases} 1\times a_6 + 1\times a_5 + 1\times a_4 + 0\times a_3 + 1\times a_2 + 0\times a_1 + 0\times a_0 = 0 \\ 1\times a_6 + 1\times a_5 + 0\times a_4 + 1\times a_3 + 0\times a_2 + 1\times a_1 + 0\times a_0 = 0 \\ 1\times a_6 + 0\times a_5 + 1\times a_4 + 1\times a_3 + 0\times a_2 + 0\times a_1 + 1\times a_0 = 0 \end{cases} \quad (1- 2)
⎩
⎨
⎧1×a6+1×a5+1×a4+0×a3+1×a2+0×a1+0×a0=01×a6+1×a5+0×a4+1×a3+0×a2+1×a1+0×a0=01×a6+0×a5+1×a4+1×a3+0×a2+0×a1+1×a0=0(1−2)
在上式中已经将“⊕”简写成“+″。在本章后面,除非另加说明,这类式子中的“+”都是模2加法。上式还可以表示成如下矩阵形式:
将上式简写为:
[
1
1
1
0
1
0
0
1
1
0
1
0
1
0
1
0
1
1
0
0
1
]
[
a
6
a
5
a
4
a
3
a
2
a
1
a
0
]
=
[
0
0
0
]
(
1
−
3
)
\begin{bmatrix} 1 & 1 & 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} a_6 \\ a_5 \\ a_4 \\ a_3 \\ a_2 \\ a_1 \\ a_0 \end{bmatrix} =\begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix} \quad (1- 3)
111110101011100010001
a6a5a4a3a2a1a0
=
000
(1−3)
2 监督矩阵 H
将(1-3)式简写为:
H A T = 0 T \boldsymbol{H}\boldsymbol{A}^{\mathrm{T}} = \boldsymbol{0}^{\mathrm{T}} HAT=0T或 A H T = 0 ( 1 − 4 ) \quad \boldsymbol{A}\boldsymbol{H}^{\mathrm{T}} = \boldsymbol{0}\quad (1 - 4) AHT=0(1−4)
式中
H
=
[
1
1
1
0
1
0
0
1
1
0
1
0
1
0
1
0
1
1
0
0
1
]
,
A
=
[
a
6
a
5
a
4
a
3
a
2
a
1
a
0
]
,
0
=
[
0
0
0
]
(
1
−
5
)
\boldsymbol{H} = \begin{bmatrix} 1 & 1 & 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 & 0 & 0 & 1 \end{bmatrix}, \boldsymbol{A} = [a_6 \ a_5 \ a_4 \ a_3 \ a_2 \ a_1 \ a_0], \boldsymbol{0} = [0 \ 0 \ 0] \quad (1 - 5)
H=
111110101011100010001
,A=[a6 a5 a4 a3 a2 a1 a0],0=[0 0 0](1−5)
至此,我们将H称为监督矩阵(指明码组中的信息位和监督位的关系)。
可以看出,监督矩阵
H
H
H的行数就是监督关系式的数目,即监督位数
r
r
r。
H
H
H的每行中各个“1”的位置表示相应的码元参与的监督关系。例如,
H
H
H的第一行1110100表示监督位
a
2
a_2
a2是由
a
6
a
5
a
4
a_6\ a_5\ a_4
a6 a5 a4之和确定的。式(1 - 5)中的
H
H
H可以分成如下两部分:
H
=
[
1
1
1
0
1
0
0
1
1
0
1
0
1
0
1
0
1
1
0
0
1
]
=
[
P
I
r
]
(
1
−
6
)
H = \begin{bmatrix} 1 & 1 & 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 & 0 & 0 & 1 \end{bmatrix} = [P \ I_r] \quad (1-6)
H=
111110101011100010001
=[P Ir](1−6)
式中,
P
P
P为
r
×
k
r\times k
r×k阶矩阵 ,
I
r
I_r
Ir为
r
×
r
r\times r
r×r阶单位方阵。我们将如上式所示形式的监督矩阵称为典型监督矩阵。
由代数理论可知, H H H矩阵的各行应该是线性无关的,否则将得不到 r r r个线性无关的监督关系式,从而也得不到 r r r个独立的监督位。更进一步,若一个矩阵能写成典型阵形式 [ P I r ] [P \ I_r] [P Ir],则其各行一定是线性无关的。因为容易验证, [ I r ] [I_r] [Ir]的各行是线性无关的,故 [ P I r ] [P \ I_r] [P Ir]的各行也是线性无关的。
3 生成矩阵 G
《汉明码:从奇偶校验到错误精确定位的传奇编码》](https://blog.youkuaiyun.com/zhou8201/article/details/147002758?spm=1011.2124.3001.6209)中的
{ a 2 = a 6 ⊕ a 5 ⊕ a 4 a 1 = a 6 ⊕ a 5 ⊕ a 3 a 0 = a 6 ⊕ a 4 ⊕ a 3 ( 1 − 7 ) \begin{cases} a_2 = a_6 \oplus a_5 \oplus a_4 \\ a_1 = a_6 \oplus a_5 \oplus a_3 \\ a_0 = a_6 \oplus a_4 \oplus a_3 \end{cases} \quad (1-7) ⎩ ⎨ ⎧a2=a6⊕a5⊕a4a1=a6⊕a5⊕a3a0=a6⊕a4⊕a3(1−7)
也可写成如下矩阵形式:
[
a
2
a
1
a
0
]
=
[
1
1
1
0
1
1
0
1
1
0
1
1
]
[
a
6
a
5
a
4
a
3
]
(
1
−
8
)
\begin{bmatrix} a_2 \\ a_1 \\ a_0 \end{bmatrix} =\begin{bmatrix} 1 & 1 & 1 & 0 \\ 1 & 1 & 0 & 1 \\ 1 & 0 & 1 & 1 \end{bmatrix} \begin{bmatrix} a_6 \\ a_5 \\ a_4 \\ a_3 \end{bmatrix}\quad (1 - 8)
a2a1a0
=
111110101011
a6a5a4a3
(1−8)
上式两端分别转置后,可以变成:
[
a
2
a
1
a
0
]
=
[
a
6
a
5
a
4
a
3
]
[
1
1
1
1
1
0
1
0
1
0
1
1
]
=
[
a
6
a
5
a
4
a
3
]
Q
(
1
−
9
)
\begin{align*} [a_2 \ a_1 \ a_0] & = [a_6 \ a_5 \ a_4 \ a_3] \begin{bmatrix} 1 & 1 & 1 \\ 1 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 1 \end{bmatrix}\\ & = [a_6 \ a_5 \ a_4 \ a_3]Q \quad (1 - 9) \end{align*}
[a2 a1 a0]=[a6 a5 a4 a3]
111011011011
=[a6 a5 a4 a3]Q(1−9)
式中,
Q
Q
Q为
k
×
r
k\times r
k×r阶矩阵 ,是
P
P
P的转置,即:
Q
=
P
T
(
1
−
10
)
Q = P^T \quad (1-10)
Q=PT(1−10)
上式表示,在信息位给定后,用信息位的行矩阵乘以矩阵
Q
Q
Q就得出监督位。
我们将
Q
Q
Q的左边加上一个
k
k
k阶单位方阵,构成如下矩阵:
G
=
[
I
k
Q
]
=
[
1
0
0
0
1
1
1
0
1
0
0
1
1
0
0
0
1
0
1
0
1
0
0
0
1
0
1
1
]
(
1
−
11
)
G = [I_k \ Q] = \begin{bmatrix} 1 & 0 & 0 & 0 & 1 & 1 & 1 \\ 0 & 1 & 0 & 0 & 1 & 1 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 & 1 \\ 0 & 0 & 0 & 1 & 0 & 1 & 1 \end{bmatrix} \quad (1-11)
G=[Ik Q]=
1000010000100001111011011011
(1−11)
G
G
G– 称为生成矩阵,因为可以用它产生整个码组
A
A
A,即有:
A
=
[
a
6
a
5
a
4
a
3
a
2
a
1
a
0
]
=
[
a
6
a
5
a
4
a
3
]
G
(
1
−
12
)
A = [a_6 \ a_5 \ a_4 \ a_3 \ a_2 \ a_1 \ a_0] = [a_6 \ a_5 \ a_4 \ a_3]G \quad (1-12)
A=[a6 a5 a4 a3 a2 a1 a0]=[a6 a5 a4 a3]G(1−12)
具有
[
I
k
Q
]
[I_k \ Q]
[Ik Q]形式的生成矩阵称为典型生成矩阵。由典型生成矩阵得出的码组
A
A
A中,信息位的位置不变,监督位附加于其后。这种形式的码组称为系统码。
比较式(1 - 6)和式(1- 11)可见,典型监督矩阵 H H H和典型生成矩阵 G G G之间通过式(1- 10)联系。
与对矩阵 H H H的要求相似,矩阵 G G G的各行也必须是线性无关的。因为由式(1 - 12)得知,任意一个码组 A A A都是 G G G的各行的线性组合。 G G G共有 k k k行,若它们线性无关,则可以组合出 2 k 2^k 2k种不同的码组,这恰好是有 k k k位信息位的全部码组。若 G G G的各行中有线性相关的,则不可能生成 2 k 2^k 2k种不同的码组了。实际上, G G G的各行本身就是一个码组。
如果已有 k k k个线性无关的码组,则可以将其用作为生成矩阵 G G G,并由它生成其余码组。
4 校正子矩阵S
一般来说,式(1 - 12)中的
A
A
A是一个
n
n
n列的行矩阵:
A
=
[
a
n
−
1
a
n
−
2
⋯
a
1
a
0
]
(
1
−
13
)
A = [a_{n - 1} \ a_{n - 2} \ \cdots \ a_{1} \ a_{0}] \quad (1 - 13)
A=[an−1 an−2 ⋯ a1 a0](1−13)
它的
n
n
n个元素就是码组中的
n
n
n个码元。所以发送码组就是
A
A
A。由于传输中的干扰影响,接收码组可能出现错码而有别于
A
A
A。设接收码组是一个
n
n
n列的行矩阵:
B
=
[
b
n
−
1
b
n
−
2
⋯
b
1
b
0
]
(
1
−
14
)
B = [b_{n - 1} \ b_{n - 2} \ \cdots \ b_{1} \ b_{0}] \quad (1 - 14)
B=[bn−1 bn−2 ⋯ b1 b0](1−14)
令接收码组和发送码组之差为:
B
−
A
=
E
(
模
2
)
(
1
−
15
)
B - A = E \ (\text{模}2) \quad (1 - 15)
B−A=E (模2)(1−15)
E
E
E就是错码的行矩阵,有时还称其为错误图样:
E
=
[
e
n
−
1
e
n
−
2
⋯
e
1
e
0
]
(
1
−
16
)
E = [e_{n - 1} \ e_{n - 2} \ \cdots \ e_{1} \ e_{0}] \quad (1 - 16)
E=[en−1 en−2 ⋯ e1 e0](1−16)
式中
e
i
=
{
0
当
b
i
=
a
i
时
1
当
b
i
≠
a
i
时
(
i
=
0
,
1
,
⋯
,
n
−
1
)
(
1
−
17
)
e_{i}=\begin{cases} 0 & \text{当} b_{i}=a_{i} \text{时} \\ 1 & \text{当} b_{i}\neq a_{i} \text{时} \end{cases} (i = 0, 1, \cdots, n - 1)\quad (1 - 17)
ei={01当bi=ai时当bi=ai时(i=0,1,⋯,n−1)(1−17)
因此,若
e
i
=
0
e_{i}=0
ei=0,表示该码元未错;若
e
i
=
1
e_{i}=1
ei=1,表示该码元为错码。式(1 - 17)可以改写成:
B
=
A
+
E
(
1
−
18
)
B = A + E \quad (1 - 18)
B=A+E(1−18)
上式表示发送码组
A
A
A与错码矩阵
E
E
E之和等于接收码组
B
B
B。例如,若发送码组
A
=
[
1000111
]
A = [1000111]
A=[1000111],错码矩阵
E
=
[
0000100
]
E = [0000100]
E=[0000100],则接收码组
B
=
[
1000011
]
B = [1000011]
B=[1000011]。
在接收端解码时,令下式中的
A
A
A等于接收码组
B
B
B进行计算:
H
A
T
=
0
T
\boldsymbol{H}\boldsymbol{A}^{\mathrm{T}} = \boldsymbol{0}^{\mathrm{T}}
HAT=0T
若接收码组
B
B
B中无错码(
E
=
0
E = 0
E=0),由式(1 - 18)得知,
B
=
A
B = A
B=A,这时有:
B
H
T
=
0
(
1
−
19
)
BH^{T} = 0 \quad (1 - 19)
BHT=0(1−19)
当接收码组中有错码时, E ≠ 0 E\neq0 E=0,此时将 B B B代入上面等式后,该式不一定成立。
在错码较多并超出这种编码的检错能力时, B B B可能变为另一个许用码组,等式仍可能成立。这时的错码将是不可检测。所以只有当错码未超出检错能力时才能被纠正。。
假设,这时式(1 - 19)的右端等于(S),即有:
B H T = S ( 1 − 20 ) BH^{T} = S \quad (1 - 20) BHT=S(1−20)
将式(1 - 18)代入式(1 - 20),得到:
S = ( A + E ) H T = A H T + E H T ( 1 − 21 ) S = (A + E)H^{T} = AH^{T} + EH^{T}\quad (1 - 21) S=(A+E)HT=AHT+EHT(1−21)
由式(1 - 4)可知,上式右端第一项等于(0),所以:
S = E H T ( 1 − 22 ) S = EH^{T} \quad (1 - 22) S=EHT(1−22)
式中,S就是校正子S构成的矩阵,它同样可以用来指示错码的位置。
5 线性码的封闭性
线性码有一个重要性质,就是它具有封闭性。
封闭性是指一种线性码中任意两个码组之和仍为这种编码中的一个码组。也就是说,若 A 1 和 A 2 A_1和A_2 A1和A2是一种线性码中的两个码组,则 ( A 1 + A 2 ) (A_1 + A_2) (A1+A2)仍是其中的一个码组。下面对此做一简单证明。
若 A 1 和 A 2 A_1和A_2 A1和A2是两个码组,则由式(1 - 4)有:
A 1 H T = 0 A 2 H T = 0 A_1H^{T} = 0 \quad A_2H^{T} = 0 A1HT=0A2HT=0
将上两式相加得:
A 1 H T + A 2 H T = ( A 1 + A 2 ) H T = 0 ( 1 − 23 ) A_1H^{T} + A_2H^{T} = (A_1 + A_2)H^{T} = 0 \quad (1 - 23) A1HT+A2HT=(A1+A2)HT=0(1−23)
所以 ( A 1 + A 2 ) (A_1 + A_2) (A1+A2)也是一个码组。由于线性码具有封闭性,所以两个码组 A 1 A_1 A1和 A 2 A_2 A2之间的距离(即对应位不同的数目)必定是另一个码组 ( A 1 + A 2 ) (A_1 + A_2) (A1+A2)的重量(即“1”的数目)。因此,码的最小距离就是码的最小重量(除全“0”码组外)。
小结:
文章分析了线性分组码的编码和解码:
编码时:
A
=
[
a
6
a
5
a
4
a
3
a
2
a
1
a
0
]
=
[
a
6
a
5
a
4
a
3
]
G
A = [a_6 \ a_5 \ a_4 \ a_3 \ a_2 \ a_1 \ a_0] = [a_6 \ a_5 \ a_4 \ a_3]G
A=[a6 a5 a4 a3 a2 a1 a0]=[a6 a5 a4 a3]G
依据这个公式可以生成线性分组码,包括信息位
a
6
a
5
a
4
a
3
a_6 \ a_5 \ a_4 \ a_3
a6 a5 a4 a3和监督位
a
2
a
1
a
0
a_2 \ a_1 \ a_0
a2 a1 a0。
解码时:
用接收到的信息B,与监督矩阵相乘:
B
H
T
=
S
(
1
−
20
)
BH^{T} = S \quad (1 - 20)
BHT=S(1−20)
根据S是否为0,判断出错的比特位,进行纠错。
以上内容参考了樊昌信的《通信原理教程》,书编得非常好,看后很受益,感谢樊老师辛苦付出。