海明码是什么?
首先需要知道什么是奇偶校验码:在 n 位有效信息位前 或 后添加一个校验码改变整个校验码的1
的个数。
举个栗子,如果我们使用偶校验的方式检查数据是否出错:
- 有
1010
这个信息位,其中1
的个数刚好为偶数,说明数据正确。我们在其有效信息位前(也就是奇偶校验位)添加一位0
,表示数据正确。这种校验方式的缺点就是只能判断数据是否出错,但是无法确定哪里出错,也就是没有纠错能力。遇到出错就只能重传数据。
海明码就是改进偶校验的具有纠错功能的校验码,其思路是在有效信息位中分组,对每个分组添加校验位(这样就有多个校验位可以表示更多的结果,之前的偶校验位只有0/1两种结果,所以只能表示对错),同时根据校验位还可以标注出错的位置。
但是随之而来的问题有下面这几个
假设我们有n位有效信息位,k 个校验位,那么总校验码长度为(n+k);我们需要使用校验位来判断以下情况
- 数据正确
- 数据在每一个位置都有可能出错,需要能用校验码表示 (n+k) 个位置
所以我们需要的校验位个数应该大于等于 n+k&#