假设我们正在使用一个纠错代码,该代码将允许针对长度为7的存储字进行校正。我们已经计算出我们需要4个校验位,并且所有码字的长度将是11。码字是根据汉明创造的文中给出的算法。我们现在收到以下代码字:1 0 1 0 1 1 1 1 0假设奇偶校验,这是一个合法的码字吗?如果不是,根据我们的纠错码,错误在哪里?
p.s需要一些帮助来解决这个Hamming代码问题,这是一个书本问题。提前感谢:(
根据文本中提供的Hamming算法创建码字。
你不认为这是一条重要的信息吗?:-(
如果没有算法,我们就不能确定有效性,所以我给你一个通用的方法。
每个校验比特通常将应用于比特的某个子集。假设这七个比特是b6
到b0
。四个校验位被计算为在以下子集中提供偶数奇偶校验:
1 0 1 0 1 0 1
ca b6 b5 b3 b2 b1 b0 1+0+0+1+0+1 + (ca = 0)
cb b6 b4 b2 b0 1+1+1+1 + (cb = 0)
cc b6 b3 b0 1+0+1 + (cc = 0)
cd b5 b1 b0 0+0+1 + (cd = 1)
现在,如果您没有获得与数据匹配的校验位序列,那么理想情况下,您可以计算出需要更改哪个单个数据或校验位才能修复它。只有当您能够确保每个校验位计算都经过精心编制,以添加最大的额外信息时,这才有效。
这可能是我上述计算的失败,因为我只是凭空得出的。但是,由于我的意图只是在没有算法的情况下解释概念,所以这应该无关紧要。
确保算法有效的一种方法是暴力:
- 获取所有可能的11位值的列表。只有2048个,所以这并不繁重。现在,丢弃那些已经好的(我们只对无效的感兴趣(
- 反过来,切换(11的(每个位,看看该项是否有效
- 如果没有位切换使其有效,则这不是单个位错误,因此可以安全地忽略
- 如果一个位切换使其有效,则您有足够的信息来修复这种情况
- 如果多个位切换使其有效,则您没有足够的信息来修复这种情况
最重要的是,如果每个一位错误的可能性都可以通过一位切换(上面最后一个项目符号的第二个(有效,那么校正代码就是完美的。
您还应该检查,以确保如果切换单个位,每个有效的都将变为无效,但我将把这作为一个练习,因为您现在应该有足够的信息来了解如何做到这一点。