9.5 循环码
9.5.1 循环码的概念
循环性是指任意码组循环移位后仍然是该编码中的一个码组
多项式表示法
一般情况
若(an−1an−2...a0)(a_{n-1}a_{n-2}...a_0)(an−1an−2...a0)是循环码的一个码组,则循环移位后的码组:
(an−2an−3...a0an−1)(a_{n-2}a_{n-3}...a_0a_{n-1})(an−2an−3...a0an−1)
(an−3an−4...an−1an−2)(a_{n-3}a_{n-4}...a_{n-1}a_{n-2})(an−3an−4...an−1an−2)
… …
(a0an−1...a2a1)(a_{0}a_{n-1}...a_2a_1)(a0an−1...a2a1)仍然是该编码中的码组
- 多项式表示法
一个长度为nnn的码组(an−1an−2...a0)(a_{n-1}a_{n-2}...a_0)(an−1an−2...a0)可以表示成
T(x)=an−1xn−1+an−2xn−2+...+a1x+a0T(x)=a_{n-1}x^{n-1}+a_{n-2}x^{n-2}+...+a_1x+a_0T(x)=an−1xn−1+an−2xn−2+...+a1x+a0
xxx的值没有任何意义,仅用它的幂代表 码元的位置
【例】码组1100101可以表示为
T(x)=1⋅x6+1⋅x5+0⋅x4+0⋅x3+1⋅x2+0⋅x+1=x6+x5+x2+1T(x)=1 \cdot x^6+1 \cdot x^5+0 \cdot x^4 +0 \cdot x^3 +1 \cdot x^2 +0 \cdot x +1= x^6 + x^5 + x^2 +1T(x)=1⋅x6+1⋅x5+0⋅x4+0⋅x3+1⋅x2+0⋅x+1=x6+x5+x2+1
9.5.2 循环码的运算
9.5.2.1 整数的按模运算
在整数运算中,有模nnn运算。
若一个整数mmm可以表示为
mn=Q+pn\frac{m}{n}=Q+\frac{p}{n}nm=Q+np
式中,QQQ为整数,则在模nnn运算下,有
m≡p(模n)m \equiv p (\text{模}n)m≡p(模n)
在模nnn运算下,一个整数mmm等于它被nnn除得所得的余数
9.5.2.2 码多项式的按模运算
若任意一个多项式F(x)F(x)F(x)被一个nnn次多项式N(x)N(x)N(x)除,得到商式Q(x)Q(x)Q(x)和一个次数小于nnn的余式R(x)R(x)R(x),即
F(x)=N(x)Q(x)+R(x)F(x)=N(x)Q(x)+R(x)F(x)=N(x)Q(x)+R(x)
则在按模N(x)N(x)N(x)运算下,有
F(x)≡R(x)(模N(x))F(x) \equiv R(x) (\text{模}N(x))F(x)≡R(x)(模N(x))
【例】x3x^3x3被(x3+1)(x^3+1)(x3+1)除,得到余项即
x3≡1(模(x3+1))x^3 \equiv1(\text{模}(x^3+1))x3≡1(模(x3+1))
【例】x4+x2+1≡x2+x+1(模(x3+1))x^4+x^2+1 \equiv x^2+x+1(\text{模}(x^3+1))x4+x2+1≡x2+x+1(模(x3+1))
9.5.2.3 循环码的数学表示法
【定理】在循环码中,设T(x)T(x)T(x)是一个长度为nnn的码组,若
xi⋅T(x)≡T’(x)x^i \cdot T(x) \equiv T’(x)xi⋅T(x)≡T’(x)
则T’(x)T’(x)T’(x)也是该编码中的一个码组
【例】一循环码为1100101,即
T(x)=x6+x5+x2+1T(x)=x^6+x^5+x^2+1T(x)=x6+x5+x2+1
若给定i=3i=3i=3,则有
x3⋅T(x)=x9+x8+x5+x3≡x5+x3+x2+x(模(x7+1))x^3 \cdot T(x)=x^9+x^8+x^5+x^3 \equiv x^5+x^3+x^2+x(\text{模}(x^7+1))x3⋅T(x)=x9+x8+x5+x3≡x5+x3+x2+x(模(x7+1))
上式对应的码组为0101110,它正是T(x)T(x)T(x)向左移3位的结果
【结论】一个长为nnn的循环码必定为按(xn+1)(x^n+1)(xn+1)运算的一个余式
9.5.2.4 循环码的生成
有了生成矩阵GGG,就可以由kkk个信息位得出整个码组:
【例】A=[a6a5a4a3a2a1a0]=[a6a5a4a3]GA=[a_6a_5a_4a_3a_2a_1a_0]=[a_6a_5a_4a_3]GA=[a6a5a4a3a2a1a0]=[a6a5a4a3]G
G=[IkQ]=[1000∣1110100∣1100010∣1010001∣011]
G=
[I_kQ]=
\begin{bmatrix}
1&0&0&0&|&1&1&1\\
0&1&0&0&|&1&1&0\\
0&0&1&0&|&1&0&1\\
0&0&0&1&|&0&1&1
\end{bmatrix}
G=[IkQ]=⎣⎢⎢⎡1000010000100001∣∣∣∣111011011011⎦⎥⎥⎤
生成矩阵GGG的每一行都是一个码组
-
若能找到kkk个已知码组,就能构成矩阵GGG。如前所述,这kkk个已知码组必须是线性不相关的
-
在循环码中,一个(n,k)(n,k)(n,k)码有2k2^k2k个不同的码组。若用g(x)g(x)g(x)表示其中前(k−1)(k-1)(k−1)位皆为“0”的码组,则g(x),xg(x),x2g(x),...,xk−1g(x)g(x),xg(x),x^2g(x),...,x^{k-1}g(x)g(x),xg(x),x2g(x),...,xk−1g(x)都是码组,而且这kkk个码组是线性无关的。因此它们可以用来构成此循环码的生成矩阵GGG
-
在循环码中除全“0”码组外,再没有连续kkk均为“0”的码组,即连0的长度最多只能有k−1k-1k−1位。否则,在经过若干次循环移位后将得到kkk位信息位全“0”,但监督位不全位“0”的一个码组。这在线性码中显然是不可能的
-
g(x)g(x)g(x)必须是一个常数项不为“0”的(n−k)(n-k)(n−k)次多项式,而且这个g(x)g(x)g(x)还是这种(n,k)(n,k)(n,k)码中次数为(n−k)(n-k)(n−k)的惟一一个多项式
- 因为如果有两个,则由码的封闭性,把这两个相加也应该是一个码组,且此码组多项式的次数将小于(n−k)(n-k)(n−k),即连续“0”的个数多于(k−1)(k-1)(k−1)。显然,这时与前面的结论矛盾的
-
称这唯一的(n−k)(n-k)(n−k)次多项式g(x)g(x)g(x)为码的生成多项式
-
一旦确定了g(x)g(x)g(x),则整个(n,k)(n,k)(n,k)循环码就被确定
-
循环码的生成矩阵GGG可以写成
G(x)=[xk−1g(x)xk−2g(x)...xg(x)g(x)]G(x)=\begin{bmatrix}x^{k-1}g(x)\\x^{k-2}g(x)\\...\\xg(x)\\g(x)\end{bmatrix} G(x)=⎣⎢⎢⎢⎢⎡xk−1g(x)xk−2g(x)...xg(x)g(x)⎦⎥⎥⎥⎥⎤ -
g(x)g(x)g(x)为码的生成多项式
-
常数项不为“0”的(n−k)=r(n-k)=r(n−k)=r次多项式
-
前面(k−1)(k-1)(k−1)个“0”
【例】一个(7,3)(7,3)(7,3)循环码,n=7,k=3,n−k=4n=7,k=3,n-k=4n=7,k=3,n−k=4,其中唯一的一个(n−k)=4(n-k)=4(n−k)=4次码多项式代表的码组式第二码组0010111,与它对应的码多项式,即生成多项式,为
g(x)=x4+x2+x+1g(x)=x^4+x^2+x+1g(x)=x4+x2+x+1
将此g(x)g(x)g(x)代入矩阵,得到
G(x)=[x2g(x)xg(x)g(x)]G(x)=\begin{bmatrix} x^2g(x)\\xg(x)\\g(x)\end{bmatrix}G(x)=⎣⎡x2g(x)xg(x)g(x)⎦⎤或G=[101110001011100010111]G=\begin{bmatrix} 1011100\\0101110\\0010111\end{bmatrix}G=⎣⎡101110001011100010111⎦⎤
循环码的生成多项式对应码组的重量就是该循环码的d0d_0d0
若不符合G=[IkQ]G=[I_kQ]G=[IkQ]形式,则不是典型生成矩阵。需要经过线性变换,得到典型阵
-
-
循环码组的多项式表示时T(x)T(x)T(x)
T(x)=[a6a5a4]G(x)=[a6a5a4][x2g(x)xg(x)g(x)]=a6x2g(x)+a5xg(x)+a4g(x)T(x)=[a_6a_5a_4]G(x)=[a_6a_5a_4] \begin{bmatrix} x^2g(x)\\ xg(x)\\ g(x) \end{bmatrix} =a_6x^2g(x)+a_5xg(x)+a_4g(x)T(x)=[a6a5a4]G(x)=[a6a5a4]⎣⎡x2g(x)xg(x)g(x)⎦⎤=a6x2g(x)+a5xg(x)+a4g(x)
所有码多项式T(x)T(x)T(x)都能够被g(x)g(x)g(x)整除,而且在任意一个次数不大于(k−1)(k-1)(k−1)的多项式乘g(x)g(x)g(x)都是码多项式
9.2.5.5 寻求码生成多项式
因为任意一个循环码T(x)T(x)T(x)都是g(x)g(x)g(x)的倍式,故它可以写成
T(x)=h(x)⋅g(x)T(x)=h(x) \cdot g(x)T(x)=h(x)⋅g(x)
而生成多项式g(x)g(x)g(x)本身也是一个码组,即有
T’(x)=g(x)T’(x)=g(x)T’(x)=g(x)
由于码组T’(x)T’(x)T’(x)是一个(n−k)(n-k)(n−k)次多项式,故xkT’(x)x^kT’(x)xkT’(x)是一个nnn次多项式。由
xi⋅T(x)≡T’(s)x^i \cdot T(x) \equiv T’(s)xi⋅T(x)≡T’(s)
可知,xkT’(x)x^kT’(x)xkT’(x)在模xn+1x^n+1xn+1运算下也是一个码组,所以有
xkT’(x)xn+1=Q(x)+T(x)xn+1\frac{x^kT’(x)}{x^n+1}=Q(x)+\frac{T(x)}{x^n+1}xn+1xkT’(x)=Q(x)+xn+1T(x)
上式左端分子和分母都是nnn次多项式,故相除的商Q(x)=1Q(x)=1Q(x)=1。因此可以写成
xkT’(x)=(xn+1)+T(x)x^kT’(x)=(x^n+1)+T(x)xkT’(x)=(xn+1)+T(x)
将T(x)=h(x)⋅g(x)T(x)=h(x) \cdot g(x)T(x)=h(x)⋅g(x)和T’(x)=g(x)T’(x)=g(x)T’(x)=g(x)代入得到
xn+1=g(x)[xk+h(x)]x^n+1=g(x)[x^k+h(x)]xn+1=g(x)[xk+h(x)]
生成多项式g(x)g(x)g(x)应该是(xn+1)(x^n+1)(xn+1)的一个因子
9.5.3 循环码的编码方法
- 根据给定的(n,k)(n,k)(n,k)值选定生成多项式g(x)g(x)g(x),即从(xn+1)(x^n+1)(xn+1)的因式中选一(n−k)(n-k)(n−k)次多项式作为g(x)g(x)g(x)
- 设待编码的kkk位信息多项式为m(x)m(x)m(x),用xn−kx^{n-k}xn−k乘m(x)m(x)m(x):这一运算实际上是在信息码后附加上(n−k)(n-k)(n−k)个”0”
- 用g(x)g(x)g(x)除xn−km(k)x_{n-k}m(k)xn−km(k),得到商Q(x)Q(x)Q(x)和余式r(x)r(x)r(x),既有
xn−km(x)g(x)=Q(x)+r(x)g(x)\frac{x_{n-k}m(x)}{g(x)}=Q(x)+\frac{r(x)}{g(x)}g(x)xn−km(x)=Q(x)+g(x)r(x)
【例】信息码为110,若选定g(x)=x4+x2+x+1g(x)=x^4+x^2+x+1g(x)=x4+x2+x+1,则有(多项式长除)
多项式为m(x)=x2+xm(x)=x^2+xm(x)=x2+x。当n−k=7−3=4n-k=7-3=4n−k=7−3=4时,xn−km(x)=x4(x2+x)=x6+x5x_{n-k}m(x)=x^4(x^2+x)=x^6+x^5xn−km(x)=x4(x2+x)=x6+x5,它表示码组1100000
xn−km(x)g(x)=x6+x5x4+x2+x+1=(x2+x+1+x2+1x4+x2+x+1)\frac{x^{n-k}m(x)}{g(x)}=\frac{x^6+x^5}{x^4+x^2+x+1}=(x^2+x+1+\frac{x^2+1}{x^4+x^2+x+1})g(x)xn−km(x)=x4+x2+x+1x6+x5=(x2+x+1+x4+x2+x+1x2+1)
等效:
110000010111=111+10110111\frac{1100000}{10111}=111+\frac{101}{10111}101111100000=111+10111101
整理得
Q(x)g(x)=xn−km(x)+r(x)=T(x)Q(x)g(x)=x^{n-k}m(x)+r(x)=T(x)Q(x)g(x)=xn−km(x)+r(x)=T(x)
T(x)=xn−km(x)+r(x)=1100000+101=1100101T(x)=x^{n-k}m(x)+r(x)=1100000+101=1100101T(x)=xn−km(x)+r(x)=1100000+101=1100101 - 电路:(7,4)(7,4)(7,4)码的编码器包含四级移存器,分别用aaa、bbb、ccc、ddd表示,一个双刀双掷开关SSS。当信息位输入时,开关向下,输入信码一方面送入除法器进行运算,另一方面直接输出。输入kkk为信息全部进入除法器后,开关转向上,此时输出端接到移存器,将移存器中存储的除法余项依次取出,同时切断反馈线,并从左到右逐次清零
9.5.4 循环码的解码方法
- 在检错时:当接受码组没有错码时,接收码组R(x)R(x)R(x)必定能被g(x)g(x)g(x)整除即
R(x)g(x)=Q(x)+r(x)g(x)\frac{R(x)}{g(x)}=Q(x)+\frac{r(x)}{g(x)}g(x)R(x)=Q(x)+g(x)r(x)
中余项r(x)r(x)r(x)应为零;否则,有误码 - 在纠错时:
- 用生成多项式g(x)g(x)g(x)除接收码组R(x)R(x)R(x),得出余式r(x)r(x)r(x)
- 按照余式r(x)r(x)r(x),用查表的方法或计算方法得出错误图样E(x)E(x)E(x)
- 从R(x)R(x)R(x)中减去E(x)E(x)E(x),便得到已纠正错码的原发送码组T(x)T(x)T(x)