1.海明码的概念海明码是一种可以纠正一位差错的编码。它是利用在信息位为 个不同位置的一位错。它必需满足以下关系式: 2^r>=n+1 为增加冗余位位数[font class="Apple-style-span" style="font-weight: bold;" id="bks_cu2htj1g"]2.[/font][font class="Apple-style-span" style="font-family: font-size:12px; line-height: normal; id="bks_4dxtg15k"][font]海明码的原理[/font] 在数据中间加入几个校验码,将玛距均匀拉大,将数据的每个二进制位分配在几个奇偶校验组里, 当某一位出错,会引起几个校验位的值发生变化。 海明不等式: 校验码个数为 次幂个信息,1个信息用来指出“没有错误”,其余 2K-1 个指出错误发生 在那一位,但也可能是校验位错误,故有 次-1-K能被校验。 海明码的编码规则: 1.每个校验位 Ri 被分配在海明码的第 次的位置上,2.海明玛的每一位(Hi)是由多个/1 个校验值进行校验的,被校验玛的 位置玛是所有校验这位的校验位位置玛之和。 一个例题: 个数据位d0,d1,d2,d3, 个校验位r0,r1,r2,对应的位置为: d3 d2 d1 r2 d0 r1 r0 ======b7 b6 b5 b4 b3 b2 b1 校验位的取值,就是他所能校验的数据位的异或 b1 b3,b6,b7b4 b5,b6,b7[/font] [font class="Apple-style-span" style="font-family: font-size:12px; line-height: normal; id="bks_4dxtg15k"]海明玛传送到接受方后,将上三式的右边(b1,b2,b4)的逻辑表达式分别 异或上左边的值就得到了校验方程,如果上题采用偶校验 G1=b1 b3 b5 b7 G2=b2b3 b6 b7 G3=b4b5 b6 b7 001是第四位错 若为 011 是第六位错[/font] [font class="Apple-style-span" style="font-family: font-size:12px; line-height: normal;"] [/font] 3.海明码的生成与接收 特注:以下的+均代表异或 方法一: 1)海明码的生成。 S2=a2+a4+a5+a6S1=a1+a3+a5+a6 S0=a0+a3+a4+a6 求:海明码码字。 解:1)由监督关系式知冗余码为 a2a1a0。 2)冗余码与信息码合成的海明码是:"0010a2a1a0"。 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 错码位置 无错 a0 a1 a2 a3 a4 a5 a6 S2S1S0=011查表得知错码位置是 a3。 4)纠错--对码字的 a3 位取反得正确码字:"0 5)把冗余码a2a1a0 删除得发送端的信息码:"0010" 方法二:(不用查表,方便编程) 1)海明码的生成(顺序生成法)。 A、B、C、…,顺序插入信息码中,得海明码码字:" 1011 12 其中 次方位(k=0,1,2,3)。码位分别为1,2,4,8。 2)冗余码 的线性码位是:(相当于监督关系式)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)把线性码位的值的偶校验作为冗余码的值(设冗余码初值为 求:发送端的信息码。解:1)设错误累加器(err)初值=0 2)求出冗余码的偶校验和,并按码位累加到 err err0可知接收码字有错, 3)码字的错误位置就是错误累加器(err)的值 $2.5.4