【考研计网:专题版】海明编码

感谢文章:说人话,人话!! 汉明码(海明码、hamming code)通俗易懂的解释,说人话!!!! 带给我的启发

1. 老鼠试药

先讲一个脑筋急转弯:假如现在有7瓶药,其中有且只有一瓶有毒,现在3只白老鼠,我们怎样找到那一瓶有毒的药呢?

处理的方法如图把小白鼠吃的药分组:

在这里插入图片描述
我们分为三个组,使得每一个 组交区域和单独区域都有且仅有一个标号,这样一来我们就能根据小白鼠的发病情况知道哪一瓶药有毒了。

我们再进一步思考?

三只白老鼠最多能测试7瓶药,那么四只白老鼠最多能测试几瓶药呢?…n只白老鼠能测试几瓶药呢?

这个计算是根据一定的规律来的,n瓶药,最多可以满足 组交区域和单独区域都有且仅有一个标号的情况测试: 2 n − 1 2^n-1 2n1瓶药。


2. 海明编码的发送实现

海明编码的原理和这个脑筋急转弯有着异曲同工之妙,同理,我们先思考:我们有x位校验码的情况下最多能检验多少位的正常数据呢?

一样的,最多可检验 2 x − 1 2^x-1 2x1位数据。(但是我们不要忘记这样一个约束:假设最多仅有一位发生错误

海明编码因为能知道错的是哪一位,所以他可以具备纠错的能力,因此我们把海明编码叫做纠错编码

我们每一位的校验码就是针对每一个组别的位编码出来得到的结果。

所以,我们先看下怎样对我们的数据进行分组。

比如说现在有4位的数据,那么我们将采用3位( 2 3 − 1 = 7 > 4 2^3-1=7>4 231=7>4) 的校验码来进行海明编码。

我们怎样分组才能达到:组交区域和单独区域都有且仅有一个标号 的情况呢?

我们观察标号满足这样的

  • xx1:1,3,5,7
  • x1x:2,3,6,7
  • 1xx:4,5,6,7

假如现在我们要对 1101

我们规定海明编码的位置如下:(方便硬件实现)

【 P 1 】 【 P 2 】 D 1 【 P 3 】 D 2 D 3 D 4 【P_1】【P_2】D_1【P_3】D_2D_3D_4 P1P2D1P3D2D3D4

【 P 1 】 【 P 2 】 1 【 P 3 】 101 【P_1】【P_2】1【P_3】101 P1P21P3101

如果要使得: P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 = 0 P_1\oplus D_1 \oplus D_2 \oplus D_4 =0 P1D1D2D4=0,那么 P 1 = 1 P_1 = 1 P1=1

如果要使得: P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 = 0 P_2\oplus D_1 \oplus D_3 \oplus D_4 =0 P2D1D3D4=0,那么 P 2 = 0 P_2= 0 P2=0

如果要使得: P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 = 0 P_3\oplus D_2 \oplus D_3 \oplus D_4 =0 P3D2D3D4=0,那么 P 3 = 0 P_3= 0 P3=0

我们发送的海明编码就是: 1010101 1010101 1010101


3. 接收方的检验和纠错

假如对方接收到的是 1010111 1010111 1010111

先画出位置图和分组图:

  • (P1)xx1:1,3,5,7
  • (P2)x1x:2,3,6,7
  • (P3)1xx:4,5,6,7

【 P 1 】 【 P 2 】 D 1 【 P 3 】 D 2 D 3 D 4 【P_1】【P_2】D_1【P_3】D_2D_3D_4 P1P2D1P3D2D3D4

针对我们得到的编码: 1010111 1010111 1010111
P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 = 0 P_1\oplus D_1 \oplus D_2 \oplus D_4 =0 P1D1D2D4=0,P1校验正确

P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 = 1 P_2\oplus D_1 \oplus D_3 \oplus D_4 =1 P2D1D3D4=1,P2校验错误

P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 = 1 P_3\oplus D_2 \oplus D_3 \oplus D_4 =1 P3D2D3D4=1,P3校验错误

看上面的分组图:P2和P3错误的话,也就是有6或者7错误了,但是P1正确,也就是7没错,那就是6错了

我们也可以利用: P 3 P 2 P 1 = 110 P_3P_2P_1 = 110 P3P2P1=110得到是第6位的错误

那就是 D 3 D_3 D3错了,所以纠错之后就是: 1010101 1010101 1010101 和发送的时候就一致了。


4. 海明距公式

需要纠错d位,需要的海明距为2d+1的编码方案,检错d位,需要的海明距为d+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值