差错控制-纠错编码

183 阅读4分钟

过程

  1. 确定校验码位数r
  2. 确定校验码和数据的位置
  3. 求出校验码的值
  4. 检错并纠错

海明距离

衡量两个相同长度的字符串(通常是二进制数)之间有多少个位置的字符不同,需要改变多少个比特才能将一个字符串变成另一个

举例: 1011101 1001001

第1位:1 和 1 (相同)
第2位:0 和 0 (相同)
第3位:1 和 0 (不同)
第4位:1 和 1 (相同)
第5位:1 和 0 (不同)
第6位:0 和 0 (相同)
第7位:1 和 1 (相同)

这里有2位不同。所以,海明距离是2。

海明码

检错码

  1. 对于检错码,如果编码集的汉(海)明距离d=r+1,则该差错编码可以检测 r 位的差错编码集

也就是说,如果海明距离为2,可以检查出1位的差错,因为所有的编码距离都有两位的不同编码集 {0000,0101,1010,1111},只有四种情况,当出现了0001,则说明出现了错误,但是我们无法纠正,因为0001变成0000和0101,都只用变化1位

如果海明距离是1,则不能进行差错检测

纠错码

  1. 对于纠错码,如果编码集的汉明距离d=2r+1,则该差错编码可以纠正 r 位的差错

如果编码的海明距离是3,那么可以纠错1位的编码错误,编码集{000000,010101,101010,111111},如 100010 纠正为101010,纠正成离他最近的那个编码

基于概率最大化,没有办法100%进行纠错

步骤1:确定校验码位数r

信息有m位,冗余码有r位,校验码一共有2的r种取值 2r{^r} ≥ m + r + 1 推导:

  1. m+r:总位数(数据位加上校验位)

  2. 总共有 m+r 个位置(因为每个位置都可能出现错误),加上一个零错误的情况,即 m+r+1种可能的状态。

  3. 校验位的所有状态 ≥ 数据的所有状态

  4. 每个校验位可以有两种状态(0 或 1),所以 r 个校验位可以表示 2r2{^r}种不同的状态

  5. 所以为了确保可以唯一的表示m+r+1种状态,即包括所有可能的错误和无错误的状态,要满足2r2{^r}≥ m+r+1

    校验位可以通过特定的位置和组合检测错误的位置。

例:1101

信息为有4位, 2{^r}r{^r}r ≥ 4 + r + 1,只有当r = 3时,8 ≥ 8,则 r = 3

步骤2:确定校验码和数据的位置

  1. 校验码放在序号为2{^n}n{^n}n,的位置上,数据按顺序填上
  2. 校验码:1,2,4
  3. 则数据:3,5,6,7

image.png

  1. 得到:1 1 0 _ 0 _ _

步骤3:求出校验码的值

  1. 4号 :100;负责1 * *的校验,负责4,5,6,7的校验
  2. 2号:010;负责* 1 *的校验,负责2,3,6,7的校验
  3. 1号:001;负责* * 1的校验,负责1,3,5,7的校验
  4. 采用偶校验,凑成偶数个1
    1. 比如1号,357加起来是1个1,那么1号值为1
    2. 比如2号,367加起来是2个1,那么2号值为0
    3. 比如4号,567加起来是2个1,那么4号值为0
  5. 得到完整的海明码

image.png

步骤4:检错并纠错

  1. 1 1 1 0 0 0 1
  2. 7 6 5 4 3 2 1
  3. 若收到的值为 1 1 1 0 0 0 1
  4. 数据部分是1110
  5. 4号校验码负责4,5,6,7的校验:0,1,1,1 —— ×
  6. 2号校验码负责2,3,6,7的校验:0,0,1,1 —— √
  7. 1号校验码负责1,3,5,7的校验:1,0,1,1 —— ×
  8. 根据偶校验,算出x4 = 1;x2 = 0 ; x1 = 1

image.png

  • 则101 = 5,第五位错了