参考书籍:Blahut R E. Algebraic codes for data transmission[M]. Cambridge university press, 2003.
线性码
线性码定义
定义:线性码 C \mathscr C C,是有限域上线性空间 G F ( q ) n GF(q)^n GF(q)n的子空间。长度为 n n n,子空间维度为 k k k,最小距离为 d d d,那么记做 ( n , k , d ) (n,k,d) (n,k,d)码。
性质最好的编码,几乎都是线性码,因此编码理论只研究线性码。
线性码的多项式形式
令 C \mathscr C C是有限域 G F ( q ) GF(q) GF(q)上的线性码,其校验矩阵 H ∈ G F ( q ) ( n − k ) × n H \in GF(q)^{(n-k) \times n} H∈GF(q)(n−k)×n, c H T = 0 \pmb c H^T = 0 cHT=0。假设 m ∣ n − k m | n-k m∣n−k,那么可以将 m m m个元素的向量视作扩域 G F ( q m ) GF(q^m) GF(qm)里的元素。令 r : = ( n − k ) / m r:=(n-k)/m r:=(n−k)/m,那么可以写作 H ∈ G F ( q m ) r × n H \in GF(q^m)^{r \times n} H∈GF(qm)r×n。
对于特殊形式的
H
H
H,如下
H
=
[
γ
1
0
γ
1
1
⋯
γ
1
n
−
1
γ
2
0
γ
2
1
⋯
γ
2
n
−
1
⋮
γ
r
0
γ
r
1
⋯
γ
r
n
−
1
]
H = \begin{bmatrix} \gamma_1^0 & \gamma_1^1 & \cdots & \gamma_1^{n-1}\\ \gamma_2^0 & \gamma_2^1 & \cdots & \gamma_2^{n-1}\\ \vdots\\ \gamma_r^0 & \gamma_r^1 & \cdots & \gamma_r^{n-1}\\ \end{bmatrix}
H=
γ10γ20⋮γr0γ11γ21γr1⋯⋯⋯γ1n−1γ2n−1γrn−1
那么将一个码字
c
=
(
c
0
,
⋯
,
c
n
−
1
)
∈
C
\pmb c = (c_0,\cdots,c_{n-1}) \in \mathscr C
c=(c0,⋯,cn−1)∈C写作码字多项式(codeword polynomial),
c
(
x
)
:
=
∑
i
=
0
n
−
1
c
i
x
i
∈
G
F
(
q
)
[
x
]
c(x) := \sum_{i=0}^{n-1} c_i x^i \in GF(q)[x]
c(x):=i=0∑n−1cixi∈GF(q)[x]
那么
c
H
T
=
0
⟺
∀
j
,
c
(
γ
j
)
=
0
\pmb c H^T = 0 \iff \forall j,c(\gamma_j)=0
cHT=0⟺∀j,c(γj)=0,也就是说子空间
C
\mathscr C
C同构于仿射簇
V
=
{
γ
1
,
⋯
,
γ
r
}
V = \{\gamma_1,\cdots,\gamma_r\}
V={γ1,⋯,γr}的理想
I
(
V
)
=
{
c
(
x
)
∈
G
F
(
q
)
[
x
]
:
c
(
γ
)
=
0
,
∀
γ
∈
V
}
I(V) = \{c(x) \in GF(q)[x] :\,\, c(\gamma)=0,\forall \gamma \in V\}
I(V)={c(x)∈GF(q)[x]:c(γ)=0,∀γ∈V}
循环码
循环码定义
定义:一个线性码 C \mathscr C C叫做循环码(cyclic code),如果码字 c = ( c 0 , ⋯ , c n − 1 ) ∈ C \pmb c = (c_0,\cdots,c_{n-1}) \in \mathscr C c=(c0,⋯,cn−1)∈C,令 C S CS CS是 cyclic shift 操作,那么满足 c ′ = C S ( c ) : = ( c n − 1 , c 0 , ⋯ , c n − 2 ) ∈ C \pmb c' =CS(\pmb c):= (c_{n-1},c_0,\cdots,c_{n-2}) \in \mathscr C c′=CS(c):=(cn−1,c0,⋯,cn−2)∈C
定理:多项式环 R = G F ( q ) [ x ] / ( x n − 1 ) R=GF(q)[x]/(x^n-1) R=GF(q)[x]/(xn−1)的子集 C \mathscr C C是循环码 ⟺ \iff ⟺ C \mathscr C C满足以下性质,
- C \mathscr C C是 R R R的子加群
- 如果 c ( x ) ∈ C c(x) \in \mathscr C c(x)∈C,任意的 a ( x ) ∈ R a(x) \in R a(x)∈R,都有 a ( x ) c ( x ) ∈ C a(x)c(x) \in \mathscr C a(x)c(x)∈C
即, C \mathscr C C是环 R R R的理想。
编码与多项式
域上的多项式环是主理想整环(PID),因此循环码 C \mathscr C C是主理想。我们将 C \mathscr C C中的拥有最小度数的那个唯一的非零首一多项式 g ( x ) g(x) g(x)叫做码 C \mathscr C C的生成多项式(generator polynomial),有 C = ( g ( x ) ) \mathscr C = (g(x)) C=(g(x))
定理:循环码 C \mathscr C C拥有生成多项式 g ( x ) ⟺ g ( x ) ∣ x n − 1 g(x) \iff g(x) | x^n - 1 g(x)⟺g(x)∣xn−1
我们令 x n − 1 = g ( x ) h ( x ) x^n-1 = g(x)h(x) xn−1=g(x)h(x),那么任意的 c ( x ) ∈ C c(x) \in \mathscr C c(x)∈C,都有 h ( x ) c ( x ) = 0 h(x)c(x)=0 h(x)c(x)=0,这个 h ( x ) h(x) h(x)叫做校验多项式(check polynomial)
令 a ( x ) ∈ R , deg a ≤ k − 1 a(x) \in R,\deg a \le k-1 a(x)∈R,dega≤k−1是数据多项式(data polynomial),
- 非系统编码(nonsystematic encoding): a ( x ) a(x) a(x)的系数不在 c ( x ) c(x) c(x)中显式出现。例如, c ( x ) = a ( x ) g ( x ) c(x) = a(x)g(x) c(x)=a(x)g(x)
- 系统编码(systematic encoding): a ( x ) a(x) a(x)的系数在 c ( x ) c(x) c(x)中显式出现。例如, c ( x ) = x n − k a ( x ) + t ( x ) c(x) = x^{n-k}a(x)+t(x) c(x)=xn−ka(x)+t(x),其中 t ( x ) : = − R g ( x ) [ x n − k a ( x ) ] t(x) := -R_{g(x)}[x^{n-k}a(x)] t(x):=−Rg(x)[xn−ka(x)]
上述两者得到的码字集合 C \mathscr C C完全相同,但 a ( x ) , c ( x ) a(x),c(x) a(x),c(x)之间的双射不同。
令 e ( x ) e(x) e(x)是错误多项式(error polynomial), v ( x ) = c ( x ) + e ( x ) v(x) = c(x)+e(x) v(x)=c(x)+e(x)叫做感知字多项式(senseword polynomial),而仅取决于错误 e ( x ) e(x) e(x)的 s ( x ) : = R g ( x ) [ v ( x ) ] = R g ( x ) [ e ( x ) ] s(x):= R_{g(x)}[v(x)] = R_{g(x)}[e(x)] s(x):=Rg(x)[v(x)]=Rg(x)[e(x)]叫做校验子多项式(syndrome polynomial)
定理:假设 C \mathscr C C的最小距离是 d d d,那么汉明重量小于 d / 2 d/2 d/2的错误多项式,对应于唯一的校验子多项式。
因此,解码任务就是,先计算 s ( x ) s(x) s(x),然后寻找满足 s ( x ) = R g ( x ) [ e ( x ) ] s(x) = R_{g(x)}[e(x)] s(x)=Rg(x)[e(x)]的那个唯一的 e ( x ) e(x) e(x)。当然,如果其汉明重量超重了,那么可能无法解码(不在任何汉明球内)或者解码错误(落在其他汉明球内)。
本原循环码
定义:码 C \mathscr C C是 G F ( q ) GF(q) GF(q)上的循环码,如果 n = q m − 1 n = q^m-1 n=qm−1那么就叫做本原循环码(primitive cyclic code)
循环码的构造
数学知识
-
令 R = G F ( q ) [ x ] / ( x n − 1 ) R = GF(q)[x]/(x^n-1) R=GF(q)[x]/(xn−1),做素分解
x n − 1 = f 1 ( x ) ⋯ f s ( x ) x^n-1 = f_1(x) \cdots f_s(x) xn−1=f1(x)⋯fs(x)那么 g ( x ) ∣ x n − 1 g(x) | x^n-1 g(x)∣xn−1就有 2 s 2^s 2s种选择方案。去掉平凡的 1 , x n − 1 1,x^n-1 1,xn−1,我们还可以构造出 2 s − 2 2^s-2 2s−2种不同的主理想 C \mathscr C C
-
扩域 G F ( q m ) GF(q^m) GF(qm)中,
x q m − 1 = ∏ j ( x − β j ) x^{q^m-1} = \prod_j (x-\beta_j) xqm−1=j∏(x−βj)
这里, x q m − 1 x^{q^m-1} xqm−1的根 β j \beta_j βj是 G F ( q m ) GF(q^m) GF(qm)中的所有非零元。 -
若 G F ( q ) GF(q) GF(q)的特征为 p p p,那么 ∀ s ( x ) ∈ G F ( q ) [ x ] \forall s(x) \in GF(q)[x] ∀s(x)∈GF(q)[x],都有
s ( x ) p m = [ ∑ i s i x i ] p m = ∑ i s i p m x i p m s(x)^{p^m} = [\sum_i s_i x^i]^{p^m} = \sum_i s_i^{p^m} x^{ip^m} s(x)pm=[i∑sixi]pm=i∑sipmxipm -
若 β ∈ G F ( q m ) \beta \in GF(q^m) β∈GF(qm)的极小多项式为 f ( x ) ∈ G F ( q ) [ x ] f(x) \in GF(q)[x] f(x)∈GF(q)[x],那么 f ( x ) f(x) f(x)也是 β q \beta^q βq的极小多项式,这叫做共轭元(conjugates)。集合 { β , β q , ⋯ , β q r − 1 } \{\beta,\beta^q,\cdots,\beta^{q^{r-1}}\} {β,βq,⋯,βqr−1}是多项式 f ( x ) f(x) f(x)的一组共轭元,其中的 r r r是使得 β q r = β \beta^{q^r}=\beta βqr=β成立的最小的那个整数。
-
元素 β ∈ G F ( q m ) \beta \in GF(q^m) β∈GF(qm)的极小多项式以所有共轭元为根,
f ( x ) = ( x − β ) ( x − β q ) ⋯ ( x − β q r − 1 ) f(x) = (x-\beta)(x-\beta^q)\cdots(x-\beta^{q^{r-1}}) f(x)=(x−β)(x−βq)⋯(x−βqr−1) -
若 g c d ( n , q ) = 1 gcd(n,q)=1 gcd(n,q)=1,那么存在 m ≤ n m \le n m≤n,使得 x n − 1 ∣ x q m − 1 − 1 x^n-1 | x^{q^m-1}-1 xn−1∣xqm−1−1(使用鸽巢原理,证明 n ∣ q i − j − 1 n|q^{i-j}-1 n∣qi−j−1)
构造方法
定理:令
g
(
x
)
g(x)
g(x)是
G
F
(
q
)
GF(q)
GF(q)上的本原循环码
C
\mathscr C
C的生成多项式,其所有零点(zeros,根)为
β
1
,
⋯
,
β
r
∈
G
F
(
q
m
)
\beta_1,\cdots,\beta_r \in GF(q^m)
β1,⋯,βr∈GF(qm),那么
c
(
x
)
∈
C
⟺
c
(
β
1
)
=
⋯
=
c
(
β
r
)
=
0
∈
G
F
(
q
m
)
c(x) \in \mathscr C \iff c(\beta_1) = \cdots = c(\beta_r) = 0 \in GF(q^m)
c(x)∈C⟺c(β1)=⋯=c(βr)=0∈GF(qm)
集合
{
β
1
,
⋯
,
β
r
}
\{\beta_1,\cdots,\beta_r\}
{β1,⋯,βr}叫做循环码的完全定义集(complete defining set),若子集
A
⊆
{
β
1
,
⋯
,
β
r
}
A \subseteq \{\beta_1,\cdots,\beta_r\}
A⊆{β1,⋯,βr}包含
g
(
x
)
g(x)
g(x)每个素因式的至少一个零点,那么叫它为定义集(defining set)
如果要构造以 { β 1 , ⋯ , β r } \{\beta_1,\cdots,\beta_r\} {β1,⋯,βr}为根的生成多项式,只需要分别计算 β j \beta_j βj的极小多项式 f j ( x ) f_j(x) fj(x),然后就有 g = L C M ( f 1 , ⋯ , f r ) g = LCM(f_1,\cdots,f_r) g=LCM(f1,⋯,fr)。这里的 f j ( x ) , j = 1 , ⋯ , r f_j(x), j=1,\cdots,r fj(x),j=1,⋯,r是容易计算的。
我们在 G F ( q ) GF(q) GF(q)上构造 ( n , k , d ) (n,k,d) (n,k,d)循环码 C \mathscr C C的步骤如下:
- 恒假设 g c d ( n , q ) = 1 gcd(n,q)=1 gcd(n,q)=1,寻找扩域 G F ( q m ) GF(q^m) GF(qm),使得 n ∣ q m − 1 n | q^m-1 n∣qm−1
- 为了寻找生成多项式 g ( x ) ∣ x n − 1 g(x)|x^n-1 g(x)∣xn−1,容易看出需要 g ( x ) ∣ x q m − 1 − 1 g(x)|x^{q^m-1}-1 g(x)∣xqm−1−1, g ( x ) g(x) g(x)的根是后者的根的一部分。
- 令 α \alpha α是 G F ( q m ) GF(q^m) GF(qm)的本原元,记 b : = ( q m − 1 ) / n b:=(q^m-1)/n b:=(qm−1)/n,令 β = α b \beta=\alpha^b β=αb,易知 β \beta β是 G F ( q m ) GF(q^m) GF(qm)上的 n n n次本原单位根,那么 x n − 1 x^n-1 xn−1的根都是 β \beta β的幂次。
- 对于某个 β i \beta^i βi,计算它所在共轭元集合的极小多项式 f i ( x ) ∈ G F ( q ) [ x ] f_i(x) \in GF(q)[x] fi(x)∈GF(q)[x],这是 x n − 1 x^n-1 xn−1的一个素因式。
- 根据需要,计算乘积 g ( x ) = ∏ i f i ( x ) ∣ x n − 1 g(x) = \prod_i f_i(x) | x^n-1 g(x)=∏ifi(x)∣xn−1,那么得到的主理想 C = ( g ( x ) ) ⊆ R \mathscr C = (g(x)) \subseteq R C=(g(x))⊆R是一个循环码。
循环码的矩阵形式
非系统编码
假设
γ
1
,
⋯
,
γ
r
∈
G
F
(
q
m
)
\gamma_1,\cdots,\gamma_r \in GF(q^m)
γ1,⋯,γr∈GF(qm)是生成多项式
g
(
x
)
g(x)
g(x)的根,那么
H
=
[
γ
1
0
γ
1
1
⋯
γ
1
n
−
1
γ
2
0
γ
2
1
⋯
γ
2
n
−
1
⋮
γ
r
0
γ
r
1
⋯
γ
r
n
−
1
]
H = \begin{bmatrix} \gamma_1^0 & \gamma_1^1 & \cdots & \gamma_1^{n-1}\\ \gamma_2^0 & \gamma_2^1 & \cdots & \gamma_2^{n-1}\\ \vdots\\ \gamma_r^0 & \gamma_r^1 & \cdots & \gamma_r^{n-1}\\ \end{bmatrix}
H=
γ10γ20⋮γr0γ11γ21γr1⋯⋯⋯γ1n−1γ2n−1γrn−1
进而可以求其正交补空间
S
p
a
n
(
H
)
⊥
Span(H)^\perp
Span(H)⊥的一组基
G
G
G
但是,上述的
G
,
H
G,H
G,H是扩域
G
F
(
q
m
)
GF(q^m)
GF(qm)上的矩阵。其实,令
g
(
x
)
=
∑
i
=
0
n
−
k
g
i
x
i
g(x) = \sum_{i=0}^{n-k} g_ix^i
g(x)=∑i=0n−kgixi,容易得到
G
F
(
q
)
GF(q)
GF(q)上的矩阵,
G
=
[
0
⋯
0
g
n
−
k
⋯
g
1
g
0
0
⋯
g
n
−
k
g
n
−
k
−
1
⋯
g
0
0
⋮
g
n
−
k
g
n
−
k
−
1
⋯
0
]
∈
G
F
(
q
)
k
×
n
G = \begin{bmatrix} 0 & \cdots & 0 & g_{n-k} & \cdots & g_1 & g_0\\ 0 & \cdots & g_{n-k} & g_{n-k-1}& \cdots & g_0 & 0\\ \vdots\\ g_{n-k} & g_{n-k-1} &&&& \cdots & 0\\ \end{bmatrix} \in GF(q)^{k \times n}
G=
00⋮gn−k⋯⋯gn−k−10gn−kgn−kgn−k−1⋯⋯g1g0⋯g000
∈GF(q)k×n
设
h
(
x
)
g
(
x
)
≡
0
m
o
d
x
n
−
1
h(x)g(x) \equiv 0 \mod x^n-1
h(x)g(x)≡0modxn−1,令
h
(
x
)
=
∑
i
=
0
k
h
i
x
i
h(x) = \sum_{i=0}^{k} h_ix^i
h(x)=∑i=0khixi,那么卷积值
u
r
=
∑
i
=
0
r
g
r
−
i
h
i
=
0
u_r = \sum_{i=0}^r g_{r-i}h_i = 0
ur=∑i=0rgr−ihi=0,从而
H
=
[
h
0
h
1
⋯
h
k
0
⋯
0
0
h
0
⋯
h
k
−
1
h
k
⋯
0
⋮
0
⋯
h
k
−
1
h
k
]
∈
G
F
(
q
)
(
n
−
k
)
×
n
H = \begin{bmatrix} h_0 & h_1 & \cdots & h_k & 0 & \cdots & 0\\ 0 & h_0 & \cdots & h_{k-1} & h_{k} & \cdots & 0\\ &&&&&& \vdots\\ 0 & \cdots &&&& h_{k-1} & h_k\\ \end{bmatrix} \in GF(q)^{(n-k) \times n}
H=
h000h1h0⋯⋯⋯hkhk−10hk⋯⋯hk−100⋮hk
∈GF(q)(n−k)×n
容易验证,
G
H
T
=
(
u
n
−
i
−
j
+
1
)
=
0
∈
G
F
(
q
)
k
×
(
n
−
k
)
GH^T = (u_{n-i-j+1}) = 0 \in GF(q)^{k \times (n-k)}
GHT=(un−i−j+1)=0∈GF(q)k×(n−k)
根据以上的
G
,
H
G,H
G,H,容易发现,对偶码
C
⊥
\mathscr C^\perp
C⊥的生成多项式为校验多项式的互反多项式(reciprocal polynomial):
h
~
(
x
)
:
=
x
k
h
(
x
−
1
)
=
∑
i
=
0
k
h
k
−
i
x
i
\tilde h(x) := x^k h(x^{-1}) = \sum_{i=0}^k h_{k-i} x^i
h~(x):=xkh(x−1)=i=0∑khk−ixi
同时,由
h
(
x
)
h(x)
h(x)生成的循环码与上述对偶码同构。
系统编码
由
g
(
x
)
g(x)
g(x)生成的主理想
C
\mathscr C
C是线性空间
G
F
(
q
)
n
GF(q)^{n}
GF(q)n的
k
k
k维子空间,令
x
n
−
i
−
s
i
(
x
)
=
Q
i
(
x
)
g
(
x
)
,
i
=
1
,
⋯
,
k
x^{n-i} - s_i(x) = Q_i(x)g(x),\, i=1,\cdots,k
xn−i−si(x)=Qi(x)g(x),i=1,⋯,k
是子空间的一组基。
容易计算
s
i
(
x
)
=
R
g
(
x
)
(
x
n
−
i
)
s_i(x) = R_{g(x)}(x^{n-i})
si(x)=Rg(x)(xn−i),设
s
i
(
x
)
=
∑
j
=
0
n
−
k
−
1
s
i
j
x
j
s_i(x) = \sum_{j=0}^{n-k-1} s_{ij} x^j
si(x)=∑j=0n−k−1sijxj,那么
G
=
[
−
s
k
,
0
⋯
−
s
k
,
n
−
k
−
1
1
0
⋯
0
−
s
k
−
1
,
0
⋯
−
s
k
−
1
,
n
−
k
−
1
0
1
⋯
0
⋮
−
s
1
,
0
⋯
−
s
1
,
n
−
k
−
1
0
0
⋯
1
]
∈
G
F
(
q
)
k
×
n
G = \begin{bmatrix} -s_{k,0} & \cdots & -s_{k,n-k-1} & 1 & 0 & \cdots & 0\\ -s_{k-1,0} & \cdots & -s_{k-1,n-k-1} & 0 & 1 & \cdots & 0\\ \vdots\\ -s_{1,0} & \cdots & -s_{1,n-k-1} & 0 & 0 & \cdots & 1\\ \end{bmatrix} \in GF(q)^{k \times n}
G=
−sk,0−sk−1,0⋮−s1,0⋯⋯⋯−sk,n−k−1−sk−1,n−k−1−s1,n−k−1100010⋯⋯⋯001
∈GF(q)k×n
假设子空间
V
V
V的一组基为
G
=
[
A
∣
I
k
]
G=[A|I_{k}]
G=[A∣Ik](按行向量),那么其正交补空间
V
⊥
V^\perp
V⊥的一组基为
H
=
[
I
n
−
k
∣
−
A
T
]
H=[I_{n-k}|-A^T]
H=[In−k∣−AT],因此
H
=
[
1
0
⋯
0
s
k
,
0
⋯
s
1
,
0
0
1
⋯
0
s
k
,
1
⋯
s
1
,
1
⋮
0
0
⋯
1
s
k
,
n
−
k
−
1
⋯
s
1
,
n
−
k
−
1
]
∈
G
F
(
q
)
(
n
−
k
)
×
n
H = \begin{bmatrix} 1 & 0 & \cdots & 0 & s_{k,0} & \cdots & s_{1,0} \\ 0 & 1 & \cdots & 0 & s_{k,1} & \cdots & s_{1,1} \\ \vdots\\ 0 & 0 & \cdots & 1 & s_{k,n-k-1} & \cdots & s_{1,n-k-1} \\ \end{bmatrix} \in GF(q)^{(n-k) \times n}
H=
10⋮0010⋯⋯⋯001sk,0sk,1sk,n−k−1⋯⋯⋯s1,0s1,1s1,n−k−1
∈GF(q)(n−k)×n
准循环码
定义:一个 ( n , k ) (n,k) (n,k)线性码 C \mathscr C C叫做准循环码(quasi-cyclic code),如果对于任意的码字 c ( x ) ∈ C c(x) \in \mathscr C c(x)∈C,都存在 b ∣ n b|n b∣n,使得 x b c ( x ) m o d x n − 1 ∈ C x^bc(x) \mod x^n-1 \in \mathscr C xbc(x)modxn−1∈C成立。
任意的 n n n长循环码可以每数到 b b b就将这个符号全置零(dropping every b b bth symbol),从而得到一个准循环码。
适当缩短循环码
定义:一个 ( n , k ) (n,k) (n,k)线性码 C \mathscr C C叫做适当缩短循环码(proper shortened cyclic code),如果它可以通过将 ( n + b , k + b ) (n+b,k+b) (n+b,k+b)循环码的连续 b b b个数据符号删除(deleting b b b consecutive places)来得到。实际上,它是 Z p [ x ] / ( f ( x ) ) Z_p[x]/(f(x)) Zp[x]/(f(x))的理想, f ( x ) f(x) f(x)是度数 n ′ = n − b n'=n-b n′=n−b的某多项式。
其解码器与原始编码相同,因为完全可以将码字的那 b b b个数据位置通过置零恢复到原始编码上去。如果原始循环码的最小距离为 d m i n d_{min} dmin,那么其最小距离也是 d m i n d_{min} dmin。