海明码就是汉明码吗,明码是什么码

http://www.itjxue.com  2023-01-13 07:11  来源:未知  点击次数: 

汉明码输入为什么是输出两倍

因为汉明码也也叫线性纠错码

为了保证通信过程中数据传输的正确性和完整性,并且在通信过程中,如果数据传输发生一位错误,能够将其矫正过来,将信息数据进行汉明编码后再进行数据传输。

汉明码也叫海明码是于1950年发明的,汉明码也是利用了奇偶校验位概念,通过在数据位后增加一些比特以验证数据的有效性,故汉明码也属于线性纠错码(可纠错1-bit错误检出2-bit错误汉明码无法实现2位及2位以上纠错)。

408海明码考吗

408海明码考。计算机/软工408考研会考的重难点:汉明码(英语:hammingcode),也称为海明码,是(7,4)汉明码推广得到的一种线性纠错码,由理查德·卫斯里·汉明于1950年发明。

考研408海明码删了吗

删除了。根据查询考研408相关信息得知,考研408海明码删除了。海明码指汉明码。 汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误。

什么是海明码呀?通俗一点,但又能深刻一点!谢谢了!!!

海明码其实也不难,相对于寄偶检验码 它不仅可以检验出错误,还能修正错误!但只能是检验、修正一位错误!说一大堆理论是没什么意思,下面将通过一个例子,尽可能的用最通俗易懂的方式进行讲解!最后大家会发现海明码很神奇!!

假设要传送的数据为:1011 0011

校验流程如下:

一:确定校验位并插入到有效数据位中。

相比奇偶校验只插入一个检验码,海明码需要插入多个检验码,插入的位数与有效数据位数相关,公式如下

公式:2^r-rk+1,其中r就是要插入检验码的个数,取满足条件的最小整数,k是有效数据位数。因为我们要传送的数据是:1011 0011,显然k=8,推出r=4。也就说我们要将4个校验位插入到有效数据中,怎么插入呢?按照如下规则:

插入位置固定为2^N(N:0,1,2,3,4,5……)处,因为r=4,即只需要取4个有{2^0,2^1,2^2,2^3},对应位置即是1,2,4,8,当然了,如果r=5,那么插入位置为:1,2,4,8,16.同类可以推出其他情况,不再啰嗦。(之所以选择这样的位置插入,是为了有效的分组,保证后面的校验分组能有效的错开,不会互相干扰,这句话不需要理解,到后面就能体会!)

通过分析得到待传送的数据为:xx1x 011x 0011,4位校验位+8为有效数据位。

二、确定校验位的数值。

显然X只能取0,1,下面确定x的值:

由一可知待传送数据为:xx1x 011x 0011。

规则:以X的位置为长度,依次从待传送数据中取X个数,然后跳过X个数,再取X个数,直到待传送数据串尾,得到一个子串,然后统计子串中1的个数,如果为奇数,则x=0,为偶数,x=1(当然,反过来也行,其实这就是奇偶校验的规则,想了解奇偶校验可以参见我以前的回答的,这里不了解也行)

第1个X:位置为1,从第1个位置开始依次取1个数据,并跳过1个数据再取,直到串尾得到一个子串:

{x 1 0 1 0 1},这个串可记为第1个校验组, 因为1的个数是3个为奇数,故x=0.

第2个X:位置为2,故从第2个位置开始依次取2个数据,并跳过2个数据再取,直到串尾得到一个子串:

{x1 ?11 ?01} ,记为第2个校验组,因为1的个数为4是偶数,故x=1.

第3个X:位置是4,故从第4个位置开始依次取4个数据,并跳过4个数据再取,直到串尾得到一个子串:

{x011 ? ? 1},记为第3个校验组,因为1的个数为3是奇数,故x=0.

第4个X:位置是8,故从第8个位置开始依次取8个数据,并跳过8个数据再取,直到串尾得到一个子串:

{x0011 },记为第4个校验组,……,X=1。

故得到最终的待传送的数据串为:0110?0111?0011。

这里其实就可以看到了,为什么X的位置要取2^N,这样才能保证各个校验位不会相互干扰。

经过以上一、二步骤就完整了海明码的构造过程,下面讲解校验过程:

三、根据步骤二中的构造规则,取出各校验组

发送的数据串为:0110?0111?0011。

假设接受到的数据串为:0110?0111?1011(注意和传送数据串相比,第9为出现了错误!)

规则:以X的位置为长度,依次从待传送数据中取X个数,然后跳过X个数,再取X个数,直到待传送数据串尾,得到一个子串,然后统计子串中1的个数,如果为奇数,则x=0,为偶数,x=1(规则必须和步骤二中一样)

