汉明校验码

首先放个图,为汉明码中信息位N与校验位K的位数关系:
2K−12^{K-1}2K1>=N+K+1

码距:一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。
在这里插入图片描述
以汉明校验码中的偶校验为例,若汉明码最高位号为m,最低位号为1,即有HmH_mHmHm−1H_{m-1}Hm1Hm−2H_{m-2}Hm2···H2H_2H2H1H_1H1

一、
编码规则为:
⑴每个校验位PiP_iPi在汉明码中被分到位号2i−12^{i-1}2i1的位置上,其余各位为信息位。

⑵汉明码的每一位HiH_iHi有多个校验位校验,其关系式是被校验的每一位位号等于校验它的各校验位的位号之和

⑶在增大码距时,应使所有编码的码距尽量均匀的增大,以保证对所有代码的检测能力平衡的提高。

二、
校验规则为:
⑴当S5S_{5}S5~S1S_{1}S1为00000时,表明无错。

⑵当S5S_{5}S5~S1S_{1}S1中仅有一位不为0时,表明是某一校验位出错或者是3位汉明码同时出错。由于3位同时出错的情况很少,故通常认为是某一位出错,出错位是该SiS_{i}Si对应的PiP_{i}Pi位。

⑶当S5S_{5}S5~S1S_{1}S1中有2位不为0时,表明是两位汉明码同时出错,此时只能发现错误,但无法确定出错位置。

⑷当S5S_{5}S5~ S1S_{1}S1中有3位不为0时,表明1位信息位出错或3位汉明码同时出错,由于3位同时出错的情况很少,故通常认为是某一位信息位出错。出错位的位号由S5S_{5}S5~ S1S_{1}S1 4位代码值指明,此时不仅能检查出一位错,而且能够准确的定位,因而可以纠正这个错误(该位取反)。

⑸当S5S_{5}S5~S1S_{1}S1中有4位或5位不为0时,表明出错情况严重,系统工作可能出现故障,应当检查系统硬件的正确性。


按照以上原则,我们来看一道例题:设有一个8位信息为1010 1100,试求汉明编码的生成和校验过程。

1.编码生成:由信息位与校验位的关系2K−12^{K-1}2K1>=N+K+1得,K=5,即有5位校验位。将校验位关系列出,校验过哪些信息位就列出,按偶校验有:

P1=D1⊕D2⊕D4⊕D5⊕D7=1
P2=D1⊕D3⊕D4⊕D6⊕D7=1
P3=D2⊕D3⊕D4⊕D8=1
P4=D5⊕D6⊕D7⊕D8=0

在上述4个公式中,不同信息位出现在PiP_{i}Pi项中的次数是不一样的,其中D4D_{4}D4D7D_{7}D7出现了3次,而D1D_{1}D1D2D_{2}D2D3D_{3}D3D5D_{5}D5D6D_{6}D6D8D_{8}D8仅出现两次。此时,不同公式中的码距不同,,因此需要再补充一项校验公式,使得各信息位被校验的次数相等:P5=D1⊕D2⊕D3⊕D5⊕D6⊕D8=1

则其二进制表示的汉明码为1101 0011 0101 1

2.校验
假设上述汉明码经传送后,H11H_{11}H11(D7)位发生了错误,原码字就变为 1111 0011 0101 1

检错只需要将接收到的码字重新进行偶校验即可。

检错关系式为:
S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7=1
S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7=1
S3=P3⊕D2⊕D3⊕D4⊕D8=0
S4=P4⊕D5⊕D6⊕D7⊕D8=1
S5=P5⊕D1⊕D2⊕D3⊕D5⊕D6⊕D8=0

从S5向上,将校验结果列出得01011,即误字为01011,转化为十进制即为H11位出错。H11位为1,取反变为0即为正确信息。

纠正后的汉明码为 1101 0011 0101 1


END

最近注册了公众号,打算把计算机网络的知识从头整理一遍分享给大家。公众号刚刚起步,希望在这里面结识一些志同道合的朋友,大家相互勉励,共同进步。文末是我公众号的二维码,欢迎各位看官关注
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值