本文以1010为例讲解
一:求海明码
必要的公式
2 p ≥ m + p + 1 2^p \geq m+p +1 2p≥m+p+1
m m m表示数据的位数, p p p表示校验码的位数
为什么?
因为 2 p 2^p 2p 表示总共可以的错误信息数量,应该大于等于{数据位数(m)+校验位数(p)+1个正确的情况}。
下面看我们1010的例子,知道1010这个数据的长度为4,即得到 m = 4 m=4 m=4,带入上述公式得到 p = 3 p=3 p=3
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 1 | 1 | 1 |
将序号以二进制的形式列在表里
| 1 (0 0 1) | 2 (0 1 0) | 3 (0 1 1) | 4 (1 0 0) | 5 (1 0 1) | 6 (1 1 0) | 7 (1 1 1) |
| p1 | p2 | 1 | p3 | 0 | 1 | 0 |
如何求解 p 1 , p 2 , p 3 p_1, p_2, p_3 p1,p2,p3呢?
p 1 p_1 p1对应看三位二进制数的第一位,如果第一位是1,则与之对应,如果不是1,则不对应,如下表,易得到 p 1 p_1 p1与3(011),5(101),7(111)对应,即得到 p 1 p_1 p1与 m 3 , m 5 , m 7 m_3, m_5, m_7 m3,m5,m7对应。
p 2 , p 3 p_2, p_3 p2,p3与 p 1 p_1 p1计算同理,都见下面三个表。
| 1 (0 0 1) | 2 (0 1 0) | 3 (0 1 1) | 4 (1 0 0) | 5 (1 0 1) | 6 (1 1 0) | 7 (1 1 1) |
| ↑ | ↑ | ↑ |
| 1 (0 0 1) | 2 (0 1 0) | 3 (0 1 1) | 4 (1 0 0) | 5 (1 0 1) | 6 (1 1 0) | 7 (1 1 1) |
| ↑ | ↑ | ↑ |
| 1 (0 0 1) | 2 (0 1 0) | 3 (0 1 1) | 4 (1 0 0) | 5 (1 0 1) | 6 (1 1 0) | 7 (1 1 1) |
| ↑ | ↑ | ↑ |
由上述三个表,得 p 1 , p 2 , p 3 p_1, p_2, p_3 p1,p2,p3的值,计入下表
| p 1 p_1 p1 | m 3 m_3 m3 | m 5 m_5 m5 | m 7 m_7 m7 |
|---|---|---|---|
| p 2 p_2 p2 | m 3 m_3 m3 | m 6 m_6 m6 | m 7 m_7 m7 |
| p 3 p_3 p3 | m 5 m_5 m5 | m 6 m_6 m6 | m 7 m_7 m7 |
转换得到下面的表格
| p 1 p_1 p1 | 1 | 0 | 0 |
|---|---|---|---|
| p 2 p_2 p2 | 1 | 1 | 0 |
| p 3 p_3 p3 | 0 | 1 | 0 |
如果是奇校验
| 奇校验 | 偶校验 | |
|---|---|---|
| p 1 p_1 p1 | 0 | 1 |
| p 2 p_2 p2 | 1 | 0 |
| p 3 p_3 p3 | 0 | 1 |
由上表可知,如果是奇校验,则有
p 1 = 0 ; p 2 = 1 ; p 3 = 0 p_1=0; \space p_2=1 ;\space p_3=0 p1=0; p2=1; p3=0
可得1010的海明码为
| 校验类型 | 1 (0 0 1) | 2 (0 1 0) | 3 (0 1 1) | 4 (1 0 0) | 5 (1 0 1) | 6 (1 1 0) | 7 (1 1 1) |
| 奇校验 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 偶校验 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
即最终的奇校验海明码为: 0110010 0110010 0110010,偶校验海明码为: 10111010 10111010 10111010
二、校验:
1、例一
| 序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 发送(奇校验) | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 接收(奇校验) | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
如上表,以奇校验为例:
发送的序列: 0110010 0110010 0110010
接收的序列: 0110110 0110110 0110110
很容易见得,接受到的信号的第5位出错(表中标红)。
我们按照约定的规则,如下表:
| p 1 p_1 p1 | m 3 m_3 m3 | m 5 m_5 m5 | m 7 m_7 m7 |
|---|---|---|---|
| p 2 p_2 p2 | m 3 m_3 m3 | m 6 m_6 m6 | m 7 m_7 m7 |
| p 3 p_3 p3 | m 5 m_5 m5 | m 6 m_6 m6 | m 7 m_7 m7 |
将接收到的信号对号入座,得下表
| 0 | 1 | 1 | 0 |
|---|---|---|---|
| 1 | 1 | 1 | 0 |
| 0 | 1 | 1 | 0 |
计算错误码:
| e 1 e_1 e1 | 0 | 1 | 1 | 0 |
|---|---|---|---|---|
| e 2 e_2 e2 | 1 | 1 | 1 | 0 |
| e 3 e_3 e3 | 0 | 1 | 1 | 0 |
按照奇校验规则,得三个错误码分别为:
e 1 = 1 ; e 2 = 0 ; e 3 = 1 e_1 = 1;\space e_2=0; \space e_3=1 e1=1; e2=0; e3=1
按照位权关系,得错误码 e 3 e 2 e 1 = 101 e_3e_2e_1 = 101 e3e2e1=101
即,
e 3 e 2 e 1 = 5 e_3e_2e_1 = 5 e3e2e1=5
得错误位为第五位。校验正确。
2、例二
| 序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 发送(偶校验) | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 接收(偶校验) | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
如上表,以偶校验为例:
发送的序列: 0110010 0110010 0110010
接收的序列: 0110111 0110111 0110111
很容易见得,接受到的信号的第7位出错(表中标红)。
我们按照约定的规则,如下表:
| p 1 p_1 p1 | m 3 m_3 m3 | m 5 m_5 m5 | m 7 m_7 m7 |
|---|---|---|---|
| p 2 p_2 p2 | m 3 m_3 m3 | m 6 m_6 m6 | m 7 m_7 m7 |
| p 3 p_3 p3 | m 5 m_5 m5 | m 6 m_6 m6 | m 7 m_7 m7 |
将接收到的信号对号入座,得下表
| 1 | 1 | 0 | 1 |
|---|---|---|---|
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 |
计算错误码:
| e 1 e_1 e1 | 1 | 1 | 0 | 1 |
|---|---|---|---|---|
| e 2 e_2 e2 | 0 | 1 | 1 | 1 |
| e 3 e_3 e3 | 1 | 0 | 1 | 1 |
按照偶校验规则,1的个数全为奇数,得三个错误码分别为:
e 1 = 1 ; e 2 = 1 ; e 3 = 1 e_1 = 1;\space e_2=1; \space e_3=1 e1=1; e2=1; e3=1
按照位权关系,得错误码 e 3 e 2 e 1 = 111 e_3e_2e_1 = 111 e3e2e1=111
即,
e 3 e 2 e 1 = 7 e_3e_2e_1 = 7 e3e2e1=7
得错误位为第七位。校验完成。
3、例三
| 序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 发送(奇校验) | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 接收(奇校验) | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
按照奇校验规则
发送的序列: 0110010 0110010 0110010
接收的序列: 0110010 0110010 0110010
很容易见得,接受到的信号没有出错。
我们按照约定的规则,如下表:
| p 1 p_1 p1 | m 3 m_3 m3 | m 5 m_5 m5 | m 7 m_7 m7 |
|---|---|---|---|
| p 2 p_2 p2 | m 3 m_3 m3 | m 6 m_6 m6 | m 7 m_7 m7 |
| p 3 p_3 p3 | m 5 m_5 m5 | m 6 m_6 m6 | m 7 m_7 m7 |
将接收到的信号对号入座,得下表
| 0 | 1 | 0 | 0 |
|---|---|---|---|
| 0 | 1 | 1 | 1 |
| 0 | 0 | 1 | 0 |
计算错误码:
| e 1 e_1 e1 | 0 | 1 | 0 | 0 |
|---|---|---|---|---|
| e 2 e_2 e2 | 0 | 1 | 1 | 1 |
| e 3 e_3 e3 | 0 | 0 | 1 | 0 |
按照奇校验规则,1的个数均为奇数,得三个错误码分别为:
e 1 = 0 ; e 2 = 0 ; e 3 = 0 e_1 = 0;\space e_2=0; \space e_3=0 e1=0; e2=0; e3=0
按照位权关系,得错误码 e 3 e 2 e 1 = 000 e_3e_2e_1 = 000 e3e2e1=000
即,
e 3 e 2 e 1 = 0 e_3e_2e_1 = 0 e3e2e1=0
本文详细介绍了海明码的计算方法,包括如何根据数据位数确定校验位数,通过实例演示奇校验和偶校验的编码过程,并展示了校验码如何帮助检测和纠正接收数据的错误。通过三个步骤的校验规则,读者能理解并实践海明码在实际通信中的作用。
8457

被折叠的 条评论
为什么被折叠?



