信息码11001100,计算其海明码字

信息码11001100,计算其海明码字,第1张

信息码为8位,8+n+1小于等于2的n次方,所以n=4,有4位校验位 假设4位校验位分别是a1a2a4a8,11001100对应b1b2b3b4b5b6b7b8,则海明码为 a1a2b1a4b2b3b4a8b5b6b7b8 a1=b1+b2+b4+b5+b7=1+1+0+1+0=1 a2=b1+b3+b4+b6+b7=1+0+0

二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验位。我们常使用的检验码有三种 分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。

海明校验码是由RichardHamming于1950年提出、目前还被广泛采用的一种很有效的校验方法。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。但是因为这种海明校验的方法只能检测和纠正一位出错的情况。所以如果有多个错误,就不能查出了。

什么是码距?

两个码组对应位上数字的不同位的个数称为码组的距离,简称码距,又称海明(Hamming)距离。例如00110和00100码距为1,12345和13344码距为2,Caus和Daun码距为2。

海明校验码公式(假设为k个数据位设置r个校验位)

公式怎么得出来的呢?

假设有r个校验位,一个位子有0或1两种情况,r个位子就有2 r种排列情况,能表示2 r种状态。其中一个状态用来表示正确(没有错误发生)的这种情况。其余的2 r-1种状态来表示错误发生在哪一位。总共有k+r位,所以2 r-1一定要>=总位子k+r。

按照该不等可以得出k与r的对应关系

注意:海明校验码是放在2的幂次位上的,即“1,2,4,8,16,32······”

实战求1011的海明码

第一步:求r的值(即校验位数)

直接根据公式代入得:

2^r-1 ≥ 4 + r

2^r-r ≥ 5

得到r最小为3

所以海明码的位数是4+3=7位

第二步:校验位和信息位对号入座

注意: 信息位的位置分配是从高位到低位依次存放

注意: 海明校验码是放在2的幂次位上的

位数|1|2|3|4|5|6|7

:-:|:-:|:-:|:-:|:-:|:-:|:-:

信息位|||1||1|0|1

校验位|r1|r2||r3|||

第三步:确定校验位的值

校验原则:被校验的海明位的下标等于所有参与校验该为的校验位的下标之和

然后将校验码校验的信息位的位置记录下来:

然后做对应信息位的异或运算(异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1))

代入表格得到

注意:按照从低位到高位的排列顺序得到海明码:1010101

最近和朋友的聊天涉及到了海明码纠错,先来康康海明纠错码到底是什么

Hamming Code,电信领域的一种线性调试码,由于编码简单,广泛应用于内存(RAM)。

若海明码长为n,信息位数为k,则需要插入r个监督位校验码。如果想要r个校验码能构成r个关系式来指示出错码的n个可能位置,则需要

即为

比如说我们有8位二进制数需要编码,那么应该有

海明码的校验码都在2的整数次幂处,也就是第1、2、4等位

注意这不是数组索引,没有第0位数。

如果用pn表示第n个校验码

dk表示第k个数据

所以我们的8位二进制数编码结果应该是

校验位1 的校验规则是从当前位数起,校验一位,跳过一位,再校验一位,再跳过一位也就是说校验了所有数据位位置序号的二进制表示的最后一位是1的数据,即 0001,0011,0101,0111,1001,1011

同理,第k个校验位的校验规则是从当前位开始连续校验 位然后跳过 位也就是说,第k位校验位应该校验数据位位置序号的二进制表示的倒数第k位是1的数据

其实就是二进制数的第k位表示

那到底咋算嘞?

之前学过奇校验和偶校验,可以排上用场了

奇校验是要求整个被校验的位中“1”的个数为奇数,偶校验则是要求整个被校验的位中“1”的个数为偶数

我们用偶校验来试算一下。

比如我们输入的数据是10111011

插入后应该是

计算p1, 第0001,0011,0101,0111,1001,1011位中除了p1本身共有4个1,所有p1为0可以使“1”的总数为0

同理p2为0

p3为1

p4为1

所得数据为

比起普通的奇校验偶校验而言,海明码非常强大的一点就在于它不仅可以实现校验,还能实现1bit的纠错。

依然以我们的偶校验为例

可以看出来的是,所有的校验码位都不会被其他校验码影响,仅由自己校验自己,这就保证了如果我们的某位校验码出错的话不会影响其他校验码的校验结果,我们可以轻易的找到这个出错的校验码。

所以说,我们的四个校验组计算出来如果只有一个校验组的结果是错误的,那么说明是该位校验码出错,取反即可。

再来看看数据位。

因为每个数据都被校验了2-3次,所以出错的校验组数肯定大于1

如果是两个校验组出错的话,有d1、d2、d3、d5、d6、d8,每个数据位都和校验组的组合形式一一对应,因此我们知道哪两个校验组出错就知道了哪一位出错。

如果是三个校验组出错的话同理也可以找出是哪一位。

本来应该用FPGA写verilog的,不过我现在电脑里就只能写python

就用python做了一个hamming码的编码与校验纠错

以上就是关于信息码11001100,计算其海明码字全部的内容,包括:信息码11001100,计算其海明码字、简单理解海明校验码、超级无敌简单易懂的海明码的校验和纠错原理与实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10142216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存