因此,我想在今年夏天的项目中使用汉明码纠正消息传输中的错误,但我无法弄清楚它是如何工作的。网上看了很多文章,但不太懂算法。有人可以简单地解释一下吗?

谢谢。

有帮助吗?

解决方案

这是关于汉明距离

两个基-2值之间的汉明距离是在它们的不同的位的数目。因此,如果你发送A,但我接收B,然后必须已在传输被切换的位的数目为A和B之间的汉明距离。

当在每个码字中的位被以某种方式分别发送

汉明码是有用的。我们不关心它们是否是串行或并行的,但它们不是例如组合成一个模拟值代表几个比特,或压缩/编码后加密。

因此,每个位独立地是(任意与某些固定的概率),无论是正确地接收,或翻转。假设传输是相当可靠的,最位被正确地接收。因此,在少的比特数的误差更容易,且大量的比特错误同时发生不太可能。

所以,汉明码通常旨在纠正1比特的错误,和/或检测的2位错误(见用于两种主要类型的细节的维基百科文章)。其可被构造正确/检测误差就越大,但AFAIK码不被用作多。

代码工作在“汉明空间”,这在数学术语是度量中心包括相关字大小的所有值的,与海明距离为度量均匀间隔出的代码点。试想一下,每个码点由无效值的一点点“缓冲地带”所包围。如果收到的值不是一个代码点,那么一定是发生了错误,因为只有有效的代码点是不断传递。

如果在缓冲区的值被接收到,然后在假设发生了1位的错误,将其发送必须从值距离值1接收。但是,因为代码点散开,只有一个封闭的代码点。因此,它的“修正”到该代码点,理由是1位错误,会比需要为任何其他代码点产生接收到的值越大错误的可能性较大。在概率来说,你送附近的代码点的条件概率比你发送任何其他代码点,因为我收到我做的值的条件概率更大。所以我想你基于所述传输的可靠性和比特的每个单词的数量发送的一个附近的,具有一定的置信度。

如果接收到一个无效值,它是从两个代码点等距离,那么我不能说一个更可能比其他的真值。所以,我发现了错误,但我不能改正它。

显然3比特的错误不是由一个SECDED汉明码校正。接收到的值与值进一步实际上发送,是不是比一些其他的代码点,我错误地发出“纠正”它错误的值。所以,你要么需要传输足够可靠,你不关心他们,否则你需要更高层次的错误检测以及(例如,CRC在整个消息)。

其他提示

具体来自 维基百科, ,算法如下:

  1. 从 1 开始对位进行编号:位 1、2、3、4、5 等
  2. 以二进制形式写入位数。1、10、11、100、101 等
  3. 所有为 2 的幂的位位置(其位置的二进制形式中只有一个 1 位)都是奇偶校验位。
  4. 所有其他位位置(其位置的二进制形式有两个或多个 1)都是数据位。
  5. 每个数据位都包含在一组唯一的 2 个或更多奇偶校验位中,由其位位置的二进制形式确定。
    1. 奇偶校验位 1 涵盖具有最低有效位设置的所有位位置:位 1(奇偶校验位本身)、3、5、7、9 等。
    2. 奇偶校验位 2 涵盖设置了第二个最低有效位的所有位位置:位 2(奇偶校验位本身)、3、6、7、10、11 等。
    3. 奇偶校验位 4 涵盖设置了第三个最低有效位的所有位位置:位 4–7、12–15、20–23 等。
    4. 奇偶校验位 8 涵盖具有第四个最低有效位设置的所有位位置:位 8–15、24–31、40–47 等。
    5. 一般而言,每个奇偶校验位涵盖奇偶校验位置和位位置的二进制AND非零的所有位。

维基百科文章解释它很好地

如果你不明白的算法的一个具体方面,那么你就需要改写(或细节)你的问题,从而使他人能够解决你的问题的特定部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top