S = a n − 1 ⊕ a n − 2 ⊕ . . . ⊕ a 0 S=a_{n-1} \oplus a_{n-2} \oplus ... \oplus a_0 S=an−1⊕an−2⊕...⊕a0中。 S S S只有两种取值:表示有错和无错,而不能进一步指明错码的位置
若此码组长度增加一位,则能增加一个监督关系式。这样就能得到两个校正子
两个校正子的可能取值有4种组合,即00,01,10,11,能表示4种不同的信息
若用其中一种组合表示无错码,则其他3种组合可以用于指明一位错码的3种不同位置,从而可以有纠错能力
当校正子可以指明的错码位数目等于或大于码组长度 n n n时,才能够纠正码组中任何一个位置上的错码,即要求
2 r − 1 ≥ n 2^r-1 \geq n 2r−1≥n或 2 r ≥ k + r + 1 2^r \geq k+r+1 2r≥k+r+1
【填空题】要求设计一个能够纠正1个错码的分组码 ( n , k ) (n,k) (n,k),设给定的码组中有4个信息位,即 k = 4 k=4 k=4,求 n n n的值
解:由 2 r − 1 ≥ n 2^r-1 \geq n 2r−1≥n或 2 r ≥ r + k + 1 2^r \geq r+k+1 2r≥r+k+1知,这时要求监督位数 r ≥ 3 r \geq 3 r≥3
若取 r = 3 r=3 r=3,则 n = k + r = 7 n=k+r=7 n=k+r=7
现在用 a 6 a 5 a 4 a 3 a 2 a 1 a 0 a_6a_5a_4a_3a_2a_1a_0 a6a5a4a3a2a1a0表示这7个码元,用 S 1 S 2 S 3 S_1S_2S_3 S1S2S3表示校正子,则这3个校正子恰好能够指明 2 3 − 1 = 7 2^3-1=7 23−1=7个错码的位置
若规定校正子和错码位置的关系如下表:
S 1 S 2 S 3 S_1S_2S_3 S1S2S3 | 错码位置 | S 1 S 2 S 3 S_1S_2S_3 S1S2S3 | 错码位置 |
---|---|---|---|
001 | a 0 a_0 a0 | 101 | a 4 a_4 a4 |
010 | a 1 a_1 a1 | 110 | a 5 a_5 a5 |
100 | a 2 a_2 a2 | 111 | a 6 a_6 a6 |
011 | a 3 a_3 a3 | 000 | 无错码 |
则仅当发生一个错码,且位置在 a 6 a_6 a6、 a 5 a_5 a5、 a 4 a_4 a4或 a 2 a_2 a2时,校正子 S 1 S_1 S1的值才等于1;否则 S 1 S_1 S1的值为零。这就移位着 a 6 a 5 a 4 a 2 a_6a_5a_4a_2 a6a5a4a2四个码元构成偶数监督关系:
S 1 = a 6 ⊕ a 5 ⊕ a 4 ⊕ a 2 S_1=a_6 \oplus a_5 \oplus a_4 \oplus a_2 S1=a6⊕a5⊕a4⊕a2
S 2 = a 6 ⊕ a 5 ⊕ a 3 ⊕ a 1 S_2=a_6 \oplus a_5 \oplus a_3 \oplus a_1 S2=a6⊕a5⊕a3⊕a1
S 3 = a 6 ⊕ a 4 ⊕ a 3 ⊕ a 0 S_3=a_6 \oplus a_4 \oplus a_3 \oplus a_0 S3=a6⊕a4⊕a3⊕a0
{ a 2 = a 6 ⊕ a 5 ⊕ a 4 a 1 = a 6 ⊕ a 5 ⊕ a 3 a 0 = a 6 ⊕ a 4 ⊕ a 3 \begin{cases} a_2=a_6 \oplus a_5 \oplus a_4\\ a_1=a_6 \oplus a_5 \oplus a_3\\ a_0=a_6 \oplus a_4 \oplus a_3 \end{cases} ⎩⎪⎨⎪⎧a2=a6⊕a5⊕a4a1=a6⊕a5⊕a3a0=a6⊕a4⊕a3
【掌握判断】若接受码组为0000011,则按上三式计算得到: S 1 = 0 , S 2 = 1 , S 3 = 1 S_1=0,S_2=1,S_3=1 S1=0,S2=1,S3=1。这样,由上表可知,错码位置在 a 3 → a_3 \to a3→ 0001011
汉明码是 ( 7 , 4 ) (7,4) (7,4)码,其最小码距 d 0 = 3 d_0=3 d0=3
则由 d 0 ≥ e + 1 d_0 \geq e+1 d0≥e+1和 d 0 ≥ 2 t + 1 d_0 \geq 2t+1 d0≥2t+1可知,此码能够检测2个错码,或纠正1个错码
【填空题】 ( 15 , 11 ) (15,11) (15,11)汉明码中的 r = 4 r=4 r=4,最小码距 d 0 = 4 d_0=4 d0=4
汉明码的码率
k n = 2 r − r − 1 2 r − 1 \frac{k}{n}=\frac{2^r-r-1}{2^r-1} nk=2r−12r−r−1
【结论】汉明码是一种可纠一位错的线性分组码,其码参数为 n = 2 r − 1 , k = n − r = 2 r − 1 − r , r ≥ 3 , d 0 = 3 n=2^r-1,k=n-r=2^r-1-r,r \geq3,d_0=3 n=2r−1,k=n−r=2r−1−r,r≥3,d0=3
完备码
【典型题】将 ( 7 , 4 ) (7,4) (7,4)汉明码的编码结果按行写入一个10行7列的存储器阵列,每行一个码字,共计10个码字,再按列读出后通过信道传输。若传输这10个码字时,信道中发生了连续15个错误,请问接受端解交织并译码后,能译对几个码字?
分析:本题按行输入,按列输出,连续15个错误,则应该是 15 = 10 + 5 15=10+5 15=10+5,其中有5行有2个错码,其他5行为1个错码。由于 ( 7 , 4 ) (7,4) (7,4)汉明码是可以纠1个错,因此可以纠正发生1个错码的5行,也就是能译对5个码字
分组码的一般原理
线性分组码是监督位和信息位满足一组线性方程的码,如前述 ( 7 , 4 ) (7,4) (7,4)码满足如下关系:
{ a 6 ⊕ a 5 ⊕ a 4 ⊕ a 2 = 0 a 6 ⊕ a 5 ⊕ a 3 ⊕ a 1 = 0 a 6 ⊕ a 4 ⊕ a 3 ⊕ a 0 = 0 \begin{cases} a_6 \oplus a_5 \oplus a_4 \oplus a_2=0\\ a_6 \oplus a_5 \oplus a_3 \oplus a_1=0\\ a_6 \oplus a_4 \oplus a_3 \oplus a_0=0 \end{cases} ⎩⎪⎨⎪⎧a6⊕a5⊕a4⊕a2=0a6⊕a5⊕a3⊕a1=0a6⊕a4⊕a3⊕a0=0
可以改写为
{ 1 ⋅ a 6 + 1 ⋅ a 5 + 1 ⋅ a 4 + 0 ⋅ a 3 + 1 ⋅ a 2 + 0 ⋅ a 1 + 0 ⋅ a 0 = 0 1 ⋅ a 6 + 1 ⋅ a 5 + 0 ⋅ a 4 + 1 ⋅ a 3 + 0 ⋅ a 2 + 1 ⋅ a 1 + 0 ⋅ a 0 = 0 1 ⋅ a 6 + 0 ⋅ a 5 + 1 ⋅ a 4 + 1 ⋅ a 3 + 0 ⋅ a 2 + 0 ⋅ a 1 + 1 ⋅ a 0 = 0 \begin{cases} 1 \cdot a_6 + 1 \cdot a_5 +1 \cdot a_4 + 0 \cdot a_3 +1 \cdot a_2 + 0 \cdot a_1 +0 \cdot a_0=0\\ 1 \cdot a_6 + 1 \cdot a_5 +0 \cdot a_4 + 1 \cdot a_3 +0 \cdot a_2 + 1 \cdot a_1+0 \cdot a_0=0\\ 1 \cdot a_6 + 0 \cdot a_5 +1 \cdot a_4 + 1 \cdot a_3 +0 \cdot a_2 + 0 \cdot a_1+1 \cdot a_0=0\\ \end{cases} ⎩⎪⎨⎪⎧1⋅a6+1⋅a5+1⋅a4+0⋅a3+1⋅a2+0⋅a1+0⋅a0=01⋅a6+1⋅a5+0⋅a4+1⋅a3+0⋅a2+1⋅a1+0⋅a0=01⋅a6+0⋅a5+1⋅a4+1⋅a3+0⋅a2+0⋅a1+1⋅a0=0
可以写成矩阵形式:
[ 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 ] [ a 6 a 5 a 4 a 3 a 2 a 1 a 0 ] = [ 0 0 0 ] \begin{bmatrix} 1&1&1&0&1&0&0 \\ 1&1&0&1&0&1&0 \\ 1&0&1&1&0&0&1 \end{bmatrix} \begin{bmatrix} a_6\\a_5\\a_4\\a_3\\a_2\\a_1\\a_0 \end{bmatrix}= \begin{bmatrix} 0\\0\\0 \end{bmatrix} ⎣⎡111110101011100010001⎦⎤⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡a6a5a4a3a2a1a0⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎡000⎦⎤
上式可简写为 H A T = 0 T HA^T=0^T HAT=0T或 A H T = 0 AH^T=0 AHT=0
其中 H r × n = [ 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 ] H_{r \times n}=\begin{bmatrix} 1&1&1&0&1&0&0 \\ 1&1&0&1&0&1&0 \\ 1&0&1&1&0&0&1 \end{bmatrix} Hr×n=⎣⎡111110101011100010001⎦⎤称为监督矩阵
A = [ a 6 a 5 a 4 a 3 a 2 a 1 a 0 ] A=[a_6a_5a_4a_3a_2a_1a_0] A=[a6a5a4a3a2a1a0]称为码字
监督矩阵 H H H确定码组中的信息位和监督位的关系
H H H的行数就是监督关系式的数目,即监督位数 r r r
H H H的每行中“1”的位置表示相应的码元参与监督关系
H H H可以分成两部分
H r × n = [ 1 1 1 0 ∣ 1 0 0 1 1 0 1 ∣ 0 1 0 1 0 1 1 ∣ 0 0 1 ] = [ P I r ] H_{r \times n}=\begin{bmatrix} 1&1&1&0&|&1&0&0 \\ 1&1&0&1&|&0&1&0 \\ 1&0&1&1&|&0&0&1 \end{bmatrix}=[PI_r ] Hr×n=⎣⎡111110101011∣∣∣100010001⎦⎤=[PIr]为典型监督矩阵
生成矩阵
{ a 2 = a 6 ⊕ a 5 ⊕ a 4 a 1 = a 6 ⊕ a 5 ⊕ a 3 a 0 = a 6 ⊕ a 4 ⊕ a 3 \begin{cases} a_2=a_6 \oplus a_5 \oplus a_4\\ a_1=a_6 \oplus a_5 \oplus a_3\\ a_0=a_6 \oplus a_4 \oplus a_3 \end{cases} ⎩⎪⎨⎪⎧a2=a6⊕a5⊕a4a1=a6⊕a5⊕a3a0=a6⊕a4⊕a3
可以写为
[ a 2 a 1 a 0 ] = [ 1 1 1 0 1 1 0 1 1 0 1 1 ] [ a 6 a 5 a 4 a 3 ] \begin{bmatrix} a_2\\ a_1\\a_0 \end{bmatrix}= \begin{bmatrix} 1&1&1&0\\ 1&1&0&1\\ 1&0&1&1 \end{bmatrix} \begin{bmatrix} a_6\\a_5\\a_4\\a_3 \end{bmatrix} ⎣⎡a2a1a0⎦⎤=⎣⎡111110101011⎦⎤⎣⎢⎢⎡a6a5a4a3⎦⎥⎥⎤
上式两端分别转置后,可以变成
[ a 2 a 1 a 0 ] = [ a 6 a 5 a 4 a 3 ] [ 1 1 1 1 1 0 1 0 1 0 1 1 ] = [ a 6 a 5 a 4 a 3 ] Q \begin{bmatrix} a_2a_1a_0 \end{bmatrix}= \begin{bmatrix} a_6a_5a_4a_3 \end{bmatrix} \begin{bmatrix} 1&1&1\\ 1&1&0\\ 1&0&1\\ 0&1&1 \end{bmatrix}= \begin{bmatrix} a_6a_5a_4a_3 \end{bmatrix}Q [a2a1a0]=[a6a5a4a3]⎣⎢⎢⎡111011011011⎦⎥⎥⎤=[a6a5a4a3]Q
Q Q Q为 k × r k \times r k×r阶矩阵,是 P P P的转置,即 Q = P T Q=P^T Q=PT
将 Q Q Q的左边加上一个 k k k阶单位方阵,称为生成矩阵,即
G = [ I k Q ] = [ 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 ] 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⎦⎥⎥⎤
G G G称为生成矩阵,因为可以用它产生整个码组 A A A,即有
A = [ a 6 a 5 a 4 a 3 a 2 a 1 a 0 ] = [ a 6 a 5 a 4 a 3 ] G A=[a_6a_5a_4a_3a_2a_1a_0]=[a_6a_5a_4a_3]G A=[a6a5a4a3a2a1a0]=[a6a5a4a3]G
【知识点】如何由监督矩阵如何产生生成矩阵?
把监督矩阵典型化后,得到了一个 P r × k P_{r \times k} Pr×k阶矩阵,转置后得到 Q k × r Q_{k \times r} Qk×r阶矩阵后,前面加一个 k k k阶的单位矩阵,就可以得到一个典型化的生成矩阵,信息位和生成矩阵相乘,可以得到整个码组
错误图样
发送码组 A A A是一个 n n n列的行矩阵:
A = [ a n − 1 a n 2 . . . a 1 a 0 ] A=[a_{n-1}a_{n_2}...a_1a_0] A=[an−1an2...a1a0]
接受码组是一个 n n n列的行矩阵 B B B:
B = [ b n − 1 b n − 2 . . . b 1 b 0 ] B=[b_{n-1}b_{n-2}...b_1b_0] B=[bn−1bn−2...b1b0]
令接受码组和发送码组之差位
B − A = E B-A=E B−A=E
E E E就是错码的行矩阵
E = [ e n − 1 e n − 2 . . . e 1 e 0 ] E=[e_{n-1}e_{n-2}...e_1e_0] E=[en−1en−2...e1e0],称为错误图样
式中, e i = { 0 , 当 b i = a i 1 , 当 b i ≠ a i e_i=\begin{cases}0,&\text{当}b_i=a_i\\1,&\text{当}b_i \neq a_i \end{cases} ei={ 0,1,当bi=ai当bi=ai
校正子矩阵
B − A = E B-A=E B−A=E可以改写为 B = A + E B=A+E B=A+E
在接受端解码时,将接受码组 B B B带入式
A H T = 0 AH^T=0 AHT=0
中 A A A的位置进行计算
若接受码组中无错码,则 B = A B=A B=A。代入后,该式仍成立,即有: B H T = 0 BH^T=0 BHT=0
当接受码组有错时, E ≠ 0 E \neq 0 E=0,将 B B B带入 A H T = 0 AH^T=0 AHT=0中,该式不一定成立
只有当错码较多,已经超出了这种编码的检测能力时, B B B变为另一许用码组,上式才成立
当错码未超过检错能力时,上式不成立,即其右端不为0。假设此时该式的右端等于 S S S,即有
B H T = S BH^T=S BHT=S
将 B = A + E B=A+E B=A+E代入上式,得到:
S = ( A + E ) H T = A H T + E H T S=(A+E)H^T=AH^T+EH^T S=(A+E)HT=AHT+EHT
上式右端第一项等于0,所以
S = E H T S=EH^T S=EHT
将 S S S称为校正子。
当 H H H确定后,上式中 S S S只与 E E E有关,而与 A A A无关
S S S和错码 E E E之间有确定的线性变形变换关系。若 S S S和 E E E有一一对应关系,则 S S S将能代表错码位置
线性码的封闭性
若 A 1 A_1 A1和 A 2 A_2 A2是一种线性码中的两个码组,则仍是其中一个码组
由于线性码具有封闭性,所以两个码组 A 1 A_1 A1和 A 2 A_2 A2之间的距离(即对应位不同的数目)必定时另一个码组 ( A 1 + A 2 ) (A_1+A_2) (A1+A2)的重量(即“1”的数目)。因此,码的最小距离就是码的最小重量(除全“0”码组外)
【例题】已知 ( 7 , 3 ) (7,3) (7,3)分组码的监督关系为
{ a 6 + a 3 + a 2 + a 1 = 0 a 5 + a 2 + a 1 + a 0 = 0 a 6 + a 5 + a 1 = 0 a 5 + a 4 + a 0 = 0 \begin{cases} a_6+a_3+a_2+a_1=0\\ a_5+a_2+a_1+a_0=0\\ a_6+a_5+a_1=0\\ a_5+a_4+a_0=0 \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧a6+a3+a2+a1=0a5+a2+a1+a0=0a6+a5+a1=0a5+a4+a0=0
求其监督矩阵、生成矩阵、全部码字及纠错能力
解:由监督关系式可写出监督矩阵
H = [ 1 0 0 1 1 1 0 0 1 0 0 1 1 1 1 1 0 0 0 1 0 0 1 1 0 0 0 1 ] H=\begin{bmatrix}1&0&0&1&1&1&0\\0&1&0&0&1&1&1\\1&1&0&0&0&1&0\\0&1&1&0&0&0&1 \end{bmatrix} H=⎣⎢⎢⎡1010011100011000110011100101⎦⎥⎥⎤
写成典型监督矩阵
H = [ 1 0 1 1 0 0 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 ] = [ P I r ] H=\begin{bmatrix}1&0&1&1&0&0&0\\1&1&1&0&1&0&0\\1&1&0&0&0&1&0\\0&1&1&0&0&0&1 \end{bmatrix}=[PI_r] H=⎣⎢⎢⎡1110011111011000010000100001⎦⎥⎥⎤=[PIr]
生成矩阵满足关系 [ a 6 a 5 a 4 a 3 a 2 a 1 a 0 ] = [ a 6 a 5 a 4 ] [ I k Q ] [a_6a_5a_4a_3a_2a_1a_0]=[a_6a_5a_4][I_kQ] [a6a5a4a3a2a1a0]=[a6a5a4][IkQ]
生成矩阵为
G = [ I k G ] = [ I k P T ] = [ 1 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 1 1 1 0 1 ] G=[I_kG]=[I_kP^T]= \begin{bmatrix} 1&0&0&1&1&1&0\\0&1&0&0&1&1&1\\0&0&1&1&1&0&1 \end{bmatrix} G=[IkG]=[IkPT]=⎣⎡100010001101111110011⎦⎤
最小码距 d 0 = 4 d_0=4 d0=4,可纠错1位
扩展汉明码
在汉明码基础上,再加上一位所有码字进行校验的监督位
监督码字由 r r r增加 r + 1 r+1 r+1位
信息位不变
d 0 = 4 d_0=4 d0=4
( 7 , 4 ) (7,4) (7,4)汉明码字中至少一个码字重量等于 d 0 = 3 d_0=3 d0=3,加上1位监督位,则 d 0 = 4 d_0=4 d0=4。于是,相应的监督矩阵 H H H通过在 ( 7 , 4 ) (7,4) (7,4)码的 H H H中顶部或底部加1行“1”,右边加1列“0”来构成