存储器(四) -- 汉明码

来源:互联网 发布:win10网络连接是空的 编辑:程序博客网 时间:2024/05/19 14:54

Abstract:哈工大计算机组成原理刘宏伟, 本篇文章主要讲述存储器为什么要校验和汉明码

------------------------------------------


储存器的校验

为什么要校验?

以内存为例, 如果内存所处的电磁环境比较复杂, 或者空间环境下受到带电粒子的打击, 那么可能导致电容的充放电或者触发器的翻转(SRAM)。 这样会导致存储信息的改变。 如果不校验, 存储中存储的程序可能不会发挥它应有的作用, 甚至会发生严重的后果。

编码的最小距离

任意两组合法代码之间二进制位数的最小差异、编码的纠错、改错能力与编码的最小距离有关。 编码的最小距离就是从一种合法代码转化成另外一种合法代码所变化的最小位数。存在如下公式:

L - 1 = C + D ( D >= C)

L:编码的最小距离

D:检测错误的位数

C:纠正错误的位数

汉明码是一种具有纠错能力的编码。

汉明码的组成:

汉明码采用奇偶校验, 奇校验就是在数据位基础上加一个校验位, 使得整个代码“1”的个数为奇数。偶校验就是在数据位基础上加一个校验位,使得整个代码“1”的个数为偶数。

汉明码就是采用这样一种方式, 但是汉明码采用分组校验。

比如下面这个例子, 前面是数据位, 在数据位的基础上面加一个校验位, 采用偶校验的方式。

如果整个代码“1”的个数为奇数, 我们就知道有一位数据发生了翻转(因为数据位翻转的位数越多, 可能性越小。)如果我们将

数据划分成为两组,每组都加一个校验位,那么可以大大缩小确定发生翻转的位数的范围。这种划分方式是没有重叠的, 每个分组

的数据连在一起就是原来的数据。

汉明码采用的是非划分方式

对于下面这个数据, 我们采用汉明码的方式。

将数据分为三组, 每组一个校验位, 每组四位数据。 按照如下方式分组

上、左、右 三个圆分别为 第一组、第二组、第三组。 如果有某组位置错了就将它置为 1, 没错就是 0. 那么有如下

可以看出P3P2P1组成的二进制值就是出错的位置。那么校验位应该放在哪里呢?因为校验位都是本组独有的, 所以容易确定为

1、 2、 4;

为什么P3P2P1组成的二进制数据能表示出错的位置呢? 这就和汉明码独特的编码方式有关了, 其实仔细观察上面的分组规律会

发现一个特点:第一组:1、 3 、5、 7; 这四个数化成二进制之后, 最后一位都是1; 第二组:2、 3、6、 7;这四个数化成二进制

之后, 倒数第二位都是1; 同样第三组数字化成二进制之后倒数第三位都是1; 然后他们相交的地方:比如3, 倒数第二位和倒数第

一位都是1; 5, 倒数第三位和倒数第一位都是1; 7, 倒数第一、二、三位都是1, 所以7 是三组的交点。如果是第一组和第三组

出错 那么 倒数第一、三位为 1, 其他位为 0; 也就是 101 就是 5。 ^-^

这就是汉明码的编码方式。

下面谈谈汉明码的组成(三要素)

汉明码需要增加多少位检测为(即分多少组)?

检测位的位置?

这个问题前面已经提到过了。 放在 2 的整数次方的位置, 但是比组数少 1, 即第二组放在 2^1 = 2 的位置; 第三组放在

2^2 = 4的位置

检测位的取值?

先来看看第一个问题:汉明码需要增加多少位检测位? 有一个公式:

2^k >= n + k +1

n:信息位

k:校验位

接受方的结果要能够表示出错的具体位置, 再加上一种全部正确的结果。

检测位的取值与奇校验还是偶校验有关。

ps:关于汉明码的更多内容请参见百度、google等, 这里就不贴链接了。

原创粉丝点击