文章目录
- 海明(汉明)(Haiming code)校验码
- 根据公式确定符合要求的海明码的位数
- 确定校验位的分布
- 分组以形成校验关系
- 求解校验位取值(根据分组后各组内的信息位来求)
- 海明码的校验
海明(汉明)(Haiming code)校验码
- 海明码是广泛采用的一种有效的校验码,它实际上是一种
多重奇偶
校验码。 - 其实现原理是在有效信息位中
加入几个校验位形成海明码
,并把海明码的 每个二进制位分配到几个奇偶校验组中
。 - 当某一位出错后,就会
引起有关的几个校验位的值发生变化
,这不但可以发现错位还能指出错位的位置,为自动纠错提供依据。 - 根据纠错理论得
- 即编码
最小码距L
越大,其检测 错误的位数D
越大,纠正错误的位数C
也越大,且 纠错能力恒小于等于检错能力
。 - 海明码就是根据这一理论提出的具有纠错能力的一种编码。
下面用一个例子来介绍求海明码的步骤。
根据公式确定符合要求的海明码的位数
设n为有效信息的位数,k为校验位的位数,则信息位n和校验位k应满足:
n+k ≤ 2k -1(若要检测两位错,则需再增加1位校验位,即k+1位)
海明码位数为成立,则
有效。
设信息位为;(1010),共4位,
校验位为,共3位,
对应的海明码为。
这里的表示海明号(Hamming)
确定校验位的分布
- 规定校验位
在
海明号
位的位置上
- 其余位是信息位
- 可以这样类比
- 海明号作为座位(椅子)的编号
- 海明码中的校验位和信息位分别类比位保安和游客(人)
- 我们需要计算出几位保安应该就位到那些海明号(
上)
- 譬如,
号校验码(
)需要防止在
的位置上(两套编号系统的一个映射函数(对应关系)
=
)
- 安排完校验位后,其余位(
)用信息位
插入(按原信息位的序列顺序)
分组以形成校验关系
- 每个数据位
用
多个校验位
()进行校验,
- 但要满足条件:
- 被校验数据位的
海明位号
等于校验该数据位的各校验位
的海明位号之和
。
- 这里强调的是
海明号之和
;也就是海明码在海明号序列下的下标之和之间的约束关系
草稿
;
- 形式化公式是我凭着理解尽量表达出来的(可能不是那么贴切)
last version formula:
;
- k是所有校验位的总数目;
之间不一定是连续的校验位
- (例如,
,与之对比的,
表示的是才是第1位校验位
的下标))
- 因此说,校验位下标
对应的校验位,往往不是相邻的校验位.
函数和
函数分别接受某个信息位
,校验位
的下标数字,
求出该下表对应的海明号()
- 如果我们引入单行向量(数组),即将
m
视为个一维向量(包含若干个元素,会根据等式的左边,m向量中的一个元素,对应校验位
)将会取得不同的数字(元素个数也能不同));从而,我们的表达式可以更加简练地写为
- 另外,校验位不需要再被校验。
- 分组形成的校验关系如下。(注意海明位上的各个位的对应关系)
求解校验位取值(根据分组后各组内的信息位来求)
- 校验位
的值为第
i
组信息位(由该校验位校验的数据位)所有位求异或。
- 本步骤中获得完整海明码
- 所以, 信息序列1010 对应的海明码为
- (下画线为校验位, 其他为信息位)
海明码的校验
- 利用各组内的奇偶校验(也是求亦或的过程)来检查
- 将构成K个方程
- Hamming Code=101
0
010
- 若
的值为 “ 000 ”, 则说明无错;
- 否则说明出错, 且这个数就是错误位的位号,
- 如
, 说明第 1 位出错, 即
出错, 直接将该位取反就达到了纠错的目的。