解释一下 海明码 和 海明码的工作原理

海明码(Hamming)是能进行检错和纠错的一种编码方法。

要能纠错就需要知道哪一位发生错误,海明码就可以检测出哪一位发生了错误。

例如一个信息码长m位,加入k个校验码后,整个数据长度为(m+k)个。当数据某一位出错时,就可以通过校验码检测出来是哪一位错了。

其中k个校验码可以表示2的k次方种信息,例如:1个校验码:表示01,10两种信息;2个校验码可以表示00,01,10,11共4种信息。

所以用k个校验码,就可以表示2的k次方种信息码传输的情况,其中只有一种代表数据没有错误,去掉这种“没有错误”的情况,就是(2的k次方-1)个错误情况。

当满足(2的k次方-1)>= (m+k) 时,(其中m+k时编码后数据的总长度),就可以判断出哪一位出错,出错的位置可能是信息码和校验码,也就是说 校验出错误情况的个数要大于或等于数据的长度才能保证能检出所有错误的情况。

举个例子:m=4,k=2 则(2的2次方-1)=3种情况,m+k=6 位长度。3种错误位明显不能代表6位的所有可能出现错误情况。

再举个例子:m=4,k=3则(2的3次方-1)=7种情况 ,m+k=7位长度。7种错误位就足够代表7位数据码出现的错误情况了。

下面演示一下海明码的使用过程:

信息码:1010

校验码:k 个

step1:

利用海明码不等式:(2的k次方-1)>= (m+k) 求出 k=3

序号1234567
数据k1k21k3010

step2:

校验码放在2的n次方对应位置上(n=0,1,2,3...),这里共3个校验位,2的0次方=1,2的1次方=2,2的2次方=4,所以校验码分别在第1,第2,第4个位置。

接着信息码在剩下的位置依次入座,分别对应第3,第5,第6,第7的位置,得到如上图所示的编排位置。

因为校验码未知,现在求校验码k1,k2,k3:

序号

1

(001

2

(010)

3

(011

4

(100)

5

(101

6

(110)

7

(111

数据k1k21k3010

如上图:把序号进行二进制编码(括号内的值)。按照规律:验证码对应的二进制码' 1 '显示的位置(上图红色标出了k1组,验证码k1对应的二进制码001,1显示在最后一位,所以找出最后一位是1的所有信息码,分别是第3,第5,第7位信息码。剩余两组也是以此类推),最后会找出三个校验码k1,k2,k3和分别对应的一组信息码。如下所示:

k1:1 0 0

k2:1 1 0

k3:0 1 0

现在进行数据传输。如果使用奇校验,校验码k1=0,k2=1,k3=0

0:1 0 0

1:1 1 0

0:0 1 0

得出校验码后代入数据,完整数据码如下图所示:

1234567
0110010

假设进行传输后,接收结果是0110110,现在进行校验,把接收结果0110110对应的校验码和信息码组写下来:

序号

1

(001

2

(010)

3

(011

4

100)

5

101

6

110)

7

111

接收结果0110110
校验码010

接收到的 校验码和其对应的信息码组如下所示(编排方法跟上面step2一样,这里校验码已知)

k1:1 1 0

k2:1 1 0          

k3:1 1 0

在前面分别加上错误位置e:

e1:k1 1 1 0                                   e1:0 1 1 0                                   则e1=1

e2:k2 1 1 0    --(接收码已知k)-->  e2:1 1 1 0    --(对e奇校验)-->     则e2=0

e3:k3 1 1 0                                   e3:0 1 1 0                                   则e3=1

得到错误码顺序为101,把错误码倒过来变为101,101对应的二进制值是5,则说明接收到的数据第5位发生了错误。这样就可以进行纠错的步骤了。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值