更新时间:2023-05-28 16:27
BCH码是一类重要的纠错码,它把信源待发的信息序列按固定的κ位一组划分成消息组,再将每一消息组独立变换成长为n(n>κ)的二进制数字组,称为码字。如果消息组的数目为M(显然M>=2),由此所获得的M个码字的全体便称为码长为n、信息数目为M的分组码,记为n,M。把消息组变换成码字的过程称为编码,其逆过程称为译码。
线性分组码是指[n,M]分组码中的M个码字之间具有一定的线性约束关系,即这些码字总体构成了n维线性空间的一个κ维子空间。称此κ维子空间为(n,κ)线性分组码,n为码长,κ为信息位。此处M=2。
非线性分组码[n,M]是指M个码字之间不存在线性约束关系的分组码。d为M个码字之间的最小距离。非线性分组码常记为[n,M,d]。非线性分组码的优点是:对于给定的最小距离d,可以获得最大可能的码字数目。非线性分组码的编码和译码因码类不同而异。虽然预料非线性分组码会比线性分组码具有更好的特性,但在理论上和实用上尚缺乏深入研究(见非线性码)。
用Vn表示GF(2)域的n维线性空间,Vκ是Vn的κ维子空间,表示一个(n,κ)线性分组码。Ei=(vi1,vi2…,vin)是代表Vκ的一组基底(i=1,2,…,κ)。以这组基底构成的矩阵
称为该(n,κ)线性码的生成矩阵。对于给定的消息组m=(m1,m2,…,mκ),按生成矩阵G,m被编为mG=m1E1+m2E2+…+mκEκ
这就是线性分组码的编码规则。若
之秩为n-κ并且满足GH=0,仅当=(v1,v2,…,vn)∈n满足H=0时,才为κ中的码字。称H为(n,κ)线性分组码κ的均等校验矩阵,称H为矢量的伴随式。假设v是发送的码矢量,在接收端获得一个失真的矢量r=v+E,式中E=(e1,e2,…,en)称为错误型。由此rH=(v+e)H=eH
线性码的译码原则便以此为基础。
这是最早提出的一类线性分组码,已广泛应用于计算机和通信设备。它是由R.W.汉明于1950年提出的。若码的均等校验矩阵H由2-1个、按任一次序排列且彼此相异的二进制r维列矢量构成。这样得到的线性分组码称为汉明码,其分组长为n=2-1,信息位为κ=n-r=2-1-r,即为(2-1,2-1-r)码。例如,以矩阵
为均等校验矩阵的线性分组码便为(7,4)汉明码。汉明码的译码十分简单。例如, 假定=(1001100)为发送的码字,其第3位有错,即接收矢量为r=(1011100)。于是
恰为矩阵H的第 3 列,因而判定原来发送的码字为=(1001100)。这种译码方式是一般性的。如果接收矢量r在第i位有错,则其伴随式Hr刚好为矩阵H的第i列。汉明码是可以纠正单个错误的线性分组码。
具有某种循环特性的线性分组码,如果(n,κ)线性分组码Vκ具有如下的性质:对于每一个=(ɑ0,ɑ1,…,)∈Vn,只要∈Vκ,其循环移位()亦属于Vκ,则称Vκ为循环码。循环码的优点在于其编码和译码手续比一般线性码简单,因而易于在设备上实现。使Vn中的每一个矢量=(ɑ0,ɑ1,…,),对应于域GF(2)上的多项式ɑ(x)=ɑ0+ɑ1x+…+x。于是Vn中的全体n维矢量便与上述多项式之间建立了一一对应的关系。基于这种对应,使Vn中除了线性运算而外,还建立了矢量之间的乘法运算。A=(ɑ0,ɑ1,…,)与B=(b0,b1,…,)的乘积ab可视为ɑ(x)b(x)[mod(x-1)]所对应的矢量。因此,一个(n,κ)循环码的生成矩阵及均等校验矩阵可分别由生成多项式及均等校验多项式h(x)所代替,从而简化了编码及译码运算。
它是一类重要的循环码,能纠正多个错误。假设m是满足模n(modn)的最小正整数,β是域GF(2)的n次单位原根,作循环码的生成多项式g(x),以d0-1个接续的元素为根,其中m0,d0均为正整数,且d0≥2。于是
其中mj(x)代表的最小多项式。由这个g(x)所生成的,分组长为n的循环码称为BCH码。它由R.C.Bose,D.K.Ray-Chaudhuri及A.Hocquenghem三人研究而得名。BCH码的主要数量指标是:码长n,首元指数m0,设计距离d0,信息位数(表示多项式g(x)的次数)。BCH码的重要特性在于:设计距离为d0的BCH码,其最小距离至少为d0,从而可至少纠正(d0-1)/2个独立错误。BCH码译码的第一步是计算伴随式。假设 为发送码矢量,为接收矢量,而E=(E0,E1,…,En-1)为错误矢量,或记为错误多项式。于是伴随矢量之诸S=(S1,S2,…,S2t)分量Sκ由
决定(κ=1,2,…2t;为简便计,设m0=1,d0=2t+1)。假设有e个错误出现(1≤e≤t),则对应于e个错误的Ei厵0。如果E的第j个(从左至右)非零分量是Ei,则称Xj=β为这个错误Ei的错位,而称Yj=Ei为这个错误的错值。称 为错位多项式。BCH码译码的关键是由诸sκ(κ=1,2,…,2t)求出(z)。这可用著名的伯利坎普-梅西迭代算法来完成。这种算法相当于线性移位寄存器(LFDR寄存器)的综合问题。最后一步是求出(z)的全部根,可用钱天闻搜索算法完成,从而可以定出接收矢量r的全部错位。
BCH码基本原理
BCH码是一种有限域中的线性分组码,具有纠正多个随机错误的能力,通常用于通信和存储领域中的纠错编码。BCH码定义如下:给定任意一个有限域GF(q)及其扩展域GF(q^m),其中q是素数或素数的幂,m为正整数。对于任意一个码元取自扩展域GF(q^m)的循环码(n,k),其中n=2^m-1,其生成多项式g(x)具有2t个连续的根{a^1,a^2,a^,...,a^(2t-1),a^(2t)},则由生成多项式g(x)编码产生的循环码称为q进制的BCH码,记为(n,k,t)。当码长n=2^m-1,称为本原BCH码,否则称为非本原BCH码。
最常用的BCH码是二进制的BCH码。二进制BCH码的所有码元都是由0和1构成,便于硬件电路的实现。如无说明,本文以下讨论的BCH码都是二进制BCH码。二进制本原BCH码具有以下重要参数:
BCH码的生成多项式是由GF(q^m)的2t个最小多项式最小公倍式的乘积,纠错能力为t的BCH码生成多项式为g(x)=LCM{m1(x),m2(x),...,m2t-1(x),m2t(x)},其中LCM表示最小公倍式,m(x)为最小多项式。
由多项式理论知道,如果有限域GF(2^m)中的元素a^i是m次即约多项式mi(x)的根,则(a^i)^2,(a^i)^4,(a^i)^8,...也是mi(x)的根,(a^i)^2,(a^i)^4,(a^i)^8,...称为共轭根系。如果两个根共轭,则它们具有相同的最小多项式。因此生成多项式g(x)=LCM{m1(x),m2(x),...,m2t-1(x),m2t(x)}=m1(x)*m3(x)*...*m2t-1(x)通过以上步骤就可以求出BCH码的生成多项式。得到生成多项式就可以对信息进行编码。
BCH码编码原理
将未编码的k位数据记为多项式:
m(x)=m0+m1*x^1+m2*x^2+...+mk-1*x^k-1;其中mi属于{0,1}
将生成多项式记为:
g(x)=g0+g1*x1+g2*x^2+...+gr*x^r,其中r=m*t,校验位记为r(x),则
r(x)=x^r*m(x) mod g(x)
编码后的BCH码字多项式可记为:
C(x)=x^r*m(x)+x^r*m(x) mod g(x)
BCH编码实现的关键是通过除法电路得到校验位多项式。编码的过程可总结为:
这是一种重要的线性分组码,它不仅包括常见的诸如本原BCH码等大量的循环码类,还包括相当多的非循环线性分组码类,并且后一种码具有良好的渐近特性。戈帕码的理论实质在于将每一个码矢量与一个有理分式相对应。q是某一个素数幂,g(z)是域GF(q)上的任意多项式,L表示域GF(q)中所有不为g(z)之根的元素所成之集合,|L|代表L中元素的数目。于是存在一个以GF(q)为符号域,以GF(q)为位置域的线性分组码。码长为|L|,它的各码元用L中的元素来标志。这种码可定义为满足条件
的一切GF(q)上的全体|L|维矢量的集合,式中 这种码称为戈帕码,称g(z)为戈帕多项式。
例如,q=2,m=2,g(z)=z+α,α是域GF(z)上的本原元素 α+α+1=0 α3=1
则 于是 可验证,(1,1,1)即为这一戈帕码的码字。戈帕码也有类似于BCH码的译码方法。 自50年代分组码的理论获得发展以来,分组码在数字通信系统和数据存储系统中已被广泛应用。由于大规模和超大规模集成电路的迅速发展,人们开始从易于实现的循环码理论研究中解脱出来,更重视研究性能良好的非循环线性分组码和非线性分组码。人们在分组码研究中又引进了频谱方法,这一研究方向受到了较多的注意。 里德-索洛蒙码 这是一种特殊的非二进制BCH码。对于任意选取的正整数s,可构造一个相应的码长为n=q-1的q进制BCH码,其中码元符号取自有限域GF(q),其中q为某一素数的幂。当s=1,q>2时所建立的码长为n=q-1的q进制BCH码便称为里德-索洛蒙码,简称为RS码。当q=2(m>1),码元符号取自域GF(2)的二进制RS码可用来纠正成区间出现的突发错误。这种码在短波信道中特别有用。