根据二中制定的规则再次取出各个校验组。

第1个校验组:从第1个位置开始依次取1个数据,并跳过1个数据再取,直到串尾得到一个子串:{0 1 0 1 1 1}。

第2个校验组:从第2个位置开始依次取2个数据,并跳过2个数据再取,直到串尾得到一个子串:{11 ?11 ?01}

第3个校验组:从第4个位置开始依次取4个数据,并跳过4个数据再取,直到串尾得到一个子串:{0011 ? ?1}

第4个校验组:从第8个位置开始依次取8个数据,并跳过8个数据再取,直到串尾得到一个子串:{11011}.

四、根据步骤二的构造规则,确定存在错误的校验组,并通过错误校验组的交集,最终确定出错的位置。

由步骤三得到4个校验组:

1:{0 1 0 1 1 1}。 ?对应位置为{1 3 5 7 9 11}

2:{11 ?11 ?01}。?对应位置为{2 3 6 7 10 11}

3:{0011 ? ?1} ?。对应位置为{4567 ? ?12}

4:{11011}。 ??对应位置为{8 9 10 11 12}

因为我们的构造规则是:统计子串中1的个数,如果为奇数,则x=0,为偶数,x=1。

所以正确的校验组中1的个数绝对是奇数!(好好琢磨,很容易就想通了,如果我们的规则是为奇数,则x=1,为偶数,x=0。那么正确的校验组中1的个数绝对是偶数),所以如果校验组1的个数不是奇数,那么这个校验组就存在问题。因而可以判断第1个和第4个校验组出现问题了。

确定了第1个和第4个校验组出现问题后,找到这两个校验组的交集即第9个位置和第11个位置是它们交集,即共同校验的位置。于是判断出现问题的位置要么就是第9个位置,要么就是第11个位置!因为在第2个校验组中有第11个位置,故第11个位置绝对没有出错,因为就可以判断是第9个位置出现错误!

到这里,应该懂了吧?但是不是觉得找出错位置有点麻烦啊?下面就给出一个具体的实现方法,理解了上面的描述,再了解下面实现的方法,立马就能确定出错误的位置:

首先:我们对各个校验组求异或。

第一个校验组:{0 1 0 1 1 1} 异或的结果为:0

第二个校验组:{11 ?11 ?01}异或的结果为:1

第三个校验组:{0011 ? ?1}?异或的结果为:1

第四个校验组:{11011}异或的结果为:0

接着:倒置拼接异或结果,得到:0110,

最后:按位取反的到:1001,。

大家有没有惊奇的发现1001的十进制数就是9,这不就是出错的位置吗?这是巧合吗?

不急再看一个例子:

传送的数据串为: ?0110?0111?0011(还是我们开始的那个串)

接受到的数据串为:0110?1111?0011(和正确数据串相比,第5个位置出错了)

第一个校验组:{0 1 1 1 0 1} 异或的结果为:0

第二个校验组:{11 ?11 ?01}异或的结果为:1

第三个校验组:{0111 ? ?1}?异或的结果为:0

第四个校验组:{10011}异或的结果为:1

倒置拼接:1010 ?反转为:0101 ?对应十进制数为5!

也就是说方法是真确的!!不用怀疑!!这也就是海明码的奇妙之处!

再来看看一个例子:

传送的数据串为: ?0110?0111?0011(还是我们开始的那个串)

接受到的数据串为:0110?0110?0011(和正确数据串相比,第8个位置校验位出错了)

显然这是校验位出错了,那么能不能校验出来呢?

第一个校验组:{0 1 0 1 0 1} 异或的结果为:1

第二个校验组:{11 ?11 ?01}异或的结果为:1

第三个校验组:{0011 ? ?1}?异或的结果为:1

第四个校验组:{00011}异或的结果为:0

倒置反转结果为1000 正好是8,所以也没问题。

下面我们来说下规则:(其实就是说异或与奇偶的关系,想拓展的就可以看看)

上面的例子中,我们规定: 统计子串中1的个数,如果为奇数,则x=0,为偶数,x=1。如果是按这样的规定,那么校验组中1的个数必定是奇数,正是因为如此,所以校验组中如果1的个数不是奇数那么肯定出现了错误!而如果一个串中1的个数是奇数,那么串异或的结果一定为1,其实这个规则对应的就是奇校验!反之,如果为奇数,则x=1,为偶数,x=0,那么对应的就是偶校验!

故得到以下结论:

如果采用奇检验构造海明码,那么出错校验组中的1的个数必为偶数,即异或的结果必定为0!

如果采用奇检验构造海明码,那么出错的位置是校验组异或结果倒置拼接并反转的十进制数

如果采用偶检验构造海明码,那么出错校验组中的1的个数必为奇数,即异或的结果必定为1!

