【发布时间】:2010-09-22 09:13:36
【问题描述】:
我在阅读有关错误检测的内容时偶然发现了一个我不太理解的声明。声明说“对于 k 位字符串,我们需要 lg k 奇偶校验位来检测 2 位错误”。其中 lg 是基数 2
我不太明白为什么这是真的,是否有任何正式的推导可以证实这一点。
这本书的名字是加拉赫格的数据网络。
我并不怀疑这本书的内容,只是好奇地看到了一个推导。
谢谢, 钱德
【问题讨论】:
标签: communication parity hamming-code
我在阅读有关错误检测的内容时偶然发现了一个我不太理解的声明。声明说“对于 k 位字符串,我们需要 lg k 奇偶校验位来检测 2 位错误”。其中 lg 是基数 2
我不太明白为什么这是真的,是否有任何正式的推导可以证实这一点。
这本书的名字是加拉赫格的数据网络。
我并不怀疑这本书的内容,只是好奇地看到了一个推导。
谢谢, 钱德
【问题讨论】:
标签: communication parity hamming-code
查看Cyclic Redundancy Check 的维基百科页面。严格来说,奇偶校验位是 1 位检查,因此谈论超过 1 个奇偶校验位可能是等效 CRC 的简写。文章"Mathematics of CRC" 给出了更多关于推导的内容。
【讨论】:
当接收方重新计算奇偶校验位,并将重新计算的奇偶校验位与接收到的奇偶校验位进行比较时,差值称为校正子。当没有错误时,综合症为零。
In other words, syndrome = recalculated_parity XOR recieved_parity.
证明需要 n 个奇偶校验位来检测 2^n 位有效载荷数据位帧中的 2 位错误:
当整帧只有1个错误时, 当接收器重新计算奇偶校验位时, 有两种情况:
当整个帧中恰好有 2 个错误时, 生成的校正子是由每个单独的错误引起的校正子的 XOR。 接收端重新计算奇偶校验位时,有3种情况:
如果假设存在一些有效载荷位,因此翻转它会产生一些综合症 S,
并且有任何其他有效载荷位产生完全相同的校正子 S,
那么一个两位错误同时命中这两个位将是不可检测的。
换句话说,该两位错误将给出S xor S == zero 的综合症。
换句话说,每个奇偶校验要么是情况(a),要么是情况(b),两者都不能检测到这样的错误。
那会很糟糕。
所以为了检测帧中每一个可能的两位错误, 我们必须设计错误检测代码,使得 每个单比特错误必须产生一个不同综合症。 换句话说,对于帧中两个错误位的每种可能情况,必须至少有 1 个类型为 (c) 的奇偶校验位。
使用 n 个奇偶校验位给出 n 个校正子位。 对于 n 个校正子位,最多有 2^n 个可能的不同校正子。 所以要确保帧中的每一位(当它是唯一的错误时)给出不同的校正子, 我们必须在帧中最多有 2^n 位。
我敢打赌,如果你在https://math.stackexchange.com/ 上发布这个问题,你会得到一个更简短、更优雅的证明:-)。
【讨论】: