计算机数据为什么进行校验?

二进制数据进行传送存取环节时,由于存储器的触发器反转、电容电流流失等问题,容易导致存储数据发生变化,这就出现了检错和纠错的问题。

计算机的校验一般用于数据的通信和传递。

奇偶校验

奇偶校验是通过在数据前添加一位校验位来对传输数据进行校验。具体方法是:

偶校验在数据前加校验位(1或0),保证整组数据(校验位和数据位)1的个数为偶数。奇校验则是保证1的个数为奇数。

下面先以偶校验为例来看一下:

假设传输的数据为00101100,显然,数据中1只有三个,采用偶校验添加校验位的话应该添加1(保证1有四个)。那么生成的校验码就是100101100。

计算机只有一位出错的概率很大,一般默认出错位数就是一位

在此前提下,有了这个校验码之后,再进行数据传输,我们接受到的校验码应当是100101100,有偶数个1。一旦传输过程数据发生错误(要么0变为1,要么1变为0)。当我们接收数据时,就会发现1的个数为奇数个,显然数据发生了改变,这也就完成了检错过程。

但是我们无法确定出错的到底是哪一位,接下来我们采用分组的方式添加校验位。

还是以00101100这组数据为例,我们采用划分的方式进行分组,将0010分为一组,1100分为另一组,分别添加校验位:10010、01100。那么校验码就变成了1001001100。一旦数据改变,我们就可以通过第一组1的个数是否为偶数和第二组1的个数是否为偶数来确定出错位置是在第一组还是第二组。

以此为基础,下面我们来看一下汉明码。

汉明码(Hamming Code)

汉明码(Hamming Code)是计算机校验中应用比较广泛的一种校验码。

汉明码是如何检错的?

首先我们先举个例子(1010101).

位置: 1 2 3 4 5 6 7
数据: 1 0 1 0 1 0 1

采用一种非划分的方式进行分组:

p1组:1 3 5 7
p2组:2 3 6 7
p3组:4 5 6 7
用1来表示出错,那么:

p3      p2      p1

0        0       0
都没错
0        0       1
p1出错,p2,p3没错,由于3、5、7都在p2和p3中,只能是1出错。
0       1       1
p2,p1出错,p3没错,由于p2,p1中共有的为3和7,而7存在于p1,没出错,所以只能是3出错
1       1       1
p1,p2,p3共有的只有7,所以是7出错。

观察发现,按照组从大到下排列下来的二进制数转化为10进制数正好对应了出错位置,比如上面的数据:
000-------0,没出错
001-------1,1出错
011-------3,3出错
111-------7,7出错

通过这种分组方式就可以确定究竟是哪一位出错,完成了检错过程,而二进制数只能是0或1,只需将出错位变为1就可完成纠错过程。

汉明码是如何分组的?

规定用以下方式分组:
将1234567…n每个位置转化为二进制数。
满足以下形式:
p1(第一组):xxxx1          1,3,5,7…
p2(第二组):xxx1x          2,3,6,7…
p3(第三组):xx1xx          4,5,6,7…
以此类推。

汉明码校验位的位置?

规定以2的n次方为汉明码校验位(n=0,1,2,3…)
校验位出错不需纠错,因为需要的只是数据位

如何写出汉明码?

首先要确定汉明码有多少位,根据给定的数据,可利用公式:
2^k >= n+k+1.
n表示信息位,k表示校验位。
每一组都有错或不错两种状态,k个校验位表示了有k组,检验结果要指出n+k位哪一位错,而还有一种是没有错的状态。
利用该公式和给出的数据即可确定汉明码的位数。
也可不用汉明码直接写,把2的k次方的校验位单独留出来,其余位置添加对应数据即可。
例如
1011,采用偶校验
由于1 2 4是校验位,先将其空出来,然后顺序填入数据
1    2    3    4    5    6    7
            1          0    1    1
0    1          0
(p1:1,3,5,7    两个1    添0
p2:2,3,6,7    三个1    添1
p3:4,5,6,7    两个1   添0)
由此得出汉明码为0110011

如何确定汉明码出错位置

根据所得汉明码(假设通过偶校验方式),传输之后,若发生数据的改变(一位),先求出每一组是否出现错误数据,再从大到小,根据前面的例子,对应写出二进制,转化为10进制就是出错的位置。也可直接根据每组的重合部分和对错进行分析,找到错误位置。
比如上述汉明码,经过数据传输后由0110011变为0110111.
分析:
p1:1 3 5 7对应0 1 1 1 显然1的个数不是偶数个,出错,为1.
p2:2 3 6 7对应1 1 1 1 显然1的个数是偶数个,没出错,为0,
p3:4 5 6 7对应0 1 1 1 显然1的个数不是偶数个,出错,为1。
那么就可以得出:
p3  p2  p1
1   0    1
转化为10进制数为5.
即第五位出错。由于第五位不是校验位,将第五位的1变为0,即可得到正确的码0110011.
从而得到读取的正确数据1011。

