基于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)。
一些性质:
- 可加(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(i−l))⟺(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)modxn−1⟺Ej=FjGj
- 零点(Zero):v(wj)=0⟺Vj=0v(w^j)=0 \iff V_j=0v(wj)=0⟺Vj=0
- 抽取(Decimation):(vbi)⟺(VBj),Bb≡1modn(v_{bi}) \iff (V_{Bj}),\, Bb \equiv 1 \mod n(vbi)⟺(VBj),Bb≡1modn
- 有限长度序列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=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)。
时域编码和频域编码
循环码有两种编码方式,
- 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-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)。
构造方法:
- 确定 n,qn,qn,q 使得n∣q−1n|q-1n∣q−1,计算GF(q)GF(q)GF(q)中的nnn阶单位根www(如果n=q−1n=q-1n=q−1,那么叫做本原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)=(x−wj0)(x−wj0+1)⋯(x−wj0+2t−1)生成的(n,n−2t,2t+1)(n,n-2t,2t+1)(n,n−2t,2t+1)RS码
- 若使用频域编码器,由于n∣q−1n|q-1n∣q−1使得时域频域的有限域都是GF(q)GF(q)GF(q),因此我们只需设置Vj0=⋯=Vj0+2t−1=0V_{j_0}=\cdots=V_{j_0+2t-1}=0Vj0=⋯=Vj0+2t−1=0。其他的n−2tn-2tn−2t个位置的频谱都作为数据符号(q≡1modnq \equiv 1 \mod nq≡1modn,共轭类的大小都为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-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。
构造方法:
- 确定 n,qn,qn,q 使得n∣qm−1n|q^m-1n∣qm−1,然后将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 - 1d−1个连续频谱分量作为校验频率
- 将{j0,j0+1,⋯,j0+d−2}\{j_0,j_0+1,\cdots,j_0+d-2\}{j0,j0+1,⋯,j0+d−2}所在的共轭类对应的频谱值都置零
- 将剩余共轭类的代表jlj_ljl作为数据符号,有Cjl∈GF(qmjl)C_{j_l} \in GF(q^{m_{j_l}})Cjl∈GF(qmjl),这可视作长度为mjlm_{j_l}mjl的GF(q)GF(q)GF(q)上向量。其他的mjl−1m_{j_l}-1mjl−1个位置按照共轭约束,由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^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
构造方法:
- 确定 m,rm,rm,r ,令n=2m−1n=2^m-1n=2m−1,构造域GF(2m)GF(2^m)GF(2m),找到本原元www
- 寻找所有的满足0<w2(j)<m−r0 < w_2(j) < m-r0<w2(j)<m−r的mmm比特的正整数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码相关推荐
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- php 本地mysql 代码_基于本地数据库的 IP 地址查询 PHP 源码
* 纯真 IP 数据库查询 * * 参考资料: * - 纯真 IP 数据库 http://www.cz88.net/ip/ * - PHP 读取纯真IP地址数据库 http://ju.outofmem ...
- php广告任务网源码_THINKPHP仿我爱广告任务网|任务网站源码下载基于PHP+MYSQL的在线广告打码任务网站源码...
THINKPHP仿我爱广告任务网|任务网站源码下载基于PHP+MYSQL的在线广告打码任务网站源码 THINKPHP仿我爱广告任务网|任务网站源码下载是一款基于PHP+MYSQL开发制作的在线广告打码 ...
- 基于JAVA-超市会员积分管理系统-计算机毕业设计源码+系统+lw文档+部署
基于JAVA-超市会员积分管理系统-计算机毕业设计源码+系统+lw文档+部署 技术栈 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui.HTML. ...
- 【音乐检索】基于matlab音乐检索系统【含Matlab源码 435期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[音乐检索]基于matlab音乐检索系统[含Matlab源码 435期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏 ...
- C#高级编程——C#扩展方法+接口,定义统一的搜索接口,基于Unity(三)——图文详解加源码
C#高级编程--C#扩展方法+接口,定义统一的搜索接口,基于Unity(三)--图文详解加源码 前言
- 【图像修复】基于matlab损坏图像修复【含Matlab源码 731期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像修复]基于matlab损坏图像修复[含Matlab源码 731期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏 ...
- 基于JAVA中小型饭馆餐饮管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
基于JAVA中小型饭馆餐饮管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA中小型饭馆餐饮管理系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S ...
- 基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署
基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA第二课堂选课系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...
- 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java点播影院运营系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈: ...
最新文章
- VR规格表出来啦!Rift,Vive,PSVR,Acer和HP
- C++获取文件名、不带后缀的名字、后缀名
- MySQL的root用户修改普通用户密码
- 列举6个常见且实用的Web前端性能优化方法
- Xamarin 从零开始部署 iOS 上的 Walterlv.CloudKeyboard 应用
- python重启路由器_Python3控制路由器——使用requests重启极路由.py
- C++——已知a+b、 a+c、b+c、 a+b+c,求a、b、 c
- 更改Linux系统的Hostname的四种方式
- mysql-------流程控制结构
- rabbitmq-web-stomp 优化过程
- mysql中数据字典_MySQL8.0之数据字典
- 台式计算机开机不自检不起动,台式机开机一直自检的解决方法
- 列宽一字符等于多少厘米_excel表格行高和列宽各是多少毫米或厘米啊?
- pidgin qq_Pidgin入门:Skype的开源替代品
- Android 改变View的中心点
- 关于 Google play 上架的缺失 64 位版本问题
- java 随机生成英文名_java随机数Reandom(简单介绍)
- untrusted Developer You can allow using these apps in settings you can allow using these apps i
- 5-6 人生的不同阶段
- 关于峰均比的一些记录
热门文章
- php 轮播代码生成器,阿里巴巴国际站全屏轮播代码生成器 阿里国际站全屏轮播切换代码阿里巴巴全屏轮播怎么做? 一秒钟美工助手官方网站...
- linux i3 桌面,Linux安装i3wm平铺式窗口桌面
- ios12完美深色模式插件_让所有网站开启深色模式,试试这个浏览器插件
- 中兴机顶盒服务器地址大全,中兴机顶盒网络设置无线路由器教程
- 【axure手机原型】iOS应用设计要点总结
- vdbench(一)
- springboot集成quartz
- vmware10密钥
- PMP考试心得分享(已通过)
- 一键免费下载外文文献的方式