奇偶检验、海明码检验、循环冗余检验 CRC
# Lecture10 - 校验码
# 差错
# 纠错
# 奇偶校验码
奇校验和偶校验的代价和应用场景不同
偶校验位的产生直接对待发送的数据依次做异或运算就可以得到,而产生奇校验位还要在偶校验电路的输出取非,相对而言,产生奇校验位的代价高,速度也相对慢(慢一个逻辑门的时延)
如果被传输的数据为全 0,此时采用奇校验时,接收端至少会收到 1 个 1,很容易判断确实有传送发生;如果采用偶校验,此时收发双方都是 0,不容易判断是否有信号传来。而对于异步传输,因为有停止位的缘故,采用偶校验,接收方也至少能收到 1 个 1,当然,此时采用奇校验也是可以的;
# 汉明码 / 海明码 Hamming code
# 基本思想和处理过程
C D 通过传输得到 C‘ D’
在接收端,用 D‘得到 C'',和 C’异或,生成故障字。
# 校验码长度
校验码要能够 cover 数据位一位出错、校验位一位出错和没有差错的情况
# 故障字的作用
# 数据位的划分
规定 C1-C4 所对应的情况。再排好 D1-D8 的位置。
例如,1100 对应 C4 和 C3,则就在 C3 和 C4 中取异或。
# 位安排
# 实例
0110 0101 0011
0111 0101 0011
0110 1101 0011
# 码距和纠错理论
合法编码是正确的。
纠错理论: L - 1 = D + C, D >= C
奇偶校验:
- 如果 D 一位发生变化,C 就发生了变化。如果两位发生了变化,则码距已经超过了 2。奇偶校验不具备检测两位错误的能力。
- D 是 1 位,C 是 0 位。
汉明码校验:
- D 是 1 位,C 也是 1 位
- 可以 2 位检测、0 位纠错吗?不可以,用海明码检测基于 “只有一位出现错误” 的假设。比如,如果 1、2 位出现了差错,那么可以对应与 D3 的情况。
# 补充阅读:SEC-D-EC
在海明码中,除了 D4 和 D7 之外,都会影响两位的校验码。
L - 1 = D + C
L - 1= 2 + 1
为了实现两位的检错,需要将码距增加到 4【即添加一个额外的校验位,让数据对应的校验码位数增加到 3 位】
D1 和 D2 有问题,C3 和 D5 有问题是同一种显示。
如何计算单纠错 / 单检错需要的校验位? 2k >= M + K + 1
如何计算单纠错 / 双检错需要的校验位?2k-1 >= M + K + 1
如何计算双纠错 / 双检错需要的校验位?2 k >= C(M+K)2 + M + K + 1
# 循环冗余校验 CRC
# 优点
无论是奇偶校验还是海明码,需要的代价都很高。海明码也是以奇偶检测为手段的。
# 基本思想和实现
# 实例
接收方也对 1001 做模 2 运算,余数为 0 则无误。【余数为 111,相等于原来的数加上 111 就能够整除 1001】
1001(x3 + 1)
无借位减,等价于异或运算。