所需的奇偶校验位数

时间:2010-09-22 09:13:37

标签: communication parity hamming-code

我正在阅读有关错误检测的内容,并偶然发现了一条我不太明白的陈述。声明说“对于一个k位字符串,我们需要lg k个奇偶校验位来检测2位错误”。其中lg是登录到基数2

我不太明白为什么会这样,有没有正式的推导证实了这一点。

本书的名称是Gallahager的数据网络。

我不怀疑这本书的内容,但我只是好奇地看到了一个推导。

谢谢, 钱德尔

2 个答案:

答案 0 :(得分:1)

查看Cyclic Redundancy Check的维基百科页面。严格来说,奇偶校验位是1位检查,所以谈论多于1个奇偶校验位可能是等效CRC的简写。文章"Mathematics of CRC"提供了有关推导的更多信息。

答案 1 :(得分:0)

术语

  • 对于"线性"代码(CRC,汉明码等),每个数据位总是影响一些(但不是全部)奇偶校验位的固定集合。例如,如果(仅)数据的第7位在传输中被翻转,并且在重新计算的奇偶校验位中翻转奇偶校验位2和4但不翻转奇偶校验位5,则与原始接收的奇偶校验位相比 - 然后翻转对于每个可能的有效载荷数据位帧,数据的第7位将翻转奇偶校验位2和4,而不是奇偶校验位5。
  • 有效载荷中影响特定奇偶校验位(例如奇偶校验位5)的所有位以及奇偶校验位本身被称为"覆盖"或者"受保护的"通过那个奇偶校验位。
  • 当接收器重新计算奇偶校验位,并将重新计算的奇偶校验位与接收的奇偶校验位进行比较时,该差异称为校正子。当没有错误时,综合症就是零。

    In other words, syndrome = recalculated_parity XOR recieved_parity.

证明

证明需要n个奇偶校验位来检测有效载荷数据位的2 ^ n位帧中的2位错误:

当整个帧中只有1个错误时, 当接收器重新计算奇偶校验位时, 有两种情况:

  • 不覆盖错误位的每个重新计算的奇偶校验位与相应的接收奇偶校验位相同。 (综合症中的相应位是" 0")。
  • 覆盖错误位的每个重新计算的奇偶校验位与对应的接收奇偶校验位不同,并且检测到错误。 (综合症中相应的位是" 1")。

如果整个画面中只有2个错误, 由此产生的综合征是由孤立的每个错误引起的综合征的异或。 当接收器重新计算奇偶校验位时,有3种情况:

  • (a)不覆盖任何错误位的每个重新计算的奇偶校验位与相应的接收奇偶校验位相同。 (综合症中的相应位是" 0")。
  • (b)覆盖两个错误位的每个重新计算的奇偶校验位与相应的接收奇偶校验位相同。 (每个错误翻转一次,并且两个翻转组合将该位返回到原始状态,因此该综合症中的相应位是" 0")。
  • (c)覆盖一个错误位且不覆盖另一个错误位的每个重新计算的奇偶校验位与相应的接收奇偶校验位不同,并且检测到错误。 (综合症中相应的位是" 1")。

假设存在一些有效载荷位,使其翻转会产生一些综合症S, 并且还有任何其他有效载荷位产生完全相同的综合症S, 那么两个错误就会触及这两个位是不可检测的。 换句话说,这个两位错误会给出S xor S == zero的综合症。 换句话说,每个奇偶校验是情况(a)或情况(b),它们都不能检测到这样的错误。 那会很糟糕。

因此,为了检测帧中每个可能的两位错误, 我们必须设计错误检测代码 每个单比特错误必须产生不同的综合症。 换句话说,对于帧中两个错误位的每种可能情况,必须至少有一个类型(c)的奇偶校验位。

使用n个奇偶校验位给出n个校正位。 对于n个校正子位,最多可能存在2 ^ n个不同的校正子。 因此,要确保帧中的每个位(当它是唯一的错误时)给出不同的综合症, 我们必须在帧中最多有2 ^ n位。

我敢打赌,如果你在https://math.stackexchange.com/发布了这个问题,你会得到更短更优雅的证据: - )。