跳转至

6.004 笔记

项目 说明
首页 https://computation-structures.github.io/course/

量化信息 Quantifying Information

什么是信息

信息是一些数据,这些数据的特点是可以帮助消除不确定性

什么是信息量

如果一个数据消除的不确定性越多,那么包含的信息量越大

\[ I_(x_i) = log_2(\frac{1}{p_i}) \]

信息量意味着什么

在计算机中,信息量就意味着要编码这个信息需要多少 bit

$$ H = \sum p_i log_2(\frac{1}{p_i}) $$ 熵表示编码信息所需 bit 的最低下限

编码

使用二叉树进行编码

定变长编码与可变长编码

  • 为高频信息分配较短的编码,为低频率信息分配较长的编码可以更好利用资源

霍夫曼算法

如果自动构建最优的变长编码

错误修复

  • 奇偶校验可以识别单比特错误
  • 汉明编码可以修复比特错误

错误修复的现实世界

  • L1 缓存仅使用奇偶校验,如果数据出错,从 L2 中重读
  • L2/L3 使用汉明码加强版,可以修复 1 位错误,识别 2 位错误,如果 2 位错误直接崩溃
  • 内存分级别,消费级崩溃,商业级自修

两个问题 - 为什么 L2/L3 失败不从内存中读取

因为 L2/L3 数据和内存数据存在时间不一致,可能是脏数据,设计更多的判断电路不划算
  • L1 如果出现 2 位错误怎么办

    首先概率很低,舍弃该可能性

总结

  • 熵:量化信息内容
  • 补码;模运算
  • 可变长编码;哈夫曼算法
  • 汉明距离,错误检测,错误校正

奇偶校验

奇校验

x
x = x.append(0|1)
sumbit(x, 1) mod 2 = 1

偶校验 sumbit(x) mod 2 = 0

汉明距离

两个相同长度的编码,其对应数字不同的位置数量即为汉明距离。

汉明码如何修复错误

标准汉明码

标准汗汉明码,可以发现一位错误,并纠正该位错误

标准汉明码的原理,就是通过引入更多的校验位,来定位具体是哪一个数据出了问题 要引用多少校验位呢?

根据汉明不等式: $$ 2^r >= k + r + 1 $$

  • k: 数据位数
  • r: 校验位数
  • n: k+r 总长度

假设一个四位数据 1011 k = 4,使得该不等式成立的最小 r = 3,即需要 3 个校验位,数据总长度为 7

数据排列规则 1. 汉明码坐落于 2 的幂次位置,也就是 1 2 4 2. 其他数据按序排列

上述数据排列结果如下

位置索引 (二进制) 1 (001) 2 (010) 3 (011) 4 (100) 5 (101) 6 (110) 7 (111)
类型 $ p_1 $ $ p_2 $ $ d_1 $ $ p_3 $ $ d_2 $ $ d_3 $ $ d_4 $
含义 校验位1 校验位2 数据位1 校验位3 数据位2 数据位3 数据位4
数据 1 0 1 1

校验码计算规则,使用偶校验

  1. p1 计算位置索引倒数第一位为 1 的位,并补足偶数

    $ p_1 = d_1 \oplus d_2 \oplus d_4 $

  2. p2 计算位置索引倒数第二位为 1 的位,并补足偶数

    $ p_2 = d_1 \oplus d_3 \oplus d_4 $

  3. p3 计算位置索引倒数第三位为 1 的位,并补足偶数

    $ p_3 = d_2 \oplus d_3 \oplus d_4 $

至此,已经计算出了发送数据

位置索引 (二进制) 1 (001) 2 (010) 3 (011) 4 (100) 5 (101) 6 (110) 7 (111)
类型 $ p_1 $ $ p_2 $ $ d_1 $ $ p_3 $ $ d_2 $ $ d_3 $ $ d_4 $
含义 校验位1 校验位2 数据位1 校验位3 数据位2 数据位3 数据位4
数据 0 1 1 0 0 1 1

校验

当校验方进行校验时,计算 3 个校验位与各自负责的数据,一旦有 1 位错误,那么该位就表示为 1。最终三个数字表示的位置,就是错误的位,其中 000 表示校验成功。

举例

假设错误位置索引为100,即第 3 个数据位。通过校验

  • $ p_1 \oplus d_1 \oplus d_2 \oplus d_4 = 0 $
  • $ p_2 \oplus d_1 \oplus d_3 \oplus d_4 = 1 $
  • $ p_3 \oplus d_2 \oplus d_3 \oplus d_4 = 1 $

最终可得 110,恰好指向错误的数据位 3,可以进行修正

所以标准汉明码可以解决的一位错误并修正。

如果发生了两位错误

假设 d_2 d_3 均出错,那么通过计算得到的位置信号为 011,此时,汉明码认为是位置码 011 即数据位 d_1 出错。 假设此时把 d_1 纠错,此时 d_1 d_2 d_3 就全错了,那么得到的结果是 000。数学上成立,但是错误项已经变成了 3 个。

扩展汉明码

为了解决错误两位的情况,扩展汉明码