概述
存储器校验
- 1.对存储器校验的原因:
以内存为例,内存是电子设备,信息保存在电容当中,若采用静态RAM,则是保存在四管的触发器当中,若内存所处的电磁环境比较复杂,或在空间环境下受到带电粒子的打击,可能造成电容的充放电或触发器的翻转,存在在存储器的信息可能会出错
- 2.编码的检测能力和纠错能力与任意两组合法代码之间二进制的最少差异数有关
差异的位数越多,检错能力和纠错能力就越强
若只差一位,既不能检错,也不能纠错
若相差两位,可以检1位错,纠0位错
若相差三位,可以检1位错,纠1位错
- 3.编码的最小距离
任意两组合法代码之间二进制的最少差异数
编码的检测能力和纠错能力与编码的最小距离关系
L-1=D+C(D>=C)
L:编码最小距离
D: 检错位数
C: 纠错位数
假设L=3,要使编码具有一位纠错能力,至少有一位检错能力
- 4.汉明码
(1)定义:指具有一位纠错能力的编码
(2)采用奇偶校验
采用分组校验
(3)奇校验:加上一个校验位,加上原来的数据位,两者和在一起,代码当中1的个数是奇数个。
偶校验:加上一个校验位,加上原来的数据位,两者和在一起,代码当中1的个数是偶数个。
假设要传输的信息是一个8位的信息,假设其为偶校验,加上一位校验位使其1的个数变为偶数个
得到一个偶校验的编码,若读出的信息中1的个数是偶数个,则可以知道9位代码中有1位代码发生翻转,1的个数由奇数个变为偶数个,得知9位代码中有一个错。(不知道哪个出错)
(4)可以通过分组划分:
采用2位奇偶校验位,划分为2组:前4位为1组,后4位为1组
每一组都用1个校验位,得到新的校验位,如上图所示,接受到的信息进行校验,若是前面的5位1的个数变为奇数个,说明这5位中有1位是错误的;若是后面的5位1的个数变为奇数个,说明这后5位中有1位是错误的。
(5)汉明码的分组是一种非划分方式
假设现在有7位数据
分成3组,每组有1位检验位,共包括4位数据位。
每个圆圈表示1组
1,2,4分别被分到3组当中,每组独有一位,每组都采用偶校验的方式。3组中每组包含4位数据,4位数据中有1位校验位。
3组生成3个校验结果
偶校验采用异或门实现,1的个数是偶数个,所以校验的结果应该是3个0,无差错
P1对应第一组校验结果,P2对应第二组校验结果,P3对应第三组校验结果
P3P2P1
0 0 0 若无差错,三组校验结果都为0
0 0 1 第一组出错(第一组独有的位置,恰好就是1
)
1 0 1 第一组和第三组都出错,代码只错误1位,所以是两组的公共部分5
1 0 1 第二组和第三组都出错,1位错,二三组公共位置6
1 1 1 第一组和第二组和第三组都出错,1位错,一二三组公共位置7
综上:对每组分别校验,校验得出的结果排在一起,得出的数用二进制的方式来表示,这个二进制数转换为十进制就给出了出错的位置,全0没有出错,001就是1错了,011是3错了,110就是6错了,111是7错了
(6)用这种方式编码校验位放在哪里呢?
例如:第一组1,3,7哪个是校验位?
校验位只对一组数据进行校验,所以和其他组不会有公共部分,所以校验位度放在2的n次方,1,2,4都为校验位
汉明码如何进行编码呢?
二进制表示:
第一组 XXXX1 最右侧的1位为1
第二组 XXX1X 倒数第二位是1
第三组 XX1XX
第四组 X1XXX
第五组 1XXXX
若代码最后1位和倒数第2位 均为1,所以是第一组和第二组公共部分出错,其他组以此类推
校验过程:
如果对每一组代码进行检测
假如第一组代码出错,检验出结果一定是最右侧的一位为1,其他位置为0,
假如第一组和第三组代码出错,检验出结果一定是最右侧的一位为1和最右侧开始数第三位为1,其他位置为0,得到101,(也就是5,一三组共有的位置)
校验的结果指出某一位出错,或者整个代码在传输过程中没有发生错误,1,2,4,8是每一组独有的位置,这样的位置就是汉明编码中校验位所在的位置
结论:
对每组分别校验,校验得出的结果排在一起,得出的数用二进制的方式来表示,这个二进制数转换为十进制就给出了出错的位置,
汉明码
- 组成汉明码的三要素
(1)汉明码的组成需添加多少位检测位?
2^k>=n+k+1
n:信息位
k:校验位(k组)
汉明码添加多少位检测位,就是分成多少组,对每一组进行检测,会得到不同的检测位,组成二进制编码
这些编码要指出某一位的错或者是没有错
接收方要指出n+k位中哪一位出错了,或者是没有错
最后要指出状态数n+k+1(这些状态是用k位的二进制数进行编码的)=》2^k>=n+k+1
(2)检测位的位置?
2^i (i=0,1,2,3,…)
(3)检测位取值?
检测位的取值与该位所在的检测“小组承担的奇偶校验任务有关”
一般采用偶校验(1的个数均为偶数个,在不特殊说明的情况下)
(4)根据汉明编码的规则,把所有代码分成k组,每一组都有1位,对这组当中的数据进行校验,各个校验位Ci
各检测位Ci所承担的检测小组为
C1检测的g1小组包含第1,3,5,7,9,11,…位置的二进制编码为X…XXX1
C2检测的g2小组包含第2,3,6,7,10,11,…位置的二进制编码为X…XX1X
C4检测的g3小组包含第4,5,6,7,12,13,…位置的二进制编码为X…X1XX
C8检测的g4小组包含第8,9,10,11,12,13,…位置的二进制编码为X…1XXX
.
.
.
每组中都有一个位置是独占的,则独占的这个位置就是检测位所在的位置
gi小组独占第2^i-1位 位置的二进制编码为0…10…0
gi和gj小组共占第2^(i-1)+2 ^(j-1)位 对应的位置的二进制编码为0…010…0
gi、gj和gj小组共占第2^(i-1)+2 ^(j-1)+2 ^(l-1)位
例题:
求0101按“偶校验”配置的汉明码
解:因为n=4
由2^k>=n+k+1得k=3
汉明码排序如下:
解析:对照上面的表c1对应1,3,5,7…这几个位,发现5位和7位都为1,1的个数是偶数个,所以C1处添0
对照上面的表c2对应2,3,6,7…这几个位,发现第7位都为1,1的个数是奇数个,所以C2处添1
对照上面的表c2对应4,5,6,7…这几个位,发现第5位和7位都为1,1的个数是偶数个,所以C2处添0
检验位只在1,2,4,8,,这几个位进行校验
所以0101的汉明码为0100101
最后
以上就是笑点低蜜粉为你收集整理的汉明码---存储器校验(简单易懂详解)的全部内容,希望文章能够帮你解决汉明码---存储器校验(简单易懂详解)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复