如果采用偶检验构造海明码,那么出错位置是校验组异或结果直接倒置拼接的十进制数!

关于偶检验构造海明码这里就不再详细展开,如果你能用偶检验的方法在把上面的例子都做一遍,那么海明码你就已经完全弄懂了!试试吧!

关于奇偶检验码 建议还是看看,因为海明码是基于奇偶校验的改进!而且奇偶校验更简单!

什么是海明码的配偶原则???

海明码即汉明码,如果按配偶原则来配置海明码,则C1?应使1,3,5,7位中的"1"的个数为偶数;C2?应使2,3,6,7位中的"1"的个数为偶数;C4?应使4,5,6,7位中的"1"的个数为偶数。

从编码形式上,我们可以发现汉明码是一个校验很严谨的编码方式。在这个例子中,通过对4个数据位的3个位的3次组合检测来达到具体码位的校验与修正目的(不过只允许一个位出错,两个出错就无法检查出来了,这从下面的纠错例子中就能体现出来)。

在校验时则把每个汉明码与各自对应的数据位值相加,如果结果为偶数(纠错代码为0)就是正确,如果为奇数(纠错代码为1)则说明当前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位出了问题。

扩展资料

编码原理

奇偶校验是一种添加一个奇偶位用来指示之前的数据中包含有奇数还是偶数个1的检验方式。如果在传输的过程中,有奇数个位发生了改变,那么这个错误将被检测出来(注意奇偶位本身也可能改变)。

一般来说,如果数据中包含有奇数个1的话,则将奇偶位设定为1;反之,如果数据中有偶数个1的话,则将奇偶位设定为0。换句话说,原始数据和奇偶位组成的新数据中,将总共包含偶数个1.。

奇偶校验并不总是有效,如果数据中有偶数个位发生变化,则奇偶位仍将是正确的,因此不能检测出错误。而且,即使奇偶校验检测出了错误,它也不能指出哪一位出现了错误,从而难以进行更正。

数据必须整体丢弃并且重新传输。在一个噪音较大的媒介中,成功传输数据可能需要很长时间甚至不可能完成。虽然奇偶校验的效果不佳,但是由于他只需要一位额外的空间开销,因此这是开销最小的检测方式。

并且,如果知道了发生错误的位,奇偶校验还可以恢复数据。 如果一条信息中包含更多用于纠错的位,且通过妥善安排这些纠错位使得不同的出错位产生不同的错误结果,那么我们就可以找出出错位了。

在一个7位的信息中,单个数据位出错有7种可能,因此3个错误控制位就足以确定是否出错及哪一位出错了。

参考资料来源:百度百科——汉明码

怎么理解海明码?

海明码1.海明码的概念海明码是一种可以纠正一位差错的编码。它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式:2^r=n+1 或 2^r=k+r+1海明码的编码效率为:R=k/(k+r)式中 k为信息位位数r为增加冗余位位数 2.海明码的生成与接收方法一:1)海明码的生成。例1.已知:信息码为:"0010"。海明码的监督关系式为:S2=a2+a4+a5+a6S1=a1+a3+a5+a6S0=a0+a3+a4+a6求:海明码码字。解:1)由监督关系式知冗余码为a2a1a0。2)冗余码与信息码合成的海明码是:"0010a2a1a0"。设S2=S1=S0=0,由监督关系式得:a2=a4+a5+a6=1a1=a3+a5+a6=0a0=a3+a4+a6=1因此,海明码码字为:"0010101"2)海明码的接收。例2.已知:海明码的监督关系式为:S2=a2+a4+a5+a6S1=a1+a3+a5+a6S0=a0+a3+a4+a6接收码字为:"0011101"(n=7)求:发送端的信息码。解:1)由海明码的监督关系式计算得S2S1S0=011。2)由监督关系式可构造出下面错码位置关系表: S2S1S0000001010100011101110111错码位置无错a0a1a2a3a4a5a63)由S2S1S0=011查表得知错码位置是a3。4)纠错--对码字的a3位取反得正确码字:"0 0 1 0 1 0 1"5)把冗余码a2a1a0删除得发送端的信息码:"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)=1B=∑(0,1,0,0,1,0)=0C=∑(0,1,0,0,0) =1D=∑(0,1,1,0,0) =04)海明码为:"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)初值=02)求出冗余码的偶校验和,并按码位累加到err中:A=∑(1,0,1,0,1,0)=1 err=err+20=1B=∑(0,0,0,0,1,0)=1 err=err+21=3C=∑(1,1,0,0,0) =0 err=err+0 =3D=∑(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"

(责任编辑:IT教学网)

更多

推荐微软认证文章