海明码(汉明码)简单学习

当初学计算机网络的时候就仔细研究过汉海明码的原理,今天又看了一下感觉网络上说的都太复杂了,我想用很直观的方法来展示出来它的原理。

首先汉明码具有检错纠错功能,不过只能纠正一位错误。不多说了,上干货:

1.确定校验位的位数:要传送的信息位数为m,校验位为r。需要满足m+r+1<=2r

eg:要传送的是(100101)6位数据,得出5+r+1<=2r,r>=4,所以就至少需要4位校验位。

2.确定校验位的位置:令m+r=n,将n位数据按1,2,3…n-1,n.排好。那么校验位的位置在2^i处(i=0,1,2,…)即在第1,2,4,8,16…处,剩下的位置就是

数据位的位置啦。不明白?那就上例子呗~

eg:还是传送数据(100101)6位数据,加上4位校验位(P1,P2,P3,P4)总共10位数据(P1,P2,B3,P4,B5,B6,B7,P8,B9,B10).那么P1,P2,P3的位置在

第1、2、4、8位.所以实际传送的数据是这样的P1 P2 1 P3 0 0 1  P4 0 1.

3.确定校验位的值:确定校验位的值要首先确定采用奇校验还是偶校验。以偶校验为例

P1=B3⊕B5⊕B7⊕B9…

P2=B3⊕B6⊕B7⊕B10⊕B11…

P4=B5⊕B6⊕B7⊕B11⊕B12⊕B13⊕B14…

P8=B9⊕B10⊕B11⊕B12⊕B13⊕B14⊕B15…

这里就要注意了,你可能会问为什么要这样,校验位为什么是几个数据抑或(⊕)的和?为什么P1是这几个数的和,而P2又是另外几个数的和,他们是怎么组合的呢?(很棒,你是个会思考的孩子)。

对于第一个问题:

我们说了我们采用的校验方法是偶校验,拿P1来说,它要使得P1,B3,B5,B7…这个数列中1的个数为偶数个。那么可以用上面的公式来求得P1的值为0。原因是比如上例数据100101,其中B3、B5、B7、B9为1、0、1、0,则1的个数为2个为偶数个,那么P1只要为0就可以满足P1,B3,B5,B7…中1的个数为偶数个了。其他的P2、P3、P4同理。

对于第二个问题:

这是个很妙的事情,对于Pi,从Pi开始连续i位然后隔i位连续i位直至最后相抑或(⊕)得到Pi。比如P4=B5⊕B6⊕B7⊕B12⊕B13⊕B14⊕B15…。等号后边是从P4开始(包括P4)连续4位再跳过4位(B8,B9,B10,B11)再连续4位B12,B13,B14,B15…这些位相抑或(⊕)得到P4。其他的校验码同理。

好了,解决上面的问题你应该知道该怎么求海明码了吧?!咱们在上一个例子来看一下:

我们要传送的数据是100101.那么要传送的数据是:P1 P2 1 P4 0 0 1  P8 0 1.

P1=B3⊕B5⊕B7⊕B9=1⊕0⊕1⊕0=0

P2=B3⊕B6⊕B7⊕B10=1⊕0⊕1⊕1=1

P4=B5⊕B6⊕B7=0⊕0⊕1=1

P8=B9⊕B10=0⊕1=1

所以实际传送的数据是0111001101.

好了,说了这么多你明白了吗?唉、、、我写的时候差点搞错。额、、、才艺不精!

4.数据的检验和纠错:我们在接收端接收到数据之后又是怎么样实现检错纠错的呢?等我考完试再写吧、、、 

 

 

 

转载于:https://www.cnblogs.com/rainvector/p/3509522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值