前言:
汉明码国内教材很多,但大致都是一样的,这篇主要参考
Intermation 的三篇博客,非常新颖,更加深入的了解一下汉明码的思想。
阅读之前建议先找些国内的教材或者博客看下。
Ep 051: Introduction to Hamming Code
Ep 052 Hamming Code and the Error Syndrome
Ep 053: Creating Hamming Code for Eight Data Bits
SEC: single error correction
DEC: double error detection
GPCB: global parity check bits
- Introduction to Hamming Code
- Hamming Code and the Error Syndrome(错误伴随式)
- Creating Hamming Code
一 Introduction to Hamming Code
最常用的是(7,4)编码格式,也经常称为SEC(Single Error Correction)单错误纠正码
前面讲过,一种解释是其编码是通过校验位的线性组合得到的(
)
,
然后把所有
相关项相加就得到了校验方程式
早期的磁盘,VCD 里面就用到了该技术.
汉明码的核心思想是基于错误的组合来编解码:
1.1 例子
原始bit [1011]
bit flipped[1001]
汉明码的特点是一个数据bit,关联至少两个奇偶校验位,
所以当1个bit flipped时候,会导致至少两个奇偶校验位同时发生
bit flipped. 如上,再反过来找到
里面的交集,就会得知
发生了
bit flipped, 下面会用图形解释到底发生了什么
1.2 图形化解释
如上 发生bit flipped, 会导致
同时发生 flipped,
如下图,校验方程式的交集
,但是
相关的
校验方程式正确,所以认为
发生了错误。80年底出现了Tanner 图,也可以进一步用其解释到底发生了什么。
外文经常称其为不同的group
1.3 奇偶校验位发生错误
如下图相关的校验方程发生了错误(一个圆内数据模二和)
相关的校验方程正确,所以知道时奇偶校验位发生了错误。
通过下面我们知道奇偶校验位发生了错误,0 变成了1,如果
是VCD产品中在内存读写中,会改写该奇偶校验位。
2.3 2个 bit 发生flip
如上图,校验方程式同时有两个bit 发生了flip,但是最终只有
相关的校验方程式
发生了错误,认为奇偶校验位发生了错误,这个时候就没有办法发现,纠正错误。
2.4 global parity check bit
如上图
增加了一个 ,即原数据中所有1的个数和,如果是偶数则为0,奇数为1
如上图,按照原纠错方案把 把1 flip 成0,最终再通过整体的
去校验
发现1的个数和为3,但是,纠错失败,意味着发生了Double error.
三 Hamming Code and the Error Syndrome
我们在内存中存储的数据主要包括两个部分,数据部分以及奇偶校验部分
当读取数据的时候,先根据数据部分计算出奇偶校验结果: ,再用该值
跟存储的奇偶校验位进行对比。如下图,如果没有错误
根据 发生错误error syndrome (错误伴随式)
3.1 奇偶校验位发生错误(check bit error)
只会导致对应的出错
所以其对应的错误伴随式如下
3.2 数据位出错(data bit error)
如出错,会导致
flip,则
设计思想主要是当前bit 出错,会影响到几个校验方程,如下图依次类推.
3.3 编码原理
我们通过上面的表格,每一行可以看到发生了什么错误。
我们现在按列看,把所有为1的,即所有错误的可能相加
得到 , 这也是编码原理
其它的依次类推
三 Creating Hamming Code for Eight Data Bits
S 的本质是拿计算出来的校验位跟存储的校验位进行对比的结果:1出错,0 正确。
每一行,代表一个错误的case,无论是data bits 还是 check parity bits 发生 flipped,
都会导致S出错。
error cases:
no error cases: 1
parity error cases: m
data bits error cases: n
我们看到的都是等于号,也可以data bits 取少一点
每一列,所有可加起来代表 哪些数据位发生bit flip 会影响到当前的奇偶校验位计算
最后因为汉明码只能纠正检测出一位错误,所以要加一个GPCB,保证
两位bit 发生bit flip 时候,也能发现错误。
![](https://img-blog.csdnimg.cn/581f25588df847a2938a055468c2154e.png)