NTT性质
令时域 v = ( v i ) ∈ G F ( q ) n v=(v_i) \in GF(q)^n v=(vi)∈GF(q)n,其中 i i i是时间,满足 g c d ( n , q ) = 1 gcd(n,q)=1 gcd(n,q)=1。那么 ∃ m ≤ n , n ∣ q m − 1 \exists m \le n,\, n | q^m-1 ∃m≤n,n∣qm−1,令 w ∈ G F ( q m ) w \in GF(q^m) w∈GF(qm)满足 w n = 1 w^n=1 wn=1,即 w w w是 n n n阶单位根。做NTT变换得到频域 V = ( V j ) ∈ G F ( q m ) n V=(V_j) \in GF(q^m)^n V=(Vj)∈GF(qm)n,而 s j ( i ) : = ( w j ) i s_j(i):=(w^j)^i sj(i):=(wj)i是函数空间的一组频率渐变的正交基。
NTT公式:
V
j
=
∑
i
=
0
n
−
1
w
i
j
v
i
=
v
(
w
j
)
,
j
=
1
,
⋯
,
n
V_j = \sum_{i=0}^{n-1} w^{ij} v_i = v(w^j),\, j=1,\cdots,n
Vj=i=0∑n−1wijvi=v(wj),j=1,⋯,n
INTT公式:
v
i
=
1
n
∑
j
=
0
n
−
1
w
−
i
j
V
j
=
V
(
w
−
i
)
n
,
i
=
1
,
⋯
n
v_i = \frac{1}{n} \sum_{j=0}^{n-1} w^{-ij} V_j = \frac{V(w^{-i})}{n},\, i=1,\cdots n
vi=n1j=0∑n−1w−ijVj=nV(w−i),i=1,⋯n
域
F
F
F上的线性递归式(linear recursion):
V
k
=
−
∑
j
=
1
L
Λ
j
V
k
−
j
,
k
=
L
,
L
+
1
,
⋯
V_k = - \sum_{j=1}^L \Lambda_j V_{k-j},\, k=L,L+1,\cdots
Vk=−j=1∑LΛjVk−j,k=L,L+1,⋯
线性递归式完全由长度
L
L
L和连接权重(connection weights)
Λ
\Lambda
Λ决定,记做
(
Λ
,
L
)
(\Lambda,L)
(Λ,L)。多项式
λ
(
x
)
=
1
+
∑
j
=
1
L
Λ
j
x
j
\lambda(x)=1+\sum_{j=1}^L \Lambda_j x^j
λ(x)=1+∑j=1LΛjxj叫做连接多项式(connection polynomial),
deg
λ
(
x
)
≤
L
\deg \lambda(x) \le L
degλ(x)≤L。
给定一个序列 V 0 , ⋯ , V n − 1 ∈ F V_0,\cdots,V_{n-1} \in F V0,⋯,Vn−1∈F,我们将能够生成这个序列的最短线性递归式的长度叫做 V V V的线性复杂度(linear complexity)。
一些性质:
- 可加(Additivity): λ v + μ v ′ ⟺ λ V + μ V ′ \lambda v+\mu v' \iff \lambda V + \mu V' λv+μv′⟺λV+μV′
- 调制(Modulation): ( v i w i l ) ⟺ ( V ( j + l ) ) (v_i w^{il}) \iff (V_{(j+l)}) (viwil)⟺(V(j+l))
- 转换(Translation): ( v ( i − l ) ) ⟺ ( V j w j l ) (v_{(i-l)}) \iff (V_j w^{jl}) (v(i−l))⟺(Vjwjl)
- 卷积(Convolution): e ( x ) = f ( x ) g ( x ) m o d x n − 1 ⟺ E j = F j G j e(x) = f(x)g(x) \mod x^n-1 \iff E_j = F_j G_j e(x)=f(x)g(x)modxn−1⟺Ej=FjGj
- 零点(Zero): v ( w j ) = 0 ⟺ V j = 0 v(w^j)=0 \iff V_j=0 v(wj)=0⟺Vj=0
- 抽取(Decimation): ( v b i ) ⟺ ( V B j ) , B b ≡ 1 m o d n (v_{bi}) \iff (V_{Bj}),\, Bb \equiv 1 \mod n (vbi)⟺(VBj),Bb≡1modn
- 有限长度序列 V V V的线性复杂度,等于做INTT后 v v v的汉明重量。反之亦然。
循环码 C \mathscr C C的生成多项式为 g ( x ) g(x) g(x),码字为 c ( x ) = a ( x ) g ( x ) c(x)=a(x)g(x) c(x)=a(x)g(x)。令 G = N T T ( g ) , A = N T T ( a ) G=NTT(g),A=NTT(a) G=NTT(g),A=NTT(a),那么 C j = A j G j ⟺ C = N T T ( c ) C_j=A_jG_j \iff C=NTT(c) Cj=AjGj⟺C=NTT(c)。假设 B = { j 1 , ⋯ , j n − k } B=\{j_1,\cdots,j_{n-k}\} B={j1,⋯,jn−k}是 g ( x ) g(x) g(x)的零点 w j w^j wj的指标,那么 A j G j = 0 , ∀ j ∈ B A_jG_j=0,\forall j \in B AjGj=0,∀j∈B。
因此,循环码也可以被定义为:空间 G F ( q ) n GF(q)^n GF(q)n中那些做NTT变换后在 B B B指定位置的频谱分量为 0 0 0的向量的集合,这些置零的频谱分量叫做校验频率(check frequencies)
共轭约束
对于 G F ( q m ) GF(q^m) GF(qm)上的向量 V V V,做INTT后得到的 v v v不一定会落入空间 G F ( q ) n GF(q)^n GF(q)n。
令
V
∈
G
F
(
q
m
)
n
V \in GF(q^m)^n
V∈GF(qm)n,且
n
∣
q
m
−
1
n | q^m-1
n∣qm−1,令
v
:
=
I
N
T
T
(
V
)
v:= INTT(V)
v:=INTT(V),那么
v
∈
G
F
(
q
)
n
⟺
V
j
q
=
V
(
q
j
)
,
j
=
0
,
⋯
,
n
−
1
v \in GF(q)^n \iff V_j^q = V_{(qj)},\, j=0,\cdots,n-1
v∈GF(q)n⟺Vjq=V(qj),j=0,⋯,n−1
我们对
Z
n
Z_n
Zn中元素做划分,得到共轭类(
q
−
q-
q−ary conjugacy classes):
B
j
=
{
j
,
j
q
,
j
q
2
,
⋯
,
j
q
m
j
−
1
}
B_j = \{j,jq,jq^2,\cdots,jq^{m_j-1}\}
Bj={j,jq,jq2,⋯,jqmj−1}
其中
m
j
m_j
mj是使得
j
q
m
j
≡
j
m
o
d
n
jq^{m_j} \equiv j \mod n
jqmj≡jmodn的最小的正整数,它一定存在(
g
c
d
(
n
,
q
)
=
1
gcd(n,q)=1
gcd(n,q)=1)。我们说大小为
m
j
m_j
mj的共轭类
B
j
B_j
Bj由
j
j
j代表。
根据定义易知,
C
j
q
m
j
−
1
q
=
C
j
C_{jq^{m_j-1}}^q = C_j
Cjqmj−1q=Cj,于是
(
C
j
q
m
j
−
1
)
q
=
C
j
q
m
j
=
C
j
(C_j^{q^{m_j-1}})^q = C_j^{q^{m_j}} = C_j
(Cjqmj−1)q=Cjqmj=Cj
因此,由
B
j
B_j
Bj指定的那些频谱值应落在扩域
G
F
(
q
m
j
)
GF(q^{m_j})
GF(qmj)内。
也就是说,如果一个向量 V ∈ G F ( q m ) n V \in GF(q^m)^n V∈GF(qm)n对应的 v v v落在 G F ( q ) n GF(q)^n GF(q)n内部,那么向量 V V V中由共轭类 B j B_j Bj所指定的那些分量都由频谱值 V j ∈ G F ( q m j ) V_j \in GF(q^{m_j}) Vj∈GF(qmj)所完全决定,而不能随意选取。这就叫做共轭约束(conjugacy constraints)。
时域编码和频域编码
循环码有两种编码方式,
- time-domain encoder:在时域上,利用生成多项式 g ( x ) g(x) g(x),使用系统编码方式或者非系统编码方式,详见循环码。
- frequency-domain encoder:在频域上,将 g ( x ) g(x) g(x)的所有零点 { w i } I \{w^i\}_I {wi}I对应的位置 { C i } I \{C_i\}_I {Ci}I置零,作为校验符号。同时零点所在共轭类的位置也都置零。其他共轭类的代表元所指定位置作为数据符号,填入数据比特,而其他的位置要满足共轭约束条件。
Reed-Solomen Code
定义
令 g c d ( n , q ) = 1 gcd(n,q)=1 gcd(n,q)=1,一个 G F ( q ) GF(q) GF(q)上的长度为 n ∣ q − 1 n|q-1 n∣q−1的RS码 C \mathscr C C,定义为:空间 G F ( q ) n GF(q)^n GF(q)n中那些做NTT变换后在特定的 d − 1 d-1 d−1个连续分量为零的所有的向量,这个连续分量记做 { j 0 , j 0 + 1 , ⋯ , j 0 + d − 2 } \{j_0,j_0+1,\cdots,j_0+d-2\} {j0,j0+1,⋯,j0+d−2}。
构造
由于
n
∣
q
−
1
n|q-1
n∣q−1,因此一个码字
c
∈
C
c \in \mathscr C
c∈C做NTT变换后得到的
C
C
C依然属于
G
F
(
q
)
GF(q)
GF(q)。由于
C
j
=
0
⟺
C
j
w
j
=
0
C_j=0 \iff C_j w^j = 0
Cj=0⟺Cjwj=0,并且由于
(
c
(
i
−
1
)
)
⟺
(
C
j
w
j
)
(c_{(i-1)}) \iff (C_j w^{j})
(c(i−1))⟺(Cjwj),因此RS码是循环码。由于
C
j
=
0
⟺
c
(
w
j
)
=
0
C_j=0 \iff c(w^j)=0
Cj=0⟺c(wj)=0,因此
g
(
x
)
=
(
x
−
w
j
0
)
(
x
−
w
j
0
+
1
)
⋯
(
x
−
w
j
0
+
d
−
2
)
g(x) = (x-w^{j_0})(x-w^{j_0+1})\cdots(x-w^{j_0+d-2})
g(x)=(x−wj0)(x−wj0+1)⋯(x−wj0+d−2)
容易看出,
deg
g
=
d
−
1
=
n
−
k
\deg g = d-1 = n-k
degg=d−1=n−k。由于
C
C
C包含
d
−
1
d-1
d−1个连续的零分量,利用调制将它们搬移到最高频且不影响码字的汉明重量。那么
C
(
x
)
=
∑
j
=
0
n
−
d
C
j
x
j
C(x)=\sum_{j=0}^{n-d} C_j x^j
C(x)=∑j=0n−dCjxj至多有
n
−
d
n-d
n−d个不同的零点,于是INTT后得到的
c
c
c至少有
d
d
d个分量,即
d
m
i
n
≥
d
=
n
−
k
+
1
d_{min} \ge d = n-k+1
dmin≥d=n−k+1。
Singleton Bound:对于 ( n , k ) (n,k) (n,k)线性码,其最小距离满足 d m i n ≤ n − k + 1 d_{min} \le n-k+1 dmin≤n−k+1
于是
d
m
i
n
=
n
−
k
+
1
=
d
d_{min} = n-k+1 = d
dmin=n−k+1=d
因此,RS码是极大距离可分码(maximum distance separable,MDS)。
构造方法:
- 确定 n , q n,q n,q 使得 n ∣ q − 1 n|q-1 n∣q−1,计算 G F ( q ) GF(q) GF(q)中的 n n n阶单位根 w w w(如果 n = q − 1 n=q-1 n=q−1,那么叫做本原RS码)
- 根据需要纠错的数量 t t t,计算 d = 2 t + 1 d=2t+1 d=2t+1,然后任意选取 j 0 j_0 j0(一般选取 j 0 = 1 j_0=1 j0=1)来确定使用哪些元素作为零点
- 我们得到了由 g ( x ) = ( x − w j 0 ) ( x − w j 0 + 1 ) ⋯ ( x − w j 0 + 2 t − 1 ) g(x)=(x-w^{j_0})(x-w^{j_0+1})\cdots(x-w^{j_0+2t-1}) g(x)=(x−wj0)(x−wj0+1)⋯(x−wj0+2t−1)生成的 ( n , n − 2 t , 2 t + 1 ) (n,n-2t,2t+1) (n,n−2t,2t+1)RS码
- 若使用频域编码器,由于 n ∣ q − 1 n|q-1 n∣q−1使得时域频域的有限域都是 G F ( q ) GF(q) GF(q),因此我们只需设置 V j 0 = ⋯ = V j 0 + 2 t − 1 = 0 V_{j_0}=\cdots=V_{j_0+2t-1}=0 Vj0=⋯=Vj0+2t−1=0。其他的 n − 2 t n-2t n−2t个位置的频谱都作为数据符号( q ≡ 1 m o d n q \equiv 1 \mod n q≡1modn,共轭类的大小都为 m j = 1 m_j=1 mj=1,不必考虑共轭约束)
- 将数据 a ( x ) a(x) a(x)的系数按某种顺序填入,做INTT得到码字 c ( x ) c(x) c(x)
BCH Code
定义
令 g c d ( n , q ) = 1 gcd(n,q)=1 gcd(n,q)=1,一个 G F ( q ) GF(q) GF(q)上的长度为 n ∣ q m − 1 n|q^m-1 n∣qm−1、设计距离为 d d d的BCH码 C \mathscr C C,定义为:空间 G F ( q ) n GF(q)^n GF(q)n中那些做NTT变换后在特定的 d − 1 d-1 d−1个连续分量为零的所有的向量。
注意,这里是 n ∣ q m − 1 n | q^m-1 n∣qm−1,因此做NTT后的频谱落在域 G F ( q m ) GF(q^m) GF(qm)上。容易看出,RS码是 m = 1 m=1 m=1时的BCH码;同时, G F ( q ) GF(q) GF(q)上的BCH码是 G F ( q m ) GF(q^m) GF(qm)上的RS码的子空间,因此前者的最小距离大于等于后者的最小距离。
构造
BCH Bound:令 n ∣ q m − 1 n | q^m-1 n∣qm−1,在 G F ( q ) n GF(q)^n GF(q)n中汉明重量至多为 d − 1 d-1 d−1的向量,如果它的频谱包含 d − 1 d-1 d−1个连续的零分量,那么它就是零向量。这可以通过循环抽取来扩展,因为抽取不改变汉明重量。
因此,设计距离为 d d d的BCH码的最小距离 d m i n d_{min} dmin至少和 d d d一样大,并且往往有 d m i n > d d_{min}>d dmin>d。
构造方法:
- 确定 n , q n,q n,q 使得 n ∣ q m − 1 n|q^m-1 n∣qm−1,然后将 Z n Z_n Zn划分为若干共轭类 B j 1 , ⋯ , B j r B_{j_1},\cdots,B_{j_r} Bj1,⋯,Bjr
- 根据需要纠错的数量 t t t,计算 d = 2 t + 1 d=2t+1 d=2t+1,然后选取某个 j 0 j_0 j0(一般选取 j 0 = 1 j_0=1 j0=1),将 d − 1 d - 1 d−1个连续频谱分量作为校验频率
- 将 { j 0 , j 0 + 1 , ⋯ , j 0 + d − 2 } \{j_0,j_0+1,\cdots,j_0+d-2\} {j0,j0+1,⋯,j0+d−2}所在的共轭类对应的频谱值都置零
- 将剩余共轭类的代表 j l j_l jl作为数据符号,有 C j l ∈ G F ( q m j l ) C_{j_l} \in GF(q^{m_{j_l}}) Cjl∈GF(qmjl),这可视作长度为 m j l m_{j_l} mjl的 G F ( q ) GF(q) GF(q)上向量。其他的 m j l − 1 m_{j_l}-1 mjl−1个位置按照共轭约束,由 C j l C_{j_l} Cjl来生成
- 假设作为数据符号的那些共轭类的总大小为 k = ∑ l m j l k = \sum_l m_{j_l} k=∑lmjl,那么可以将 G F ( q ) k GF(q)^k GF(q)k上的向量分块填充到那些数据符号上,因此我们得到了 ( n , k ) (n,k) (n,k)BCH码
- 最后,做INTT得到时域上的码字多项式
观察到校验频率以及它们的共轭频率都被置零,而校验频率
w
j
w^j
wj的共轭类对应的频率为
w
j
q
,
w
j
q
2
,
⋯
w^{jq},w^{jq^2},\cdots
wjq,wjq2,⋯,这些就是
w
j
w^j
wj在
G
F
(
q
m
)
GF(q^m)
GF(qm)上的共轭元。因此,BCH码的生成多项式为:
g
(
x
)
=
l
c
m
(
f
1
(
x
)
,
⋯
,
f
d
−
1
(
x
)
)
g(x) = lcm(f_1(x),\cdots,f_{d-1}(x))
g(x)=lcm(f1(x),⋯,fd−1(x))
这里
f
j
(
x
)
f_j(x)
fj(x)是
w
j
w^j
wj的极小多项式(以所有共轭元为单根)。如果
w
w
w是
G
F
(
q
m
)
GF(q^m)
GF(qm)的本原根,那么
n
=
q
m
−
1
n=q^m-1
n=qm−1,此时叫做本原BCH码。
Reed-Muller Code
定义
对于整数
j
j
j,将它写作
j
=
j
0
+
j
1
2
+
⋯
+
j
m
−
1
2
m
−
1
j=j_0+j_{1}2+\cdots+j_{m-1}2^{m-1}
j=j0+j12+⋯+jm−12m−1(radix-2 representation),定义二进制重量(radix-2 weight)为
w
2
(
j
)
=
j
0
+
j
1
+
⋯
+
j
m
−
1
w_2(j) = j_0+j_1+\cdots+j_{m-1}
w2(j)=j0+j1+⋯+jm−1
一个长度为
n
=
2
m
−
1
n=2^m-1
n=2m−1的
r
r
r阶(order)的循环RM码
C
\mathscr C
C,是定义集为
A
=
{
w
j
:
0
<
w
2
(
j
)
<
m
−
r
}
A=\{w^j: 0 < w_2(j) < m-r\}
A={wj:0<w2(j)<m−r}的二元循环码(binary cyclic code)。
构造
由于 d = 2 m − r − 1 d=2^{m-r}-1 d=2m−r−1的二进制表示就是 m − r m-r m−r比特的全幺串,因此 ∀ j = 1 , ⋯ , d − 1 , w 2 ( j ) ≤ m − r − 1 \forall j=1,\cdots,d-1,\, w_2(j)\le m-r-1 ∀j=1,⋯,d−1,w2(j)≤m−r−1,从而 { w , w 2 , ⋯ , w d − 1 } \{w,w^{2},\cdots,w^{d-1}\} {w,w2,⋯,wd−1}是RM码的定义集的子集。但同时,这也是设计距离为 d d d的BCH码的定义集。所以, r r r阶循环RM码是设计距离为 d = 2 m − r − 1 d=2^{m-r}-1 d=2m−r−1的BCH码的子空间。
易知,长度为 n = 2 m − 1 n=2^m-1 n=2m−1的 r r r阶循环RM码的极小距离满足 d m i n ≥ 2 m − r − 1 d_{min} \ge 2^{m-r}-1 dmin≥2m−r−1
构造方法:
- 确定 m , r m,r m,r ,令 n = 2 m − 1 n=2^m-1 n=2m−1,构造域 G F ( 2 m ) GF(2^m) GF(2m),找到本原元 w w w
- 寻找所有的满足 0 < w 2 ( j ) < m − r 0 < w_2(j) < m-r 0<w2(j)<m−r的 m m m比特的正整数 j j j,那么其生成多项式为 g ( x ) = L C M ( f j ( x ) ) g(x) = LCM(f_j(x)) g(x)=LCM(fj(x)),这里 f j ( x ) f_j(x) fj(x)是 w j w^j wj的极小多项式
- 将频域上的 j j j分量作为校验频率,同时将其共轭类所对应的频谱值置零。剩余的共轭类的代表作为数据符号,其他位置要满足共轭约束。
RM码是BCH码的子码,因此拥有较低的码率,在实际中用处不大。但它多余的零元使得其解码更容易。