海明码的检错机制及程序实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

海明码的检错机制及程序实现
浙江省慈溪实验中学 张利波 315300
当数字信号在介质中传输时,由于信道热燥声或环境燥声干扰,导致传输错误,这就引出了两个问题:如何检测错误?如何纠正错误?这里将用程序的方法来模拟海明码实现纠错的编码方式。

【海明码介绍】
海明码是由R.Hammingy1950年提出的,是一种纠正一比特错的编码,其基本思想是:在k 比特信息上附加r 比特冗余信息(也称校验比特),构成n=k+r 比特的码字,其中每个校验比特和某几个特定的信息比特构成偶校验的关系。

校验比特数r 和信息比特k 满足条件:2^r ≥n+1=k+r+1。

下面用具体例子说明海明码的构造方法。

以k=4为例说明,要满足2^r ≥k+r+1,则有r ≥3,取r=3,则n=k+r=7,这7个比特中的2^k 位置用来放置校验比特R i ,其余为信息比特I i ,如图1所示。

每个信息比特所在位置(下标)都可以表示成2的幂次之和的形式: 7=22+21+20,6=22+21,5=22+20,3=21+20,如图2所示,表格中“√”表示含该项,横向表示信息比特参与校验比特的
生成,如信息比特I 4要参与校验比特R 2、
R 1、R 0的生成;纵向表示校验比特和信息比
特构成的偶校验关系,如 R 2和I 4、I 3、I 2构
成的偶校验关系。

由此得到计算校验比特的
公式:
R 2=I 4+I 3+I 2,R 1=I 4+I 3+I 1,R 0=I 4+I 2+I 1。

接收端对这r 个奇偶关系进行校验,将每个校验比特和与它相关联的信息比特执行相加(异或),相加的结果称为校正因子,校正因子可以通过以下关系式对三个偶关系进行验证:
S 2= R 2+I 4+I 3+I 2,S 1= R 1+I 4+I 3+I 1,S 0=R 0+I 4+I 2+I 1。

如果没有错误,则这些校正因子都为0;反之,S 2、S 1、S 0不全为0,而发生错误的比特位置就在S=(S 2S 1S 0)2处,将该比特取反,就得到正确数据。

【举例】
对于信息1000,根据以上校验比特关系可得:R 2=1,R 1=1,R 0=1,根据图1关系,可得发送码字为1001011。

如图3所示。

现在假设接收到的码字为1011011,按校正因子计算公式可得:S 2=1,S 1=0,S 0=1,不全为0,说明码字有错误,错误位置为S=(S 2S 1S 0)2=(101)2=5,即第5比特有错(如图3中加粗显示),将原来该位置上的信息取反,将1变为0,即纠正了错误。

去掉校验比特,得到正确的信息为:1000。

结合程序运行图4所示,限于篇幅,
程序仅分析在接收数据的情况下进行校验
和纠错的,如图中的虚线框部分所示,其
内部控件命名说明如下:接收信息文本框
名为TxtReceive,分析后所得发送信息文
本框名为TxtSendInform,命令按钮“逆
向得到信息”名为CmdSendInform。

文中代码涉及的数组说明如下:HMM():存放海明码码字;II():用于存放信息比特;RR():用于存放校验比特;SS():存放校正因子。

下面进行编程分析。

(1)根据接收码字,分离信息比特和校验比特
接收码字由接收信息文本框TxtReceive获得,分离后依次存到数组HMM(),根据海明码字长度n,由公式2^r≥n+1,计算校验比特长度r,提取海明码字中的校验比特到数组RR()中,将剩余的码字作为信息比特,存放到数组II()中。

n=Len(TxtReceive)
For i=1 To n ‘分离接收信息,存入到海明码字数组HMM()
HMM(n-i+1)=Val(Mid(TxtReceive,i,1))
Next
‘根据条件2^r>=n+1,计算校验比特长度r
r=Int(Log(n) / Log(2))
If 2^r<>n+1 Then r=r+1
‘由海明码字,提取校验比特和信息比特分别写入相应的数组RR()和II()
j=0
For i=1 To n
m=Log(i) / Log(2)
If m=Int(m) Then
RR(m+1)=HMM(i) ‘提取校验比特
Else
II(i-1-Int(m))=HMM(i) ‘提取信息比特
j=j+1:t(j)=i ‘为计算校验比特公式准备数据
End If
Next
(2)计算校验比特的公式
根据海明码介绍中,结合图2,从表格纵向看数据,提炼校验比特公式构造方法,这部分是分析海明码字的关键,程序中用类似于十进制转换成二进制的辗转减权法来实现的,由自定义过程CreateJyBit完成,代码中的t()定义成全局数组变量,用于记录信息比特在海明码字中的相应位置,其数据早在分离海明码时进行记录。

JY()定义成全局数组变量,类型为字符型,用来记录校验比特公式时参与的信息比特。

Sub CreateJyBit(ByVal Vk As Integer, ByVal Vr As Integer)
Dim i, j As Integer
For j=Vr To 1 Step -1
JY(j)=""‘清空参与信息比特
‘用辗转减权法构造校验比特公式
For i=Vk To 1 Step -1
If t(i)-2^(j-1) >=0 Then
JY(j)=JY(j)+Trim(Str(i))
t(i)=t(i)-2^(j-1)
End If
Next
Next
(3)结合校验比特公式,计算校正因子
调用自定义过程CreateJyBit(k, r),得到校验比特公式相关参数JY(i),计算校正因子S i,根据校正因子(S r…S1),其所表示成的二进制数就是海明码字中出错的比特位置。

For i=r To 1 Step -1
For j=1 To Len(JY(i))
m=Val(Mid(JY(i),j,1))
SS(i)=SS(i) Xor II(m) ‘执行校正因子相关信息比特的异或操作
Next
SS(i)=SS(i) Xor RR(i) ‘执行校正因子对应校验比特的异或操作
‘计算海明码字中的出错位置,便于纠错
Result=Result+2^(i-1)*SS(i)
Next
(4)由校正因子,纠正一比特错,获取正确信息
若校正因子不全为0,说明有一比特出错,先对出错位置进行检验,如果该位置超出海明码字长度,说明原来输入的接收信息本身不符,应给予相应的信息提示;反之,就可以对出错比特进行纠错,纠错的方法是将原数据取反,这里用与1执行xor来实现。

If Result >n Then ……’信息不符,给予提示,代码略
If Result=0 Then ’海明码字正确
……’相关提示,代码略
Else
HMM(Result)=HMM(Result) Xor 1 ‘海明码字纠正一比特错
……
‘纠正相应信息比特
m=Log(Result) / Log(2)
If m<>Int(m) Then
Result=Result-1-Int(m)
II(Result)=II(Result) Xor 1
End If
End If
纠错完成后,显示正确的信息比特、海明码字及出错比特在海明码字中的位置等相关内容,该部分代码略,运行结果如图4所
示。

图4。

相关文档
最新文档