计算机组织结构(八) 纠错
基本思想
- 方法: 添加一些位来存储附加信息以便校正
- 过程:
- 读入:$M$ 位的数据 $D$ 通过函数 $f$ 产生 $K$ 位的校验码 $C$
- 被读出:通过 $f$ 由$D’$ 生成 $C’’$与 $C’$ 相比较
- 无错误: 发送 $D’$
- 有错误并可以纠正,发送 $D’’$
- 有错误且不能纠正, 报告
奇偶校验法
- 过程
$D=D_M…D_2D_1$- 奇校验: $D_M \oplus …D_2 \oplus D_1 \oplus 1$
- 偶校验: $D_M \oplus …D_2 \oplus D_1$
- 检查 $S=C’ \oplus C’’$
- $S=1$ 错误的位数为奇数
- $S=0$ 错误的位数为偶数或者无错误
- 注意: 此处是指$C$与$D$合在一起
- 优势:
- 廉价
- 劣势:
- 无法确定出错的位置
- 无法纠正错误
- 适用于较短的 $D$
汉明码
- 基本思想:
- 将数据的位分组, 每位都分到多个组且分到的组的情况不同, 每个组中奇偶校验产生一位校验码, 最后根据所有组的校验码可以定位到这位数据
- 前提:仅有一位出错
- 具体过程:
- 将 $M$ 位数据 $D$ 分成 $K$ 组
- 每个组中产生一位奇偶校验码, 最终产生一位$K$ 位的校验码 $C’$
- 由 $D’$ 产生 $C’’$
- 检查: 故障字 $SW=C’\oplus C’’$, 长度为 $K$ 位
- 校验码的长度
- 要确保故障字的情况能够包含所有的情况在内.即
其中 $K$ 为校验码出错情况,$M$ 为数据出错情况, 1 未出错情况
- 要确保故障字的情况能够包含所有的情况在内.即
- 故障字分析:
- 如果是数据位出错,那么至少有两位校验码会出错, 即故障字至少有两位为1,可得下面规则
- 全为0 : 没有错误
- 只有一位为 1: 校验码 $C’$ 出错,无需纠正
- 多位为 1: 数据位出错,需要纠正(对相应位置的数据取反)
- 如果是数据位出错,那么至少有两位校验码会出错, 即故障字至少有两位为1,可得下面规则
- 数据位划分
- 以 8 位的数据 $D = D_8…D_2D_1$为例子,校验码$C_1C_2C_3C_4$
- 关系如下
数据在传输的时候也正是这样穿插进行的 - 数据位划分
循环冗余校验 (CRC)
- 奇偶校验问题:
- 需要将数据 划分为字节级
- 额外开销很大
- CRC 适用于以流形式存储和传输大型数据
- 用数学函数产生数据和校验码的关系
- 过程:
- 对于 $n$ 位的数据 $D$, 次数为 $K$ 的生成多项式(用二进制表示的话有 $K+1$ 位),需要将 $D$ 左移 $K$ 位.
- 进行模二取余的除法运算, 具体过程如下图:
- 检查:
- 将 $n+k$ 位的内容对生成多项式做上述操作,如果无误,所得结果为0
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 极东魔术昼寝结社!
评论