基于NTT的循环码:RS码、BCH码、RM码
NTT性质
令时域v=(vi)∈GF(q)nv=(v_i) \in GF(q)^nv=(vi)∈GF(q)n,其中iii是时间,满足gcd(n,q)=1gcd(n,q)=1gcd(n,q)=1。那么∃m≤n,n∣qm−1\exists m \le n,\, n | q^m-1∃m≤n,n∣qm−1,令w∈GF(qm)w \in GF(q^m)w∈GF(qm)满足wn=1w^n=1wn=1,即www是nnn阶单位根。做NTT变换得到频域V=(Vj)∈GF(qm)nV=(V_j) \in GF(q^m)^nV=(Vj)∈GF(qm)n,而sj(i):=(wj)is_j(i):=(w^j)^isj(i):=(wj)i是函数空间的一组频率渐变的正交基。
NTT公式:
Vj=∑i=0n−1wijvi=v(wj),j=1,⋯,nV_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公式:
vi=1n∑j=0n−1w−ijVj=V(w−i)n,i=1,⋯nv_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
域FFF上的线性递归式(linear recursion):
Vk=−∑j=1LΛjVk−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,⋯
线性递归式完全由长度LLL和连接权重(connection weights)Λ\LambdaΛ决定,记做(Λ,L)(\Lambda,L)(Λ,L)。多项式λ(x)=1+∑j=1LΛjxj\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 Ldegλ(x)≤L。
给定一个序列V0,⋯,Vn−1∈FV_0,\cdots,V_{n-1} \in FV0,⋯,Vn−1∈F,我们将能够生成这个序列的最短线性递归式的长度叫做VVV的线性复杂度(linear complexity)。
一些性质:
循环码C\mathscr CC的生成多项式为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=NTT(g),A=NTT(a)G=NTT(g),A=NTT(a)G=NTT(g),A=NTT(a),那么Cj=AjGj⟺C=NTT(c)C_j=A_jG_j \iff C=NTT(c)Cj=AjGj⟺C=NTT(c)。假设B={j1,⋯,jn−k}B=\{j_1,\cdots,j_{n-k}\}B={j1,⋯,jn−k}是g(x)g(x)g(x)的零点wjw^jwj的指标,那么AjGj=0,∀j∈BA_jG_j=0,\forall j \in BAjGj=0,∀j∈B。
因此,循环码也可以被定义为:空间GF(q)nGF(q)^nGF(q)n中那些做NTT变换后在BBB指定位置的频谱分量为000的向量的集合,这些置零的频谱分量叫做校验频率(check frequencies)
共轭约束
对于GF(qm)GF(q^m)GF(qm)上的向量VVV,做INTT后得到的vvv不一定会落入空间GF(q)nGF(q)^nGF(q)n。
令V∈GF(qm)nV \in GF(q^m)^nV∈GF(qm)n,且n∣qm−1n | q^m-1n∣qm−1,令v:=INTT(V)v:= INTT(V)v:=INTT(V),那么
v∈GF(q)n⟺Vjq=V(qj),j=0,⋯,n−1v \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
我们对ZnZ_nZn中元素做划分,得到共轭类(q−q-q−ary conjugacy classes):
Bj={j,jq,jq2,⋯,jqmj−1}B_j = \{j,jq,jq^2,\cdots,jq^{m_j-1}\} Bj={j,jq,jq2,⋯,jqmj−1}
其中mjm_jmj是使得jqmj≡jmodnjq^{m_j} \equiv j \mod njqmj≡jmodn的最小的正整数,它一定存在(gcd(n,q)=1gcd(n,q)=1gcd(n,q)=1)。我们说大小为mjm_jmj的共轭类BjB_jBj由jjj代表。
根据定义易知,Cjqmj−1q=CjC_{jq^{m_j-1}}^q = C_jCjqmj−1q=Cj,于是
(Cjqmj−1)q=Cjqmj=Cj(C_j^{q^{m_j-1}})^q = C_j^{q^{m_j}} = C_j (Cjqmj−1)q=Cjqmj=Cj
因此,由BjB_jBj指定的那些频谱值应落在扩域GF(qmj)GF(q^{m_j})GF(qmj)内。
也就是说,如果一个向量V∈GF(qm)nV \in GF(q^m)^nV∈GF(qm)n对应的vvv落在GF(q)nGF(q)^nGF(q)n内部,那么向量VVV中由共轭类BjB_jBj所指定的那些分量都由频谱值Vj∈GF(qmj)V_j \in GF(q^{m_j})Vj∈GF(qmj)所完全决定,而不能随意选取。这就叫做共轭约束(conjugacy constraints)。
时域编码和频域编码
循环码有两种编码方式,
Reed-Solomen Code
定义
令gcd(n,q)=1gcd(n,q)=1gcd(n,q)=1,一个GF(q)GF(q)GF(q)上的长度为n∣q−1n|q-1n∣q−1的RS码C\mathscr CC,定义为:空间GF(q)nGF(q)^nGF(q)n中那些做NTT变换后在特定的d−1d-1d−1个连续分量为零的所有的向量,这个连续分量记做{j0,j0+1,⋯,j0+d−2}\{j_0,j_0+1,\cdots,j_0+d-2\}{j0,j0+1,⋯,j0+d−2}。
构造
由于n∣q−1n|q-1n∣q−1,因此一个码字c∈Cc \in \mathscr Cc∈C做NTT变换后得到的CCC依然属于GF(q)GF(q)GF(q)。由于Cj=0⟺Cjwj=0C_j=0 \iff C_j w^j = 0Cj=0⟺Cjwj=0,并且由于(c(i−1))⟺(Cjwj)(c_{(i-1)}) \iff (C_j w^{j})(c(i−1))⟺(Cjwj),因此RS码是循环码。由于Cj=0⟺c(wj)=0C_j=0 \iff c(w^j)=0Cj=0⟺c(wj)=0,因此
g(x)=(x−wj0)(x−wj0+1)⋯(x−wj0+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)
容易看出,degg=d−1=n−k\deg g = d-1 = n-kdegg=d−1=n−k。由于CCC包含d−1d-1d−1个连续的零分量,利用调制将它们搬移到最高频且不影响码字的汉明重量。那么C(x)=∑j=0n−dCjxjC(x)=\sum_{j=0}^{n-d} C_j x^jC(x)=∑j=0n−dCjxj至多有n−dn-dn−d个不同的零点,于是INTT后得到的ccc至少有ddd个分量,即dmin≥d=n−k+1d_{min} \ge d = n-k+1dmin≥d=n−k+1。
Singleton Bound:对于(n,k)(n,k)(n,k)线性码,其最小距离满足dmin≤n−k+1d_{min} \le n-k+1dmin≤n−k+1
于是
dmin=n−k+1=dd_{min} = n-k+1 = d dmin=n−k+1=d
因此,RS码是极大距离可分码(maximum distance separable,MDS)。
构造方法:
BCH Code
定义
令gcd(n,q)=1gcd(n,q)=1gcd(n,q)=1,一个GF(q)GF(q)GF(q)上的长度为n∣qm−1n|q^m-1n∣qm−1、设计距离为ddd的BCH码C\mathscr CC,定义为:空间GF(q)nGF(q)^nGF(q)n中那些做NTT变换后在特定的d−1d-1d−1个连续分量为零的所有的向量。
注意,这里是n∣qm−1n | q^m-1n∣qm−1,因此做NTT后的频谱落在域GF(qm)GF(q^m)GF(qm)上。容易看出,RS码是m=1m=1m=1时的BCH码;同时,GF(q)GF(q)GF(q)上的BCH码是GF(qm)GF(q^m)GF(qm)上的RS码的子空间,因此前者的最小距离大于等于后者的最小距离。
构造
BCH Bound:令n∣qm−1n | q^m-1n∣qm−1,在GF(q)nGF(q)^nGF(q)n中汉明重量至多为d−1d-1d−1的向量,如果它的频谱包含d−1d-1d−1个连续的零分量,那么它就是零向量。这可以通过循环抽取来扩展,因为抽取不改变汉明重量。
因此,设计距离为ddd的BCH码的最小距离dmind_{min}dmin至少和ddd一样大,并且往往有dmin>dd_{min}>ddmin>d。
构造方法:
观察到校验频率以及它们的共轭频率都被置零,而校验频率wjw^jwj的共轭类对应的频率为wjq,wjq2,⋯w^{jq},w^{jq^2},\cdotswjq,wjq2,⋯,这些就是wjw^jwj在GF(qm)GF(q^m)GF(qm)上的共轭元。因此,BCH码的生成多项式为:
g(x)=lcm(f1(x),⋯,fd−1(x))g(x) = lcm(f_1(x),\cdots,f_{d-1}(x)) g(x)=lcm(f1(x),⋯,fd−1(x))
这里fj(x)f_j(x)fj(x)是wjw^jwj的极小多项式(以所有共轭元为单根)。如果www是GF(qm)GF(q^m)GF(qm)的本原根,那么n=qm−1n=q^m-1n=qm−1,此时叫做本原BCH码。
Reed-Muller Code
定义
对于整数jjj,将它写作j=j0+j12+⋯+jm−12m−1j=j_0+j_{1}2+\cdots+j_{m-1}2^{m-1}j=j0+j12+⋯+jm−12m−1(radix-2 representation),定义二进制重量(radix-2 weight)为
w2(j)=j0+j1+⋯+jm−1w_2(j) = j_0+j_1+\cdots+j_{m-1} w2(j)=j0+j1+⋯+jm−1
一个长度为n=2m−1n=2^m-1n=2m−1的rrr阶(order)的循环RM码C\mathscr CC,是定义集为A={wj:0<w2(j)<m−r}A=\{w^j: 0 < w_2(j) < m-r\}A={wj:0<w2(j)<m−r}的二元循环码(binary cyclic code)。
构造
由于d=2m−r−1d=2^{m-r}-1d=2m−r−1的二进制表示就是m−rm-rm−r比特的全幺串,因此∀j=1,⋯,d−1,w2(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,w2,⋯,wd−1}\{w,w^{2},\cdots,w^{d-1}\}{w,w2,⋯,wd−1}是RM码的定义集的子集。但同时,这也是设计距离为ddd的BCH码的定义集。所以,rrr阶循环RM码是设计距离为d=2m−r−1d=2^{m-r}-1d=2m−r−1的BCH码的子空间。
易知,长度为n=2m−1n=2^m-1n=2m−1的rrr阶循环RM码的极小距离满足dmin≥2m−r−1d_{min} \ge 2^{m-r}-1dmin≥2m−r−1
构造方法:
RM码是BCH码的子码,因此拥有较低的码率,在实际中用处不大。但它多余的零元使得其解码更容易。
总结
以上是生活随笔为你收集整理的基于NTT的循环码:RS码、BCH码、RM码的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: k2p拆机ttl刷breed_【1.10
- 下一篇: MFC——SetTimer函数的用法