1.
海明码的概念
海明码是一种可以纠正一位差错的编码。它是利用在信息位为 k 位,增加 r 位冗余位,构成一个 n=k+r 位的码字,然后用 r 个监督关系式产生的 r 个校正因子来区分无错和在码字中的 n 个不同位置的一位错。它必需满足以下关系式: 2 r>=n+1 或 2r>=k+r+1 海明码的编码效率为: R=k/(k+r) 式中 k 为信息位位数 r 为增加冗余位位数 2. 海明码的生成与接收 方法一: 1) 海明码的生成。 例 1. 已知:信息码为: "0010" 。海明码的监督关系式为: S2=a2+a4+a5+a6 S1=a1+a3+a5+a6 S0=a0+a3+a4+a6 求:海明码码字。 解: 1) 由监督关系式知冗余码为 a 2a 1a 0 。 2) 冗余码与信息码合成的海明码是: " 0010a 2a 1a 0" 。 设 S2=S1=S0=0, 由监督关系式得: a2=a4+a5+a6= 1 a1=a3+a5+a6= 0 a0=a3+a4+a6=1 因此,海明码码字为: "0010101" 2) 海明码的接收。 例 2. 已知:海明码的监督关系式为: S2=a2+a4+a5+a6 S1=a1+a3+a5+a6 S0=a0+a3+a4+a6 接收码字为: "0011101"(n=7) 求:发送端的信息码。 解: 1) 由海明码的监督关系式计算得 S2S1S0=011 。 2) 由监督关系式可构造出下面错码位置关系表: S2S1S0 000 001 010 100 011 101 110 111 错码位置 无错 a 0 a 1 a 2 a 3 a 4 a 5 a6 3) 由 S2S1S0=011 查表得知错码位置是 a3 。 4) 纠错 -- 对码字的 a3 位取反得正确码字: "0 0 1 0 1 0 1" 5) 把冗余码 a 2a 1a 0 删除得发送端的信息码: "0010" 方法二: ( 不用查表,方便编程 ) 1) 海明码的生成(顺序生成法)。 例 3. 已知:信息码为: " 1 1 0 0 1 1 0 0 " (k=8) 求:海明码码字。 解: 1) 把冗余码 A 、 B 、 C 、 … ,顺序插入信息码中,得海明码 码字 :" A B 1 C 1 0 0 D 1 1 0 0 " 码位 : 1 2 3 4 5 6 7 8 9 10 11 12 其中 A,B,C,D 分别插于 2k 位 (k=0,1,2,3) 。码位分别为 1,2,4,8 。 2) 冗余码 A,B,C,D 的线性码位是: ( 相当于监督关系式 ) A->1,3,5,7,9,11 ; B->2,3,6,7,10,11 ; C->4,5,6,7,12 ; ( 注 5=4+1 ; 6=4+2 ; 7=4+2+1 ; 12=8+4) D->8,9,10,11,12 。 3) 把线性码位的值的偶校验作为冗余码的值 ( 设冗余码初值为 0) : A=∑(0,1,1,0,1,0)=1 B=∑(0,1,0,0,1,0)= 0 C=∑(0,1,0,0,0) =1 D=∑(0,1,1,0,0) =0 4) 海明码为 :"1 0 1 1 1 0 0 0 1 1 0 0" 2) 海明码的接收。 例 4. 已知:接收的码字为: "1 0 0 1 1 0 0 0 1 1 0 0"(k=8) 求:发送端的信息码。 解: 1) 设错误累加器 (err) 初值 =0 2) 求出冗余码的偶校验和,并按码位累加到 err 中: A=∑(1,0,1,0,1,0)=1 err=err+20=1 B=∑(0,0,0,0,1,0)=1 err=err+21= 3 C=∑(1,1,0,0,0) =0 err=err+0 =3 D=∑(0,1,1,0,0) =0 err=err+0 =3 由 err≠0 可知接收码字有错, 3) 码字的错误位置就是错误累加器 (err) 的值 3 。 4) 纠错 -- 对码字的第 3 位值取反得正确码字: "1 0 1 1 1 0 0 0 1 1 0 0" 5) 把位于 2k 位的冗余码删除得信息码: "1 1 0 0 1 1 0 0" |