奇偶检验、海明码检验、循环冗余检验 CRC

# Lecture10 - 校验码

# 差错

image-20221110172321805

# 纠错

image-20221110173954538

image-20221110174007085

# 奇偶校验码

image-20221110174244153

奇校验和偶校验的代价和应用场景不同

偶校验位的产生直接对待发送的数据依次做异或运算就可以得到,而产生奇校验位还要在偶校验电路的输出取非,相对而言,产生奇校验位的代价高,速度也相对慢(慢一个逻辑门的时延)

如果被传输的数据为全 0,此时采用奇校验时,接收端至少会收到 1 个 1,很容易判断确实有传送发生;如果采用偶校验,此时收发双方都是 0,不容易判断是否有信号传来。而对于异步传输,因为有停止位的缘故,采用偶校验,接收方也至少能收到 1 个 1,当然,此时采用奇校验也是可以的;

image-20221110175031448

# 汉明码 / 海明码 Hamming code

# 基本思想和处理过程

image-20221110175242990

C D 通过传输得到 C‘ D’

在接收端,用 D‘得到 C'',和 C’异或,生成故障字。

# 校验码长度

image-20221110175746481

校验码要能够 cover 数据位一位出错、校验位一位出错和没有差错的情况

# 故障字的作用

image-20221115163421156

# 数据位的划分

image-20221115163637665

规定 C1-C4 所对应的情况。再排好 D1-D8 的位置。

例如,1100 对应 C4 和 C3,则就在 C3 和 C4 中取异或。

# 位安排

image-20221115163906975

# 实例

image-20221115164310763

image-20221115164322978

0110 0101 0011

0111 0101 0011

0110 1101 0011

# 码距和纠错理论

image-20221115163224140

合法编码是正确的。

纠错理论L - 1 = D + C, D >= C

奇偶校验:

  • 如果 D 一位发生变化,C 就发生了变化。如果两位发生了变化,则码距已经超过了 2。奇偶校验不具备检测两位错误的能力。
  • D 是 1 位,C 是 0 位。

汉明码校验:

  • D 是 1 位,C 也是 1 位
  • 可以 2 位检测、0 位纠错吗?不可以,用海明码检测基于 “只有一位出现错误” 的假设。比如,如果 1、2 位出现了差错,那么可以对应与 D3 的情况。

image-20221115220739021

# 补充阅读:SEC-D-EC

image-20221115164644225

在海明码中,除了 D4 和 D7 之外,都会影响两位的校验码。

L - 1 = D + C

L - 1= 2 + 1

为了实现两位的检错,需要将码距增加到 4【即添加一个额外的校验位,让数据对应的校验码位数增加到 3 位】

image-20221115165141136

D1 和 D2 有问题,C3 和 D5 有问题是同一种显示。

如何计算单纠错 / 单检错需要的校验位? 2k >= M + K + 1

如何计算单纠错 / 双检错需要的校验位?2k-1 >= M + K + 1

如何计算双纠错 / 双检错需要的校验位?2 k >= C(M+K)2 + M + K + 1

# 循环冗余校验 CRC

# 优点

image-20221115171249746

无论是奇偶校验还是海明码,需要的代价都很高。海明码也是以奇偶检测为手段的。

# 基本思想和实现

image-20221115171316315

image-20221115221430300

# 实例

image-20221115171421174

接收方也对 1001 做模 2 运算,余数为 0 则无误。【余数为 111,相等于原来的数加上 111 就能够整除 1001】

1001(x3 + 1)

无借位减,等价于异或运算

image-20221115172153954

# 总结

image-20221115214420096