2、循环码2.1循环码的基本原理1.定义循环码是满足循环特性的线性分组码,是线性分组码的子类,之所以这样说是因为线性分组码要求所选择的码是线性的,循环码则是在线性分组码的基础之上进一步要求所选择的码具有循环性。假设C是一个(n,k)线性码,如果C中任意一个码字经任意循环移位之后仍然是C中的码字,那么此码是一个循环码。循环码具有规则的代数结构,且是自封闭的,因此用多项式来描述更方便。长度为n的循环码可用一个n-1次多项式来描述,此多项式称为码多项式,表示如下:(1)左移i位后的码多项式为(2)码多项式与循环移位后的多项式之间的关系为)1()(cxC(x)1)1(021121-nnnnnnxcxCxcxcxcx(3)也即是)1mod()()()1(nxxxCxC(4)以此类推,可以得到)1mod()()()(niixxCxxC(5)2.循环码的性质(1)GF(q)上的(n,k)循环码中,存在唯一的一个n-k次首一多项式0111)(gxgxgxxgknknkn,每一个码多项式)(xC都是)(xg的倍式,即循环码的码多项式)(xC中次数最低且其常数项为1的码多项式有且仅有一个,为码的生成多项式,记做)(xg。循环码C中的每个码多项式)(xC都可唯一表示成)()()(xgxmxC。(2))(,),(),(),(12xgxxgxxxgxgk都是生成多项式,他们的线性组合也是生成多项式。(3)GF(q)上(n,k)循环码的生成多项式)(xg一定是)1(nx的因子。(4)循环码的生成矩阵H和校验矩阵H的正交性可以用多项式表示为1)()(nxxhxg。因此,h(x)也是1nx的因子。(5)生成矩阵G中的每一行都是上一行经过循环移位的结果。3.生成矩阵和校验矩阵由上面内容中的性质(4),若g(x)的次数为n-k次以g(x)作为生成多项式组成的(n,k)循环码的k个码多项式)(,),(),(),(12xgxxgxxxgxgk一定是线性无关的,根据线性分组码的定义,这些码多项式构成循环码的生成矩阵)(xG0111201131210121121)()()()x(gxgxgxgxgxgxgxgxgxgxgxgxgxgxxgxGknknknknkknknnknkknknnknkk(6)则(n,k)循环码的生成矩阵G为0110120110000000ggggggggggggGknknnknknkn(7)定义0111)(hxhxhxhxhkkkk为(n,k)循环码的校验多项式,由1)()(nxxhxg可得到系数方程1,...,2,10000)(110nihghghghghgkknkniknii,(8)通过解方程,可得到(n,k)循环码的校验矩阵H为kkkhhhhhhhhhH10101000000000(9)可以验证0TGH(10)对于系统码形式的(n,k)循环码,假设码字C的前k位为系统信息位。假设信息多项式的第n-1次(1nx的系数)到第n-k次(knx的系数)的系数的信息位,其余为校验位,设信息多项式为012211)(uxuxuxuxukkkkk(11)校验多项式为012211)(rxrxrxrxrknknknkn(12)则有)(mod0)()()(xgxrxxmxCkn(13)即)(mod)()(xgxxmxrkn(14)而PIGk(15)即生成矩阵G的第i行(i=1,2,...,k)分别为信息序列中仅第i个信息元不为0的信息序列编码得到的码字,相应的信息多项式分别为1,,...,,21xxxkk,校验多项式为kixgxxxxrinkniki,...,2,1),(mod)((16)故生成矩阵多项式G(x)为))(mod())(mod())(mod()()()()x(22112211xgxxxgxxxgxxxrxxrxxrxGknknnnnnkknnn(17)设)(xri的系数序列为),,...,,(0,,2,1,_iiiknikniirrrrr,则系统循环码的生成矩阵为__2_10,1,2,1,0,21,22,21,20,11,12,11,11000010001kkkkknkknkknknknknrrIrrrrrrrrrrrrrG(18)相应的校验矩阵为1000100010,0,20,11,1,21,12,12,22,11,1,21,1__2_1kkknknknknkknknknTkTTrrrrrrkrrrrrIrrrH(19)2.2循环码的编码所谓编码,就是在已知信息位的条件下求出循环码的码组。首先,根据给定的(n,k)值选定生成多项式g(x),它是)1(nx的一个常数项不为0的阶次为(n-k)因子,再根据(6)式,由生成多项式得到循环码的生成矩阵。若已知输入信息码元为)(0121uuuukk,则相应的循环码多项式为)()()()()()()(0122110121xgxuxguxuxuxuxGuuuuxCkkkkkk(20)由式(20)可求得循环码各许用码组,且都为g(x)的倍式,由此式得到的并非系统码。在系统码中,码组的前k位为信息位,随后的(n-k)位为监督位。此时的码多项式为)()()()()(0110112211xgxurxrxuxuxuxuxrxxuxCknknknknkknkkn(21)其中,011)(rxrxrknkn为监督多项式,监督码元为)(01rrkn。由式(20)和(21)可知,)(mod)()()()(xgxxuxxuxCxrknkn(22)由式(22)知,系统码的构造只需将信息码多项式升(n-k)阶,再对g(x)做模运算,得到的余式r(x)为监督多项式。由以上的分析,先将系统码的编码步骤归纳如下:(1)先用knx乘以信息多项式u(x),即knxxu)(;(2)再用knxxu)(除以g(x),得到商式p(x)和余式r(x),即)()()()()(xgxrxpxgxuxkn(23)(3)最后得出码多项式)()()(xrxxuxCkn(24)2.3循环码的译码接收端译码包括检错和纠错。检错:循环码的任一许用码多项式C(x)都能被生成多项式g(x)整除,因此在接收端只需将接收到的码多项式)(_xc用生成多项式g(x)去除;如果余式为0,则传输过程中未发生错误。故可用余式是否为零来判断码组中是否出错;但是,也有例外,当一许用码错误成另一许用码时,错误将无法检测出来,这种错误称为不可检错误。纠错:为了能够纠错,要求每个可纠正的错误图样必须与一个特定余式有一一对应关系,这样才能从上述余式中唯一地确定其错误图样,从而纠正错码。因此,循环码的纠错译码可分为以下三步进行:(1)根据接收到的码)(_xc计算校正子(或称伴随式)多项式)(_xr;对于循环码来说,校正子多项式就是用接收到的码多项式)(_xc除以生成多项式g(x)得到的余式,即)(mod)()(__xgxcxr(2)由校正子多项式)(_xr确定错误图样e(x);(3)将错误图样e(x)与接收码多项式)(_xc相加,即可纠正错误恢复原发送码组。