海明码(Hamming Code)
基本概念
-
对于连续比特的检验有检错和纠错两种形式
检错编码:
- 奇偶校验码
- CRC冗余码
但是对于检错编码不能找到出错的位置,因此这里介绍一种纠错编码:海明码
-
海明码:
- 能够检查出错位和纠正出错位
- 其特点为,检查偶数位,纠正奇数位
-
海明不等式:
2 ^ r - 1 >= k + r
- r:冗余信息位
- k:数据信息位
基本步骤
-
根据传输的数据和海明不等式得到需要的冗余位个数:
例如:
∵ data = 101101【6位即k = 6】
∴ 需要的最小冗余码个数位2 ^ r - r >= 7 ==> r = 4
∴ 需要4位冗余位
-
将数据码填入正确的位置并留出冗余码的位置
冗余码的位置均为2^i --> 1,2,4,8…
因此冗余码对应的数据位均只有1位1,其余位均为0,且1的位置逐次升高
数据位置 0001【1】 0010【2】 0011【3】 0100【4】 0101【5】 0110【6】 0111【7】 1000【8】 1001【9】 1010【10】 信息(k)/冗余® r1 r2 k1 r3 k2 k3 k4 r4 k5 k6 数值 1 0 1 1 0 1 -
通过冗余码的数据位置,填充数组
一个冗余码控制多个相应位置
每个冗余码控制信息位对应位置位1的数据位置【由于冗余码的填充位置为2^i决定】:
例:
r1 = 0001最低位为1,因此所有数据位置最低位为1的位置均受其控制【0011(k1),0101(k2),0111(k4),1001(k5)】
填充方法:
r1 ⊕ k1 ⊕ k2 ⊕ k4 ⊕ k5 = 0 ==> r1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 0 = 0 ==> r1 = 0
数据位置 0001【1】 0010【2】 0011【3】 0100【4】 0101【5】 0110【6】 0111【7】 1000【8】 1001【9】 1010【10】 信息(k)/冗余® r1 r2 k1 r3 k2 k3 k4 r4 k5 k6 数值 0 0 1 0 0 1 1 1 0 1 -
对于接收方的校验:
-
对于所有检验位均再次对应异或运算:
例:
【表格种第五为发生了错误】
重新查看校验码:
r1 ⊕ k1 ⊕ k2 ⊕ k4 ⊕ k5 = 1(P1)
r2 ⊕ k1 ⊕ k3 ⊕ k4 ⊕ k6 = 0(P2)
r3 ⊕ k2 ⊕ k3 ⊕ k4 = 1(P3)
r4 ⊕ k5 ⊕ k6 = 0(P4)
P4P3P2P1 = 0101 = 5即第5位发生错误
数据位置 0001【1】 0010【2】 0011【3】 0100【4】 0101【5】 0110【6】 0111【7】 1000【8】 1001【9】 1010【10】 信息(k)/冗余® r1 r2 k1 r3 k2 k3 k4 r4 k5 k6 数值 0 0 1 0 1 1 1 1 0 1
-
-
将错误位取反即纠错结束