汉明码的编码和译码算法

汉明码(Hamming)的编码和译码算法
    本文所讨论的汉明码是一种性能良好的码,它是在纠错编码的实践中较早发现的一类具有纠单个错误能力的纠错码,在通信和计算机工程中都有应用。例如:在“计算机组成原理”课程中,我们知道当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错。简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。如果对汉明码作进一步推广,就得出了能纠正多个错误的纠错码,其中最典型的是BCH码,而且汉明码是只纠1bit错误的BCH码,可将它们都归纳到循环码中。
    各种码之间的大致关系显示如下。
一、 汉明码的编码算法
输入:信源消息u(消息分组u
输出:码字v
处理:
    信源输出为一系列二进制数字01。在分组码中,这些二进制信息序列分成固定长度的消息分组(message blocks)。每个消息分组记为u,由k个信息位组成。因此共有2k种不同的消息。编码器按照一定的规则将输入的消息u转换为二进制n维向量v,这里n >k。此n维向量v就叫做消息u的码字(codeword)或码向量(code vector)。 因此,对应于2k种不同的消息,也有2k种码字。这2k个码字的集合就叫一个分组码(block code)。若一个分组码可用,2k个码字必须各不相同。因此,消息u和码字v存在一一对应关系。由于n符号输出码字只取决于对应的k比特输入消息,即每个消息是独立编码的,从而编码器是无记忆的,且可用组合逻辑电路来实现。
   
    定义:一个长度为n,有2k个码字的分组码,当且仅当其2k个码字构成域GF(2)上所有n维向量组成的向量空间的一个K维子空间时被称为线性(linear(n, k)
    汉明码(nkd)就是线性分组(n, k)码的一种。其编码算法即为使用生成矩阵Gv = u·G
1-1:针对汉明码Hamming (7,4,3)而言,u=(u0,u1,u2,u3)v=(v0,v1,v2,v3,v4,v5,v6),则我们有 (v0,v1,v2,v3,v4,v5,v6)=(u0,u1,u2,u3) ·G
Hamming (7,4,3) 的生成矩阵G为:
G =
(v0,v1,v2,v3,v4,v5,v6) =(u0,u1,u2,u3) ·
所以我们有:
v0= u0,
v1= u1,
v2= u2,
v3= u3,
v4= u0+u1+u2,
v5= u1+u2+u3,
v6=u0+u1+u3,
例如u=1101,对应→v=1101001。处理完毕。
其他汉明码照此处理,甚至其他线性分组(n, k)码都照此办理即可。            线性分组(n, k)码的校正子(伴随式)有2n-k个,设该码的纠错能力为t,那么重量小于或者等于t的所有错误模式(图样)都要有唯一的校正子(伴随式)与之对应,因而,对于二进制(n, k)码,有汉明限:2n-k,当2n-k=时,
(n, k)码称为完备码(Perfect Code)。完备码的伴随式得到了充分的利用,不存在解码不唯一的问题,然而完备码不一定是纠错能力强的码,因为它的最小距离dmin未必最大。完备码也是稀少的,已知的二进制完备码有t=1的汉明码(Hamming  Code)和t=3的格雷码(Golay Code),以及n为奇数的简单重复(n,1)码。三进制完备码有t=2的(11,6,5)格雷码。
纠错能力t=1的完备码统称为汉明码。由定义可知,(n, k)汉明码应当满足下列条件:2n-k=1+n ,令校验位长m=n-k,那么容易知道:
n=2m-1, k=2m-1-m, dmin=3
汉明码的校验矩阵H具有特殊的性质:它的m维列向量正好是除零向量以外的所有可能的向
量组合,共有2m-1个,恰好构成了H矩阵的列数n
格雷码通常是指线性分组(23,12)码,最小距离dmin=7,纠错能力 t=3。由于223-12=2048=1+  ,所以格雷码是完备码,其码重(码的重量)分布见下面表0-1
0-1  格雷码的码重分布
码重
0
7
8
11
12
15
16
23
码个数
1
253
506
1288
1288
506
253
1
备注:
    1、汉明码的生成矩阵:
Hamming (7,4,3) 的生成矩阵G
Hamming (17,12,3) 的生成矩阵G
Hamming (13,9,3) 的生成矩阵G
Hamming (15,11,3) 的生成矩阵G
Hamming (16,11,4) 的生成矩阵G
2、除了分组码之外,还有卷积码。卷积码编码器同样接受k比特分组的信息序列u,并产生n符号组的编码序列(码序列)v(卷积码编码中,符号uv用来表示分组的序列而非单个分组)。但是,每一个编码分组不仅取决于当前单位时间对应的k比特消息组,而且与前m个消息组有关。此时,编码器的存储级数(memory order)m。编码器所产生的所有可能的输出编码序列的集合构成了一个码。比值R=k/n称为码率(code rate)。由于编码器有存储单元,因而必须采用时序逻辑电路实现。

二、 汉明码的译码算法
输入:接收向量r
输出:译码所得码字v*
处理:
考虑一个nk线性分组码,其生成矩阵为G,奇偶校验矩阵为H。令v=( v0,v1, … ,vn-
1)表示要通过有噪信道传输的码字,r = (r0,r1, … ,rn-1)为信道输出端接收到的码字。由于信道中的噪声,r可能与v不同。向量和e= r +v=( e0,e1,…,en-1)是一个n维向量,其中ri vi时,ei=1,而ri= vi时,ei=0。该n维向量e称为差错向量(error vector)或错误模式或错误图样(error pattern, 它直接指出接收向量r不同于传输码字v的位置。e中的1表示由于信道噪声引起的传输差错(transmission errors)。
    接收向量r的译码包括如下三个步骤:
1、 计算r的校正子(伴随式)s = r·HT
2、 确定校正子伴随式)s = r·HT对应的陪集首el,于是el被假定为由信道引起的错误模式(错误图样);
3、 将接收向量r译为码字v*=r+ el 
上述译码方案被称为校正子伴随式)译码(syndrome decoding)或查表译码(table lookup decoding
2-1Hamming (7,4,3) 的生成矩阵G= [ Ik  P ]k×n
=
则奇偶校验矩阵H
H = [ PT  In-k ](n-k)×n=,这里n=7, k=3
该码有23=8个陪集:
校正子s
可纠正错误模式(陪集首)el
s0  s1  s2
e0  e1  e2  e3  e4  e5  e6
0    0    0
0    0    0    0    0    0    0
1    0    1
1    0    0    0    0    0    0
1    1    1
0    1    0    0    0    0    0
1    1    0
0    0    1    0    0    0    0
0    1    1
0    0    0    1    0    0    0
1    0    0
0    0    0    0    1    0    0
0    1    0
0    0    0    0    0    1    0
0    0    1
0    0    0    0    0    0    1
    假设传输码字为v=1110100,接收向量为r=0110100(错1位),其校正子s= r·HT=101, 对应e=1000000v*=r + e=1110100,所以译码正确!
假设传输码字为v=1110100,接收向量为r=0110000(错2位),其校正子s= r·HT=001, 对应e=0000001v*=r + e=0110101,所以译码错误!
可以看出:汉明码Hamming (7,4,3)可以纠正含单个差错的错误模式或者检测出含两个差错的错误模式(而不能纠正含两个或两个以上差错的错误模式)。
2-2Hamming (17,12,3) 的生成矩阵G= [ Ik  P ]k×n=
奇偶校验矩阵H = [ PT  In-k ](n-k)×n=
该码有25=32个陪集:
校正子s
可纠正错误模式(陪集首)el
s0s1s2s3s4
e0e1e2卷积编码e3e4e5e6e7e8e9e10e11e12e13e14e15e16
0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 1
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 1
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
1 1 0 1 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 1 1 0 1
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
1 0 1 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 1 0 1 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 1 0 1
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
0 0 0 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
0 1 0 0 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1
0 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
1 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
0 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0
1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
1 0 1 0 1
1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
1 0 1 1 0
1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 1 1 1 1
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
1 1 1 1 0
1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 1 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
1 0 0 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
1 1 0 0 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
1 0 1 1 1
0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0

本文发布于:2024-09-23 19:24:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/378050.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:汉明码   错误   矩阵
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议