欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

基于NTT的循环码:RS码、BCH码、RM码

发布时间:2024/8/1 编程问答 102 豆豆
生活随笔 收集整理的这篇文章主要介绍了 基于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-1mn,nqm1,令w∈GF(qm)w \in GF(q^m)wGF(qm)满足wn=1w^n=1wn=1,即wwwnnn阶单位根。做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=0n1wijvi=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=0n1wijVj=nV(wi),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=1LΛjVkj,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,,Vn1F,我们将能够生成这个序列的最短线性递归式的长度叫做VVV线性复杂度(linear complexity)。

一些性质:

  • 可加(Additivity):λv+μv′⟺λV+μV′\lambda v+\mu v' \iff \lambda V + \mu V'λv+μvλV+μV
  • 调制(Modulation):(viwil)⟺(V(j+l))(v_i w^{il}) \iff (V_{(j+l)})(viwil)(V(j+l))
  • 转换(Translation):(v(i−l))⟺(Vjwjl)(v_{(i-l)}) \iff (V_j w^{jl})(v(il))(Vjwjl)
  • 卷积(Convolution):e(x)=f(x)g(x)modxn−1⟺Ej=FjGje(x) = f(x)g(x) \mod x^n-1 \iff E_j = F_j G_je(x)=f(x)g(x)modxn1Ej=FjGj
  • 零点(Zero):v(wj)=0⟺Vj=0v(w^j)=0 \iff V_j=0v(wj)=0Vj=0
  • 抽取(Decimation):(vbi)⟺(VBj),Bb≡1modn(v_{bi}) \iff (V_{Bj}),\, Bb \equiv 1 \mod n(vbi)(VBj),Bb1modn
  • 有限长度序列VVV的线性复杂度,等于做INTT后vvv的汉明重量。反之亦然。
  • 循环码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=AjGjC=NTT(c)。假设B={j1,⋯,jn−k}B=\{j_1,\cdots,j_{n-k}\}B={j1,,jnk}g(x)g(x)g(x)的零点wjw^jwj的指标,那么AjGj=0,∀j∈BA_jG_j=0,\forall j \in BAjGj=0,jB

    因此,循环码也可以被定义为:空间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)^nVGF(qm)n,且n∣qm−1n | q^m-1nqm1,令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 vGF(q)nVjq=V(qj),j=0,,n1
    我们对ZnZ_nZn中元素做划分,得到共轭类q−q-qary conjugacy classes):
    Bj={j,jq,jq2,⋯,jqmj−1}B_j = \{j,jq,jq^2,\cdots,jq^{m_j-1}\} Bj={j,jq,jq2,,jqmj1}
    其中mjm_jmj是使得jqmj≡jmodnjq^{m_j} \equiv j \mod njqmjjmodn的最小的正整数,它一定存在(gcd(n,q)=1gcd(n,q)=1gcd(n,q)=1)。我们说大小为mjm_jmj的共轭类BjB_jBjjjj代表。

    根据定义易知,Cjqmj−1q=CjC_{jq^{m_j-1}}^q = C_jCjqmj1q=Cj,于是
    (Cjqmj−1)q=Cjqmj=Cj(C_j^{q^{m_j-1}})^q = C_j^{q^{m_j}} = C_j (Cjqmj1)q=Cjqmj=Cj
    因此,由BjB_jBj指定的那些频谱值应落在扩域GF(qmj)GF(q^{m_j})GF(qmj)内。

    也就是说,如果一个向量V∈GF(qm)nV \in GF(q^m)^nVGF(qm)n对应的vvv落在GF(q)nGF(q)^nGF(q)n内部,那么向量VVV中由共轭类BjB_jBj所指定的那些分量都由频谱值Vj∈GF(qmj)V_j \in GF(q^{m_j})VjGF(qmj)所完全决定,而不能随意选取。这就叫做共轭约束(conjugacy constraints)。

    时域编码和频域编码

    循环码有两种编码方式,

  • time-domain encoder:在时域上,利用生成多项式g(x)g(x)g(x),使用系统编码方式或者非系统编码方式,详见循环码。
  • frequency-domain encoder:在频域上,将g(x)g(x)g(x)的所有零点{wi}I\{w^i\}_I{wi}I对应的位置{Ci}I\{C_i\}_I{Ci}I置零,作为校验符号。同时零点所在共轭类的位置也都置零。其他共轭类的代表元所指定位置作为数据符号,填入数据比特,而其他的位置要满足共轭约束条件。
  • Reed-Solomen Code

    定义

    gcd(n,q)=1gcd(n,q)=1gcd(n,q)=1,一个GF(q)GF(q)GF(q)上的长度为n∣q−1n|q-1nq1的RS码C\mathscr CC,定义为:空间GF(q)nGF(q)^nGF(q)n中那些做NTT变换后在特定的d−1d-1d1个连续分量为零的所有的向量,这个连续分量记做{j0,j0+1,⋯,j0+d−2}\{j_0,j_0+1,\cdots,j_0+d-2\}{j0,j0+1,,j0+d2}

    构造

    由于n∣q−1n|q-1nq1,因此一个码字c∈Cc \in \mathscr CcC做NTT变换后得到的CCC依然属于GF(q)GF(q)GF(q)。由于Cj=0⟺Cjwj=0C_j=0 \iff C_j w^j = 0Cj=0Cjwj=0,并且由于(c(i−1))⟺(Cjwj)(c_{(i-1)}) \iff (C_j w^{j})(c(i1))(Cjwj),因此RS码是循环码。由于Cj=0⟺c(wj)=0C_j=0 \iff c(w^j)=0Cj=0c(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)=(xwj0)(xwj0+1)(xwj0+d2)
    容易看出,deg⁡g=d−1=n−k\deg g = d-1 = n-kdegg=d1=nk。由于CCC包含d−1d-1d1个连续的零分量,利用调制将它们搬移到最高频且不影响码字的汉明重量。那么C(x)=∑j=0n−dCjxjC(x)=\sum_{j=0}^{n-d} C_j x^jC(x)=j=0ndCjxj至多有n−dn-dnd个不同的零点,于是INTT后得到的ccc至少有ddd个分量,即dmin≥d=n−k+1d_{min} \ge d = n-k+1dmind=nk+1

    Singleton Bound:对于(n,k)(n,k)(n,k)线性码,其最小距离满足dmin≤n−k+1d_{min} \le n-k+1dminnk+1

    于是
    dmin=n−k+1=dd_{min} = n-k+1 = d dmin=nk+1=d
    因此,RS码是极大距离可分码(maximum distance separable,MDS)。

    构造方法:

  • 确定 n,qn,qn,q 使得n∣q−1n|q-1nq1,计算GF(q)GF(q)GF(q)中的nnn阶单位根www(如果n=q−1n=q-1n=q1,那么叫做本原RS码
  • 根据需要纠错的数量ttt,计算d=2t+1d=2t+1d=2t+1,然后任意选取j0j_0j0(一般选取j0=1j_0=1j0=1)来确定使用哪些元素作为零点
  • 我们得到了由g(x)=(x−wj0)(x−wj0+1)⋯(x−wj0+2t−1)g(x)=(x-w^{j_0})(x-w^{j_0+1})\cdots(x-w^{j_0+2t-1})g(x)=(xwj0)(xwj0+1)(xwj0+2t1)生成的(n,n−2t,2t+1)(n,n-2t,2t+1)(n,n2t,2t+1)RS码
  • 若使用频域编码器,由于n∣q−1n|q-1nq1使得时域频域的有限域都是GF(q)GF(q)GF(q),因此我们只需设置Vj0=⋯=Vj0+2t−1=0V_{j_0}=\cdots=V_{j_0+2t-1}=0Vj0==Vj0+2t1=0。其他的n−2tn-2tn2t个位置的频谱都作为数据符号(q≡1modnq \equiv 1 \mod nq1modn,共轭类的大小都为mj=1m_j=1mj=1,不必考虑共轭约束)
  • 将数据a(x)a(x)a(x)的系数按某种顺序填入,做INTT得到码字c(x)c(x)c(x)
  • BCH Code

    定义

    gcd(n,q)=1gcd(n,q)=1gcd(n,q)=1,一个GF(q)GF(q)GF(q)上的长度为n∣qm−1n|q^m-1nqm1、设计距离为ddd的BCH码C\mathscr CC,定义为:空间GF(q)nGF(q)^nGF(q)n中那些做NTT变换后在特定的d−1d-1d1个连续分量为零的所有的向量。

    注意,这里是n∣qm−1n | q^m-1nqm1,因此做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-1nqm1,在GF(q)nGF(q)^nGF(q)n中汉明重量至多为d−1d-1d1的向量,如果它的频谱包含d−1d-1d1个连续的零分量,那么它就是零向量。这可以通过循环抽取来扩展,因为抽取不改变汉明重量。

    因此,设计距离为ddd的BCH码的最小距离dmind_{min}dmin至少和ddd一样大,并且往往有dmin>dd_{min}>ddmin>d

    构造方法:

  • 确定 n,qn,qn,q 使得n∣qm−1n|q^m-1nqm1,然后将ZnZ_nZn划分为若干共轭类Bj1,⋯,BjrB_{j_1},\cdots,B_{j_r}Bj1,,Bjr
  • 根据需要纠错的数量ttt,计算d=2t+1d=2t+1d=2t+1,然后选取某个j0j_0j0(一般选取j0=1j_0=1j0=1),将d−1d - 1d1个连续频谱分量作为校验频率
  • {j0,j0+1,⋯,j0+d−2}\{j_0,j_0+1,\cdots,j_0+d-2\}{j0,j0+1,,j0+d2}所在的共轭类对应的频谱值都置零
  • 将剩余共轭类的代表jlj_ljl作为数据符号,有Cjl∈GF(qmjl)C_{j_l} \in GF(q^{m_{j_l}})CjlGF(qmjl),这可视作长度为mjlm_{j_l}mjlGF(q)GF(q)GF(q)上向量。其他的mjl−1m_{j_l}-1mjl1个位置按照共轭约束,由CjlC_{j_l}Cjl来生成
  • 假设作为数据符号的那些共轭类的总大小为k=∑lmjlk = \sum_l m_{j_l}k=lmjl,那么可以将GF(q)kGF(q)^kGF(q)k上的向量分块填充到那些数据符号上,因此我们得到了(n,k)(n,k)(n,k)BCH码
  • 最后,做INTT得到时域上的码字多项式
  • 观察到校验频率以及它们的共轭频率都被置零,而校验频率wjw^jwj的共轭类对应的频率为wjq,wjq2,⋯w^{jq},w^{jq^2},\cdotswjq,wjq2,,这些就是wjw^jwjGF(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),,fd1(x))
    这里fj(x)f_j(x)fj(x)wjw^jwj极小多项式(以所有共轭元为单根)。如果wwwGF(qm)GF(q^m)GF(qm)的本原根,那么n=qm−1n=q^m-1n=qm1,此时叫做本原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++jm12m1(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++jm1
    一个长度为n=2m−1n=2^m-1n=2m1rrr阶(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)<mr}的二元循环码(binary cyclic code)。

    构造

    由于d=2m−r−1d=2^{m-r}-1d=2mr1的二进制表示就是m−rm-rmr比特的全幺串,因此∀j=1,⋯,d−1,w2(j)≤m−r−1\forall j=1,\cdots,d-1,\, w_2(j)\le m-r-1j=1,,d1,w2(j)mr1,从而{w,w2,⋯,wd−1}\{w,w^{2},\cdots,w^{d-1}\}{w,w2,,wd1}是RM码的定义集的子集。但同时,这也是设计距离为ddd的BCH码的定义集。所以,rrr阶循环RM码是设计距离为d=2m−r−1d=2^{m-r}-1d=2mr1的BCH码的子空间。

    易知,长度为n=2m−1n=2^m-1n=2m1rrr阶循环RM码的极小距离满足dmin≥2m−r−1d_{min} \ge 2^{m-r}-1dmin2mr1

    构造方法:

  • 确定 m,rm,rm,r ,令n=2m−1n=2^m-1n=2m1,构造域GF(2m)GF(2^m)GF(2m),找到本原元www
  • 寻找所有的满足0<w2(j)<m−r0 < w_2(j) < m-r0<w2(j)<mrmmm比特的正整数jjj,那么其生成多项式为g(x)=LCM(fj(x))g(x) = LCM(f_j(x))g(x)=LCM(fj(x)),这里fj(x)f_j(x)fj(x)wjw^jwj的极小多项式
  • 将频域上的jjj分量作为校验频率,同时将其共轭类所对应的频谱值置零。剩余的共轭类的代表作为数据符号,其他位置要满足共轭约束。
  • RM码是BCH码的子码,因此拥有较低的码率,在实际中用处不大。但它多余的零元使得其解码更容易。

    总结

    以上是生活随笔为你收集整理的基于NTT的循环码:RS码、BCH码、RM码的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。