数据校验码

数据校验码

Error

hard failure

soft error

Question: soft error 中 纠错和检测哪个更难?

Error Correction

基本思想

储存额外的信息进行检错和校正

处理过程

数据输入: 使用函数f在M位数据D上生成K位校验码C

数据输出:使用函数f在M位数据D’上生成新的K位校验码C’’,并与取出的C’进行比较

  1. 没有检测到差错:使用D’(不代表没有error)

  2. 检测到差错并且可以校正:校正数据D’来生成数据D’’,并用数据D’

  3. 检测到差错但无法纠正:报告

奇偶校验码

基本思想

增加一位校验码来表示1的数量是奇数还是偶数

处理过程

假 设 数 据 为 D = D M ⋅ ⋅ ⋅ D 2 D 1 假设数据为 D = D_M···D_2D_1 D=DMD2D1

数 据 输 入 数据输入

奇 校 验 : C = D M ⨁ ⋅ ⋅ ⋅ ⨁ D 2 ⨁ D 1 ⨁ 1 奇校验: C = D_M\bigoplus\cdot\cdot\cdot \bigoplus D_2\bigoplus D_1\bigoplus1 C=DMD2D11

偶 校 验 : C = D M ⨁ ⋅ ⋅ ⋅ ⨁ D 2 ⨁ D 1 偶校验:C = D_M\bigoplus\cdot\cdot\cdot \bigoplus D_2\bigoplus D_1 C=DMD2D1

∗ 数 据 输 出 ∗ *数据输出*

奇 校 验 : C ′ ′ = D M ′ ⨁ ⋅ ⋅ ⋅ ⨁ D 2 ′ ⨁ D 1 ′ ⨁ 1 奇校验: C''= D'_M\bigoplus\cdot\cdot\cdot \bigoplus D'_2\bigoplus D'_1\bigoplus1 C=DMD2D11

** 偶 校 验 : C ′ ′ = D M ′ ⨁ ⋅ ⋅ ⋅ ⨁ D 2 ′ ⨁ D 1 ′ 偶校验: C''= D'_M\bigoplus\cdot\cdot\cdot \bigoplus D'_2\bigoplus D'_1 C=DMD2D1**​​​

S = C’’ ⨁ \bigoplus C’

​ S = 0 : 正确/错误的位数为偶数

​ S =1:数据中出错的位数为奇数

代价低,适用于对较短长度的数据进行检错

海明码

基本思想

数据分组,对每一组使用奇偶校验码进行检错

处理过程

  1. 将M位数据分成K组

  2. 数据输入: 为数据D中每组生成一位校验码,合并得到K位校验码C

  3. 数据输出:为数据D’中每组生成一位校验码,合并得到新的K位校验码C’’

  4. 检错:将校验码C’'和取出的校验码C’按位进行异或,生成K 位故障字(syndrome word)

校验码长度

​ 假设最多一位出错

​ 可能的差错

​ 数据中有1位出现错误:M

​ 校验码中有1位出现错误:K

​ 没有出错:1

​ 校验码的长度: 2 K ≥ M + K + 1 2^K \geq M + K +1 2KM+K+1

故障字的作用

1. 全部是0 : 没有错误
2. 有且仅有一位是1 : 错误发生在校验码
3. 多位为1:错误发生在数据的某一位,将$D'$中对应数据位取反即可纠正

数据位划分

补充阅读

SEC-DED(海明码升级版)

单纠错,双检错。

你可能感兴趣的:(java)