汉明码理论与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汉明码理论及编程实现
摘 要:汉明码是一种完备的线性码,它是一种实用的信道编码方法。以理查德·卫斯里·汉明(发明者)的名字命名。汉明码在传输的消息流中加入校验码,当计算机存储或产生数据移动时,可能会发生数据位错误的情况,以其加入的校验码检测并纠正单一比特的错误。
关键词: 纠错;校验;汉明码;MATLAB。
The theory of Hamming code and Programming implementation
Abstract: Hamming code is a complete linear code, it is a practical channel encoding method. Named after Richard Wesley Han (inventor). Hamming code in the transmission of message flow into check code when the computer storage or data error may occur from mobile data, as the parity codes detect and correct single bit error.
Key words: Hamming code; error correction;check。
1、引言
信道编码是由人为地按照一定的规律添加人工剩余,由此使得信息在传输过程中的错误率降低,甚至可完成无错误传输的一种提高信息系统可靠性的编码方法,是现代通信系统广泛采用的一种差错控制措施。在信道编码中,有一类相对可靠高效的码称为汉明码,在理论上已经及其成熟,并且在通信系统中已被广泛应用。本文对汉明码的编码方法、译码方法做一简述,并给出相应的Matlab计算程序。
2、汉明码的组成
汉明码是由位信息位和位校验位组成的一种编码形式。因此对于汉明码的组成,校验位的位数、校验位的位置和校验位的取值为其主要因素。
校验位位数的确定
为了能够准确地对错误进行定位及指出编码差错,增加的校验位位数,需要满足:
校验位位置的确定
对于位的汉明码子主至右进行编号,校验位则设置在位。这样设置的目的是为了保证它们能分别承担n+k位信息中不同数位所组成的“小组”的奇偶检测任务。
校验位的取值
根据校验规则(奇校验或偶校验)的差异,从而最后使得校验位与其所负责校验的小组中1的个数为奇数或偶数。具体情况如下:
检测的小组为1,3,5,7,9,…位;
检测的小组为2,3,6,7,10,11,…位;
检测的小组为4,5,6,7,12,13,14,15…位;
检测的小组为8,9,10,11,12,13,14,15,24,25…位;
其余校验位的小组成员也可类推。
检测成员构成分析
每组中成员位置特点
从每组成员组成的规律进行分析,可以得到如下结论:
(1)第组成员从1开始,以相邻元素个数1为单位,间隔为
的规律增长变化;
(2)第组成员从2开始,以相邻元素个数2为单位,间隔为
的规律增长变化;
(2)第组成员从4开始,以相邻元素个数4为单位,间隔为
的规律增长变化;
(2)第组成员从8开始,以相邻元素个数8
为单位,间隔为
的规律增长变化;
因子分析法
按照规律,分析的方式可以对每组成员的构成进行记忆,该方法采用逆向思维的方法来分析每组成员需要哪些位来进行检测。比如,对于某个班级(信息位)[计算机2班]所开设的课程有多门,而对于这多门课程(校验位)则分别由不同的教师任教。该方法只对信息位进行分析,校验位不做分析。具体的分析方法如下:
对于成员3而言,可以分解为;
对于成员5而言,可以分解为;
对于成员6而言,可以分解为;
对于成员7而言,可以分解为;
...
通过上述分析可以看出,对于任何一个信息位都可以进行因子分解,而构成该信息位的因子必须是2的整数次幂,这些也就是对应的校验位。对于成员3而言,由两位校验位和负责检测;成员5由两位校验位和负责检测;成员6由两位检测位和负责检测;成员7由三位校验位、和负责检测;…通过这样的方式来对每一个信息位进行分析,同样可以得到每位校验位的小组成员。
3 编码原理
奇偶校验是一种增减一个奇偶位来指出之前的数据中包含有奇数个还是偶数个1的校验方式。如果在传输的过程中,有奇数个位发生了改变,那么这个错误将被检测出来(注意:奇偶位本身也可能改变)。一般来说,如果数据中包含有奇数个1的话,则将奇偶位设定为1,即信息在传输中发生错误;反之,如果数据中有偶数个1的话,则将奇偶位设定为0,此时将产生两种情况:信息传输无误或检测不出差错。换句话说,原始数据偶位组成的新数据中,将总共包含偶数个1。 奇偶校验并不一定达成检错的目的,如果数据中有偶数位发生变化,从而奇偶位仍将是正确的,因此不能检测出错误。而且,即使奇偶校验检测出信息位错误,它也不能指出哪一位信息位发生了错误,从而难以进行信息位纠正。从而导致数据需要整体丢弃而且要重新传输。在一个噪声较大的传输媒介中,成功传输数据可能需要很长时间甚至不可能完成。虽然奇偶校验的效果不佳,但是由于它仅仅需要一位额外的信息空间,故这是开销最小的检测方式。并且,如果知道了发生错误的位,奇偶校验还可以恢复数据。 如果一条信息中包含更多用于纠错的位,且通过妥善安排这些纠错位使得不同的出错位产生不同的错误结果,那么我们就可以找出出错位了。在一个7位的信息中,单个数据位出错有7种可能,因此3个错误控制位就足以确定是否出错及哪一位出错了。
一般来说,若汉明码长度为,信息位数量为,监督位数量则为。若用r个监督位建立个监督关系式来达成找出1位错误的码的种可能位置的目的,必须满足
现以数据码110
1为例说明汉明码编码原理,此时D4=1、D3=1、D2=0、D1=1,在P1编码时,先将D4、D3、D1的二进制码相加,结果为奇数3,汉明码对奇数结果编码为1,偶数结果为0(奇数位。若奇数结果编码为0.偶数结果为1,则叫偶数位),因此P1值为1,D4+D2+D1=2,为偶数,那么P2值为0,D3+D2+D1=2,为偶数,P3值为0。这样,参照上文的位置表,汉明码处理的结果就是1101001。在这个4位数据码的例子中,我们可以发现每个汉明码都是以三个数据码为基准进行编码的。下面就是它们的对应表:
汉明码 编码用的数据码
P1 D8、D4、D1
P2 D8、D2、D1
P3 D4、D2、D1
从编码形式上,我们可以发现汉明码是一个校验很严谨的编码方法。在这个例子中,通过对4个数据位的3个位的3次组合检测来达到具体码位的校验与修正目的(不过只允许一个位出错,两个出错就无法检查出来了,这从下面的纠错例子中就能体现出来)。在校验时则把每个汉明码与各自对应的数据位值相加,如果结果为偶数(纠错代码为0)就是正确,如果为奇数(纠错代码为1)则说明当前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位出了问题。
还是刚才的1101的例子,正确的编码应该是1101001,对应D4 D3 D2 D1 P3 P2 P1。如果第三个数据位在传输途中因干扰而变成了1,就成了1111001, 即 D2=1。检测时,P1=D4+D3+D1=1+1+1的结果是奇数3,除以2余数1,原来第一位纠错代码为1,正确。P2=D3+D2+D1的结果是奇数3,除以2余数1,而原来第二位纠错代码为0,有错误。P3=D3+D2+D1的结果是奇数3,除以2余数1,而原来第三位纠错代码为0,有错误。可推断是第2位出现错误。
4 校验方法
如果一条信息中包含更多用于纠错的位,且可经过恰当安排这些纠错位来达到指出不同的出错位产生不同的错误结果的目的,那么就可以找出错误位并加以纠正了。在一个7位的信息中,从单个位来说,有7种出错的可能,因此3个错误控制位就能够确定信息位出错及哪一信息位出错了。
下列通用算法可以为任意位数字产生一个可以纠错一位的汉明码:
1.从1开始给数据位(从左向右)标上序号,1,2,3,4,5...
2.把以上数据位的位置序号转变成二进制表示,1, 10, 11, 100, 101,等。
3.数据位的位置序号中所有为2的幂次方的位(编号1,2,4,8,等,即数据位位置序号的二进制表示中只有一个1)是校验位
4.所有其它位置的数据位(数据位位置序号的二进制表示中至少2个是1)是数据位
5.每一位的数据包含在特定的两个或两个以上的校验位中,这些校验位取决于这些数据位的位置数值的二进制表示
(1) 校验位1覆盖了所有数据位位