0
点赞
收藏
分享

微信扫一扫

计组_HammingCode海明码校验


文章目录

  • ​​海明(汉明)(Haiming code)校验码​​
  • ​​根据公式确定符合要求的海明码的位数​​
  • ​​确定校验位的分布​​
  • ​​分组以形成校验关系​​
  • ​​求解校验位取值(根据分组后各组内的信息位来求)​​
  • ​​海明码的校验​​

海明(汉明)(Haiming code)校验码

  • 海明码是广泛采用的一种有效的校验码,它实际上是一种​​多重奇偶​​校验码。
  • 其实现原理是在有效信息位中​​加入几个校验位形成海明码​​,并把海明码的 ​​每个二进制位分配到几个奇偶校验组中​​。
  • 当某一位出错后,就会​​引起有关的几个校验位的值发生变化​​,这不但可以发现错位还能指出错位的位置,为自动纠错提供依据。
  • 根据纠错理论得
    计组_HammingCode海明码校验_校验码
  • 即编码​​最小码距L​​越大,其检测 ​​错误的位数D​​越大,​​纠正错误的位数C​​也越大,且 ​​纠错能力恒小于等于检错能力​​。
  • 海明码就是根据这一理论提出的具有纠错能力的一种编码。
    下面用一个例子来介绍求海明码的步骤。

根据公式确定符合要求的海明码的位数

设n为有效信息的位数,k为校验位的位数,则信息位n和校验位k应满足:
n+k ≤ 2k -1(若要检测两位错,则需再增加1位校验位,即k+1位)

海明码位数为计组_HammingCode海明码校验_java_02成立,则计组_HammingCode海明码校验_d3_03有效。

设信息位为计组_HammingCode海明码校验_android_04;(1010),共4位,

校验位为计组_HammingCode海明码校验_potplayer_05,共3位,

对应的海明码为计组_HammingCode海明码校验_java_06

这里的计组_HammingCode海明码校验_d3_07表示海明号(Hamming)

确定校验位的分布

  • 规定校验位计组_HammingCode海明码校验_android_08在​​​海明号​​​位计组_HammingCode海明码校验_java_09的位置上
  • 其余位是信息位
  • 可以这样类比
  • 海明号作为座位(椅子)的编号
  • 海明码中的校验位和信息位分别类比位保安和游客(人)
  • 我们需要计算出几位保安应该就位到那些海明号(计组_HammingCode海明码校验_java_10上)
  • 譬如,计组_HammingCode海明码校验_java_11号校验码(计组_HammingCode海明码校验_校验码_12)需要防止在计组_HammingCode海明码校验_potplayer_13的位置上(两套编号系统的一个映射函数(对应关系)计组_HammingCode海明码校验_android_14=计组_HammingCode海明码校验_potplayer_13)
  • 安排完校验位后,其余位(计组_HammingCode海明码校验_d3_07)用信息位计组_HammingCode海明码校验_java_17插入(按原信息位的序列顺序)

计组_HammingCode海明码校验_potplayer_18

分组以形成校验关系

  • 每个数据位计组_HammingCode海明码校验_android_19用​​多个校验位​​(计组_HammingCode海明码校验_potplayer_20)进行校验,
  • 但要满足条件:
  • 被校验数据位的​​海明位号​​等于​​校验该数据位的各校验位​​的​​海明位号之和​​。
  • 这里强调的是​​海明号之和​​;也就是海明码在海明号序列下的下标之和之间的约束关系

草稿

  • 计组_HammingCode海明码校验_potplayer_21
  • 计组_HammingCode海明码校验_d3_22
  • 计组_HammingCode海明码校验_校验码_23;



  • 形式化公式是我凭着理解尽量表达出来的(可能不是那么贴切)

last version formula:


  • 计组_HammingCode海明码校验_校验码_24;
  • k是所有校验位的总数目;
  • 计组_HammingCode海明码校验_校验码_25之间不一定是连续的校验位
  • (例如,计组_HammingCode海明码校验_android_26,与之对比的,计组_HammingCode海明码校验_potplayer_27表示的是才是第1位校验位计组_HammingCode海明码校验_d3_28的下标))
  • 因此说,校验位下标计组_HammingCode海明码校验_potplayer_29对应的校验位,往往不是相邻的校验位.

计组_HammingCode海明码校验_d3_30函数和计组_HammingCode海明码校验_java_31函数分别接受某个信息位计组_HammingCode海明码校验_d3_32,校验位计组_HammingCode海明码校验_java_33的下标数字,
求出该下表对应的海明号(计组_HammingCode海明码校验_android_34)



  • 如果我们引入单行向量(数组),即将​​m​​视为个一维向量(包含若干个元素,会根据等式的左边,m向量中的一个元素计组_HammingCode海明码校验_android_35,对应校验位计组_HammingCode海明码校验_java_36)将会取得不同的数字(元素个数也能不同));从而,我们的表达式可以更加简练地写为
    计组_HammingCode海明码校验_java_37
  • 另外,校验位不需要再被校验。
  • 分组形成的校验关系如下。(注意海明位上的各个位的对应关系)
  • 计组_HammingCode海明码校验_android_38


计组_HammingCode海明码校验_potplayer_39

求解校验位取值(根据分组后各组内的信息位来求)

  • 校验位计组_HammingCode海明码校验_android_08的值为第​​​i​​​组信息位(由该校验位校验的数据位计组_HammingCode海明码校验_java_17)所有位求异或。
  • 本步骤中获得完整海明码

计组_HammingCode海明码校验_android_42

计组_HammingCode海明码校验_d3_43

  • 所以, 信息序列1010 对应的海明码为计组_HammingCode海明码校验_校验码_44
  • (下画线为校验位, 其他为信息位)

海明码的校验

  • 利用各组内的奇偶校验(也是求亦或的过程)来检查
  • 将构成K个方程
  • Hamming Code=101​​0​​​0​​10​

计组_HammingCode海明码校验_d3_45

  • 计组_HammingCode海明码校验_potplayer_46的值为 “ 000 ”, 则说明无错;
  • 否则说明出错, 且这个数就是错误位的位号,
  • 计组_HammingCode海明码校验_potplayer_47, 说明第 1 位出错, 即计组_HammingCode海明码校验_android_48出错, 直接将该位取反就达到了纠错的目的。


举报

相关推荐

0 条评论