目录:
- 话在前面
- 差错控制编码
- 差错控制编码的分类
- 检错码
- 纠错码
- 奇偶校验码
- 海明码
- 校验位的位置
- 码字格式
- 校验位的确定
- 校验位的校验规则(重点)
- 海明编码示例
- 检错和纠错
- 什么是码距
- 海明码的码距
- 海明码的检错与纠错能力
- 海明码的检错与纠错能力理解
- 总结
- 考题
- 最后
- 参考链接
话在前面
最近又过了一遍海明码,就想着给大家分享分享。在写作的过程中,同时又解决了很多疑惑。真应了教学相长
这句话。文章内容较多,建议先收藏,空闲时在观看。
差错控制编码
在数据通讯方面,要求信息传输具有高度的可靠性,即要求误码率足够低。然而实际会有各种干扰对信号造成不良的影响,致使数据在传输过程中出错。
为了满足通讯要求,减少误码出现,一方面要提高硬件的质量,另一方面可以采用差错控制编码。
差错控制编码的基本思想是:在发送端被传送给的信息码序列的基础上,按照一定的规则加入若干"监督码元"后进行传输,这些加入的码元与原来的信息码序列之间存在着某种确定的约束关系。在接收数据时,如果既定的约束关系遭到破坏,则在接收端可以发现传输中的错误,乃至纠正错误。
使用这种方式虽然提高了数据可靠性,但是却增加了信息量的冗余,降低了系统的效率。
差错控制编码的分类
根据码组的分类,可以分为检错码和纠错码两类。
检错码
检错码
是指能自动发现差错的码。
纠错码
纠错码
是指不仅能发现差错而且能自动纠正错误。
奇偶校验码
这是一种简单的检错码
,是在传输数据后附加一位监督位,使该组码连同监督位在内的码组
中的"1"的个数为偶数(称为偶校验)或奇数(称为奇校验)。
奇偶校验码的这种监督关系可以用公式表示。设该组码长度为n,表示为(, , , ,),其中前n-1位为信息码元,第n位为监督位。
在偶校验时有:⊕⊕······⊕ = 0在奇校验时有:⊕⊕······⊕ = 1
海明码
海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码
的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。
校验位的位数
一般来说,若信息长为n,信息位数为k,则监督位数r=n-k,如果希望用r个监督位构造除r个监督关系式来指示一位错误码的n中可能位置。则要求:
2r - 1 >= n 或者 2r >= k + r + 1
推导并使用信息长度为k位的码字的海明码,所需步骤如下:
- 确定最小的校验位数将它们记成、、…、,每个校验位符合不同的奇偶测试规定。
- 原有信息和 r 个校验位一起编成长为 k+r 位的新码字。选择r校验位(0或1)以 满足必要的奇偶条件。
- 对所接收的信息作所需的 r 个奇偶检查。
- 如果所有的奇偶检查结果均为正确的,则认为信息无错误。
如果发现有一个或多个错误,则错误的位由这些检查的结果来唯一地确定。
码字格式
校验位的位置
r 个校验位是通过对 k+r 位复合码字进行奇偶校验而确定的。校验位置在位置上,例如:1、2、4、8...
第n位校检码校检的起始位置为,并从当前位置开始校验位,每隔位在校检位。
当n=1时,第1位校检码校检的起始位置为1,并从当前位置开始校验1位,每隔1位在校检1位。当n=2时,第2位校检码校检的起始位置为2,并从当前位置开始校验2位,每隔2位在校检2位。当n=3时,第3位校检码校检的起始位置为4,并从当前位置开始校验4位,每隔4位在校检4位。
所以有以下结果:
校验位的校验规则
上面说第一位校验位校验1、3、5、7位,但是为什么校验这些位却没有说。包括一些教材也都没有说明缘由。
- P1对应的位置为B1,即第001(1)位, 该二进制第一位为1,所以P1监督的是位数为二进制表示的第一位为1的所有位。
- P2对应的位置为B2,即第010(2)位, 该二进制第二位为1,所以P2监督的是位数为二进制表示的第二位为1的所有位。
- P3对应的位置为B4,即第100(4)位, 该二进制第三位为1,所以P3监督的是位数为二进制表示的第三位为1的所有位。
我们来看一张表格,就知道是什么意思了。如下图:
这就就是P1监控1、3、5、7位的原因。P2、P3同理。这部分才是精髓,一定要理解。
海明编码示例
若有四位信息码:1101,进行偶校验,求编码之后的海明编码。
根据前文提到的校验规则,可以得知,根据校验码的位置:
检错和纠错
在原有的编码系统中插入若干校验位,能够提高系统的码距,从而能够实现检错和纠错的功能。
什么是码距
码距是编码系统中两个编码之间不同的二进制的位数。
假如四位信息码中,编码范围为0000~1111。例如数据1001和数据0000的码距就是2,因为它们的第1和第4位数据不同,所以码距是2。
但是我们通常关心的是编码系统中的最小码距。即最小的那个值。例如四位编码系统中的数据0000和0001,最小码距为1,没有比这个码距更小的值了。
增加码距为何能提高纠错能力?
这里举个极端的例子,假如说我的编码系统中,经过编码之后的数据只会出现数据0000 0000
和1111 1111
两种可能。即最小码距为8。
但是我在接收方却收到了数据0000 0001
,这个编码明显不在我的编码系统中,数据一定是被干扰了。假设发送数据为0000 0000
则最低位被干扰了,可能性较大。假设发送是数据为1111 1111
则高七位被干扰了,可能性较小。
由于数据0000 0001
最接近0000 0000
,从而断定发送方数据为0000 0000
,继而达到纠错的功能。检错的功能也类似。
海明码的码距
首先我们说的海明码通常指的是(n,k)=(7,4),即编码长度为7位、信息位为4、校验位为3位的海明码,所以通常叫74海明码。
关于海明码的码距,在网络上搜了大量的资料,也没见到说的比较明白的,果然还是得靠自己啊。
既然最小码距是编码系统中码距的最小值。那我们直接把4位信息码经过海明码编码后的所有可能穷举出来,找到最小值即可,请看下面这张表格。
通过观察上面这个表可以得知,经过插入三个校验位,任意两个编码之间不同的二进制位最小值为3,所以74海明码的最小码距为3
。
海明码的检错和纠错能力
码距和纠错的能力有如下关系:
- 如果要检测e个错误,最小码距应该满足:
D >= e + 1
- 如果要纠正t个错误,最小码距应满足:
D >= 2*t+1
- 如果要检测e个错误同时纠正t个错误,最小码距应该满足:
D >= e + t + 1(e>t)
根据上述公式和海明码的最小码距为3可以得知,海明码能够检测两位错误或者纠正一个错误
。
海明码检2纠1理解
在接收方,也可根据这3个校验方程对接收到的信息进行,同样的奇偶测试:
- A=B1⊕B3⊕B5⊕B7
- B=B2⊕B3⊕B6⊕B7
- C=B4⊕B5⊕B6⊕B7
假如只有一位数据出错,错误位置就可简单地用二进制数CBA指出。如果CBA=000,则说明没有错。若CBA不等于0,说明有错。假如B5位出错。根据上述校验可得CBA=101,刚好是十进制5。也代表是第五位出现错误。
但是当有两位错误的时候,例如B3和B6同时出错,CBA仍然是等于101。
可以观看下面的图,比较直观。
海明码检错纠错
总结
- 常说的海明码指的是(n,k)=(7,4)海明码,信息为为4,监督位为3,总长7位
- 海明码的最小码距为3
- 海明码能够检两位错或者纠正一位错误
- 海明码默认采用偶校验
考题
看了这么多,做两题练练手吧,请问下面两句话表述是否正确。
- [ ] 一个码距为1的编码系统加上奇偶校验位时码距变为2
- [ ] 一个码距为2的编码系统加上奇偶校验位时码距变为3