汉明码(Hamming Code)分析相关推荐

  1. 【信道编码/Channel Coding】汉明码Hamming Code

    简介: 这是本专栏信道编码/Channel Coding的第三站,想对信道编码有一个系统性的认识可以看本专栏的 信道编码的整体框架 一文.而在本篇文章中,将介绍汉明码(Hamming Code)的构成 ...

  2. 【通信系统仿真系列】基于Matlab的汉明码(Hamming Code)纠错传输以及交织编码(Interleaved coding)仿真

    基于Matlab的汉明码纠错传输以及交织编码仿真 前言 原理 汉明码 编码过程 冗余位数量计算 校验位位置计算 计算校验相关位 开始编码 解码过程 实验结果 仿真代码 可以修改的参数 下载链接 主函数 ...

  3. 学习笔记之——汉明码(Hamming Code)

    差错控制编码 在通信系统中,信道通常是非理想的.信号经过信道时,一方面会受到噪声的干扰:另一方面,信道本身可能产生的复杂衰落变化也会对信号造成影响.这两种因素通常导致接收出现误码. 故此,在一个实际的 ...

  4. ECC校验——汉明码(Hamming Code)

    本文参考板块与链接: https://en.wikipedia.org/wiki/Hamming_code #wiki英文版 https://zh.wikipedia.org/wiki/%E6%B1% ...

  5. 汉明码(Hamming Code)原理及实现

    汉明码实现原理 汉明码(Hamming Code)是广泛用于内存和磁盘纠错的编码.汉明码不仅可以用来检测转移数据时发生的错误,还可以用来修正错误.(要注意的是,汉明码只能发现和修正一位错误,对于两位或 ...

  6. 海明码(汉明码、Hamming Code)

    目录 文章目录 目录 简介 编码 概述 示例 第1步:校验位的位置 第2步:数据位的位置 第3步:填入数据位 第4步:如何计算出校验位的值 第5步:计算出校验位的值 侦测和更正 概述 示例 第1步:检 ...

  7. 码距和检错纠错能力的关系、CRC和Hamming Code

    前言 CRC和Hamming Code都采用了冗余编码技术,而前者是一种检错编码,而后者是一种纠错编码.冗余(CRC中的FCS帧检验序列.Hamming Code中的校验位)的作用之一就是帮助扩大码距 ...

  8. matlab hamming code

    Hamming code 是一种用于检测和纠正错误的纠错码,在 Matlab 中也可以实现它的编码和译码过程. 具体的实现方法可以通过自定义函数实现,例如实现编码和译码的过程,以及检测和纠正错误. 例 ...

  9. hamming code/汉明编码

    hamming code/汉明编码 看了很多文章都没太讲明白汉明编码,都讲的太复杂了,概念复杂.操作也复杂,之后看了些资料,明白了一些,在此分享,希望能够简洁而本质的阐述汉明编码. 汉明编码的本质 通 ...

最新文章

  1. 使用 Shiro 设计基于用户、角色、权限的通用权限管理系统
  2. Spring读取配置文件,获取bean的几种方式
  3. java文件file字符集_获取文件字符集(或文件编码) 的工具类
  4. python输入字符串从大到小排列_567. 字符串的排列(Python)
  5. Java私有方法解释_java接口中 定义 private 私有方法
  6. C 语言和C++语言的 struct对比
  7. 【Pytorch神经网络实战案例】10 搭建深度卷积神经网络
  8. toj 4596 一行盒子
  9. VMware SDS 什么是VSAN?? VSAN的体系结构 (含VSAN 6.0、6.1版的新内容)
  10. 微信发送模版消息,PHP代码简单案例
  11. Flutter之GridView简析
  12. fbinstool linux iso,大神给你传授fbinsttool下载 【操作教程】 的详细_
  13. 2023拼多多商品详情,拼多多sku采集
  14. linux安装程序出现了问题,linux安装extundelete以及对遇到问题的解决
  15. 史上最全网络通讯(IIOT、工业控制、5G、区块链)协议全景图
  16. 怎么用ChemDraw加反应条件
  17. Linux安装unrar
  18. 【小5聊】winform窗体之最小化事件捕捉以及最小化到任务栏功能
  19. 【每日早报】2019/08/06
  20. [paper] Multiple Human Parsing

热门文章

  1. php 声音,声音 - LMLPHP后院
  2. AC_mm玩dota
  3. 理解大数据解决方案的架构层
  4. crlf换行 idea_git 换行符LF与CRLF转换问题
  5. 北京4名IT男改卖肉夹馍日入万元
  6. Jython、JRuby 和 Groovy
  7. 《变形金刚4》玩植入玩过头 红牛、舒化奶……啥都有
  8. 为什么有些人用了1年就获得了你10年的能力?
  9. Android小程序之音乐播放列表
  10. 随便想到,群聊天的数据库简单设计