计算机网络海明码计算原理,海明码原理与计算

一、设计

1.1 编码位数

以要发送1101这个数据为例子,假设校验码有m位。为了满足一位纠错能力(即知道哪一位出现了错误),则m位纠错码101这个数据为例子,假设校验码有m位。为了满足一位纠错能力(即知道哪一位出现了错误),则m位纠错码需要能表示4+m+1种状态(+1为没有错的状态)

因此可以推出,若有n位数据,m位校验码,计算插入的校验码位数的公式为:

$$

2^m>m+n+1

$$

1.2 校验方式

使用异或进行校验

由异或的性质可知,如果一个数于它自己本身进行异或,结果为0

假设存在一组数(a1, a2, a3, a4) 设 p = a1 ^ a2 ^ a3 ^ a4

将p和(a1, a2, a3, a4)一起, 设接受端收到的数据为(a1' ,a2' , a3' ,a4' , p')

若发生了1位错误 则 a1' ^ a2' ^ a3' ^ a4' ^ p' = 1,就代表(a1, a2, a3, a4)当中存在传输错误。但这样不能具体知道哪一位出现了错误,则可以使用相交分组的部分,就可以确定哪一位出错。

1460000022053427

其中标黄的的位为每组的p,通过相交发部分,就可以确定每一位的内容,而具体分组方式,由1.3中接受端的状态码决定

1.3 状态码

在1101当中,组成的二进制值可以表示8种状态,如下(注意,这里的P3 P2 P1码值 并不是原始插入校验码数据,是接收方用来分辨状态的码值)

P3

P2

P1

value

0

0

0

0

0

0

1

1

0

1

0

2

0

1

1

3

1

0

0

4

1

0

1

5

1

1

0

6

1

1

1

7

为了让状态码值 和 接收的各组数据异或组成的值可以对应起来,则需要按1.2中的分组

二、编码

2.1 计算插入位数

$$

2^m>m+n+1

$$

2.2 计算插入位置

校验码在二进制串中的位置为2的整数幂,即1、2、4、8、16……..剩下的位置是信息码

1

2

3

4

5

6

7

P1

P2

D1

P3

D2

D3

D4

2.3 计算校验码值

从第$2^{n-1}$位开始校验,校验$2^{n-1}$位个,然后跳过$2^{n-1}$位个

1

2

3

4

5

6

7

P1

P2

D1

P3

D2

D3

D4

1

0

1

0

1

0

1

三、解码

接收数据后,进行如下计算

G3 = P3 ^ D2 ^ D3 ^D4

G2 = P2 ^ D1 ^ D3 ^D4

G1 = P1 ^ D1 ^ D2 ^D4

以{P3, P2, P1}, 组成的状态码,查询对应状态

G3

G2

G1

有问题的位

0

0

0

没有问题

0

0

1

1

0

1

0

2

0

1

1

3

1

0

0

4

1

0

1

5

1

1

0

6

1

1

1

7

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值