海明校验例题
首先海明校验码的校验位个数是有公式算的,一般对照表如图,考试肯定考5位的,其他的不用看,一样的原理。选择填空4,5位随便,怎么快怎么来,大题建议用5位的。
例1:请计算8位二进制信息10011010的海明码字是多少?
分析:8位,在5~11之间,想都不用想5位校验码,至于最后一位校验码P5为什么在13号上,原本应该是在16位上的,但是8位前面插完4位校验码之后才12位,根本用不了16位,暂且把16位的校验码提前搁到13号上就节省了长度。
首先应该草稿纸上画个表,吧这几个行列写清楚,横坐标、纵坐标。
然后看第一个数D1(H3)是0,由于3可以拆成1+2,所以H1、H2对应的框里面填0,然后变成下面这样。
再看第二个数D2(H5)是1,由于5可以拆成1+4,所以H1、H4对应的框里面填1,然后变成下面这样。
类似操作下去。。。直到都填完变成如下样子:
然后求对应位置的校验位值
例如P1,直接看这一行01个数进行奇偶校验,说白了就是数奇数个1还是偶数个1,若奇数个1那么P1就是1,否则P1就是0,例如这里3个1所以P1为1
P2跟P1一样,对第二行进行奇偶校验,得出P2=1
类似操作。。。求出P3、P4
P5的求法有点点不同,它为H1、H2、。。。、H12一起进行求奇偶校验所得结果
例如这里前面无论是数据位D1、D2。。。还是校验位P1、P2。。。都已经求出来了,其实就看抬头行跟抬头列一起进行数1是奇数个还是偶数个
第一行4个1,第一列3个一,所以P5(H13)=1
到此,所有校验码都求出来了,若是大题,可以这样把求得的海明码列出来
画到这,如果还有其他地方要分析海明码字是否存在错误位的时候,你可以根据以上画图步骤列出下面这个公式以便使用。这个加号表示进行奇偶校验。
很明显可以看到就是对应每行 对应值 加个 校验码 进行计算。
也可以是这个形式
反之如果给你一串海明码,问你有无错误,错在哪?
例如:
例2:请分析海明码字1100101111011是否正确?若有错,请纠错。
这里就需要用到上面列出来的这个公式了。
首先也是画个表,把对应抬头行跟抬头列给写进去。
然后对应上面公式把S1对应这行 参与计算 的 位置 值 从抬头行copy下来,变成下图。
同样的操作下去把S2、S3、S4对应行的值copy进去变成如下:
然后S5对应这行就是把第一行值全部copy下来,变成下图:
然后S1。。。S5也是同上面一样的操作,对每行进行奇偶校验,求出S1到S5的值。如下:
然后定理:S5为0有偶数个错(S4S3S2S1=0无错;不为0有两位错),当某个数据位出错时、S4S3S2S1的值等于该出错位数据在海明码中的位号。
例1:00000,S5为0,偶数个错,S4S3S2S1=0000,说明校验码无错。
例2:00110,S5为0,偶数个错,S4S3S2S1!=0000,说明校验码错了两位,抱歉找不出哪两位。
例3:10110,S5为1,奇数个错,S4S3S2S1=0110,后面四位表示的错位置0110=6,所以H6错了,该位取反即可纠错。
但是一般2位出错的概率几乎为0,所以大可放心。
例如上题S5S4S3S2S1=10110,则H6有错,正确的海明码字为:1100101011011