海明校验码

最近在做错误信息监测与恢复相关的内容,看到此贴,感觉描绘的,转过来,学习一翻

博客地址    http://blog.csdn.net/u010927640/article/details/49531781。

一、作用


     这是关于计算机基础的知识。我们都知道计算机系统运行时,各个部件之间要进行数据交换,为了确保数据在传送的过程中正确无误,一是提高硬件电路的可靠性,二是提高代码的校验能力,包括查错和纠错。此文主要是从海明码的校验能力来说,也是使用校验码的方法来检测传送的数据是否出错。

     它的实现原理,是在m个数据位之外加上k个校验位,从而形成一个m+k位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。

     可能看这原理较难理解,请看下面的例子。

二、确定校验码方法

     要计算海明校验码的值,很简单,三步即可:

     首先,要知道海明校验码是放在2的幂次位上的,即“1,2,4,8,16,32······”;

     其次,对于信息位为m的原始数据,需要加入k位的校验码,它满足m+k+1<2k; 这里可以这样理解,K个校验位可以有pow(2,k) (代表2的k次方) 个编码,其中有一个代表是否出错. 剩下2-1个编码状态则用来表示到底是哪一位出错. 因为n个数据位和k个校验位都可能出错,所以k满足2-1 >= n+k

最后,即可计算出校验码。

三、举例

     例如:要计算原始信息位为101101100的海明校验码。

     1.先用m+k+1<2k计算出校验位:9+k+1 <2k→k=4,即校验位为4位。

     2.把原始信息位填入下表1

     3.填充校验位

     这是比较关键的一步,看看都有哪些位置用到了哪几个校验位,如下表2

                                                                 

     至此,咱们就可以知道每个校验位都校验了哪些位置,即:

     Bit1=3,5,7,9,11,13

     Bit2=3,6,7,10,11

     Bit4=5,6,7,12,13

     Bit8=9,10,11,12,13

     最后,用位置上的原始信息(表1)做异或运算(相同时为0,不同时为1就可以知道校验位上的值了,即:

     Bit1=101010=1

     Bit2=11111=1

     Bit4=01100=0

     Bit8=01100=0

     把校验位填到表1为:

四、结语

     第一次看海明校验的时候,不知道它是怎么计算出校验位上的值,之后和同伴讨论了之后感觉自己明白了,但当另一个同伴再问的时候,需要点时间才能拾起,所以这次进行了总结。学习真的需要反复。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
海明校验码是一种用于检测和纠正错误的编码技术。在传输数据时,可能会出现传输错误,导致接收方收到的数据与发送方发送的数据不一致。为了提高数据传输的可靠性,海明校验码可以在发送方添加额外的冗余信息,并在接收方利用这些信息检测和纠正错误。 在Matlab中,可以通过以下步骤实现海明校验码: 1. 将待发送的数据按照一定的规则进行编码海明校验码按字节编码,将每个字节拆分成4位数据位和4位校验位,其中数据位表示待发送的数据校验位用于检测和纠正错误。 2. 计算每个字节的校验位。对每个字节的数据位进行异或运算,得到校验位。例如,对于4位数据位1010,进行异或运算得到校验位0010。 3. 将数据位和校验位按照一定的规则组合成带有海明校验码编码数据。通常,将每个字节的校验位按位序放置在编码数据中,使得每个校验位的位置均为2的幂次方。 4. 发送编码数据。 5. 在接收方,接收到编码数据后,利用校验位检测和纠正错误。首先,将接收到的编码数据按照一定的规则解码,得到数据位和校验位。然后,根据校验位的位置,对接收到的数据位进行异或运算,得到校验结果。如果校验结果为0,则说明无错误;如果校验结果不为0,则说明出现了错误。可以根据校验结果的位置,确定出错的位,并对其进行纠正。 通过以上步骤,可以在Matlab中实现海明校验码编码和解码过程,提高数据传输的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值