当前位置: 首页 >  软件学堂 >  存储器的校验:汉明码

存储器的校验:汉明码

导读:前言.在计算机运行过程中,由于种种原因致使数据在存储过程中可能出现差错。为了能及时发现错误并及时纠正错误,通常使用一些编码方式。.奇偶校验.奇偶校验是一种添加一个奇偶位 用来指示之前的数据中包含有奇数 还是偶数 个1 的检验方式。.对于一个二进制数:\(bnb{n-1}…b_2b

前言

在计算机运行过程中,由于种种原因致使数据在存储过程中可能出现差错。为了能及时发现错误并及时纠正错误,通常使用一些编码方式。

奇偶校验

奇偶校验是一种添加一个奇偶位 用来指示之前的数据中包含有奇数 还是偶数1 的检验方式。

对于一个二进制数:\(bnb{n-1}…b_2b_1\),添加一个校验位s ,采取 校验,即校验位使新数据中的1的个数为偶数。

新数据:\(bnb{n-1}…b_2b_1s\)。

即 \(bn \oplus b{n-1} \oplus … \oplus b_2 \oplus b_1 \oplus s = 0\),则\(s = bn \oplus b{n-1} \oplus … \oplus b_2 \oplus b_1\)。

在传输过程中,如果只有1位奇数个位 )发生了改变(包括校验位 ),那么将可以检测出来错误。但是如果有偶数个位 发生了改变,那么校验位将是正确的,因此不能检测错误。而且,即使出现了错误,也不知道是哪一位出现了错误,数据必须整体丢弃并且重新传输。

汉明码

简介

汉明码的实质上是多重 奇偶校验,通过巧妙的分组 ,实现了校验并纠正一位错误的能力。

编码纠错理论

​ 任何一种编码是否具有检测能力和纠错能力,都与编码的最小距离有关。所谓编码最小距离,是指在一种编码系统中,任意两组合法代码之间的最少二进制位数的差异。

根据纠错理论得:

\( L -1 = D + C \ 且 \ (D \ge C)\)

即编码最小距离L 越大,则其检测错误的位数D越大,纠正错误的位数C 也越大,且纠错能力恒小于或等于检错能力。

所以,如果我们在信息编码中增加若干位检测位,增大L ,显然便能提高检错和纠错能力。汉明码 就是根据这一理论提出的具有一位纠错能力的编码。

关于编码最小距离

例1.1

假设我们的一种编码系统 是所有的3位二进制数,即\(设集合 S =\left\{ 000,001,010,011,100,101,110,111 \right\}\)。

那么对于任何一个数据,比如我们传输\(010\)这个数据,它发生错误会改变为:

  1. 第一位0 变为1 :\(110\)
  2. 第二位1 变为0 :\(000\)
  3. 第三位0 变为1 :\(011\)

显然,这三种数据都在集合当中,我们检验不出错误。

此时就是,\(L = 1\), 那么\(0 = D + C\)。

例1.2

\(设集合 S =\left\{ 001,010,100 \right\}\)。

可以看出,我们的编码最小距离为2,\(L = 2\),那么\(1 = D+C\),那么\(D = 1, C = 0\)。即,可以检一位错,不能纠错。

比如,我们传输数据\(010\):

  1. 第一位0 变为1 :\(110\)
  2. 第二位1 变为0 :\(000\)
  3. 第三位0 变为1 :\(011\)

但是,\(110,000,011\)均不在集合S中,所以我们可以判断这是出错了,那怎么纠错呢?

对于出错数据\(110\),它的可能正确数据:

  1. 第一位0 变为1 :\(010\)
  2. 第二位0 变为1 :\(100\)
  3. 第三位1 变为0 :\(111\)(不存在S中)

所以是会有两种情况,故,无法纠错。

例1.3

\(设集合 S =\left\{ 000,111 \right\}\)。

则,\(L = 3, D = 1 \;且 \;C= 1 \;或\; D = 2\;且\; C = 0\)。

核心公式

设欲检测的二进制代码为n 位,为使其具有纠错能力,需增添k位检测位,组成 n + k 位的代码。为了能准确对错误定位以及指出代码没错,新增添的检测位数 k 应满足:

\(2^k \ge n + k + 1\)

变换一下:

\(2^k - 1\ge n + k \)

k 位检测位可以提供\(2^k\)种状态,减去一种正确 的状态,即,所有错误的状态应该包括分别每一位出错的情况 ,这里每一位出错包括检测位,所以就是\(n + k\)。

这样是不是更好理解。

由此求出不同代码长度 n,所需检测位的位数 k:

n K(最小)
1 2
2~4 3
5~11 4
12~26 5
27~57 6
58~120 7

分组

k的位数确定后,便可由它们所承担的检测任务设定它们在传送代码中的位置及它们的取值。

设\(n + k\)位代码自左至右依次编为第\(1,2,3,···,n + k\),而将\(k\)位检测位记作\(C_i(i = 1,2,4,8,···)\),分别安插在\(n + k\)位代码编号的第\(1,2,4,8,···,2^{k-1}位上\)。

  • \(C_1\):检测的\(g_1\)小组包含1,3,5,7,9,11,··· 位。
  • \(C_2\):检测的\(g_2\)小组包含2,3,6,7,10,11,14,15,··· 位。
  • \(C_4\):检测的\(g_3\)小组包含4,5,6,7,12,13,14,15,··· 位。
  • ··········

这种小组的划分有以下特点:

  1. 每个小组\(g_i\)有一位且仅有一位为它所独占,这一位是其他小组所没有的,即\(g_i\)小组独占第\(2^{i-1}\)位(\(i = 1,2,3,···\))。
  2. 每两个小组\(g_i\)和\(g_j\)共同占有一位是其他小组没有的,即每两个小组\(g_i\)和\(g_j\)共同占有第\(2^{i - 1} + 2^{j - 1}\)位(\(i,j = 1,2,···\))。
  3. 每3个小组\(g_i,g_j和g_l共同占有第\)\(2^{i -1} + 2^{j - 1} + 2^{l - 1}\)位,是其他小组所没有的。
  4. 依次类推。

特点似乎有点不明所以,总结起来就是:

  • \(g_1小组\): 位数为 \(xxx1\) 的二进制数表示。
  • \(g_2小组\): 位数为 \(xx1x\) 的二进制数表示。
  • \(g_3小组\): 位数为 \(x1xx\) 的二进制数表示。
  • ······

稍后,我们会明白这样设计的缘由。


现在我们需要传递一个4位二进制数,记为\(b_4b_3b_2b_1\)。

那么根据前面的核心公式 \(2^k \ge n + k + 1\),可以求出最小的 k为3。

二进制序号 1 2 3 4 5 6 7
名称 \(C_1\) \(C_2\) \(b_4\) \(C_4\) \(b_3\) \(b_2\) \(b_1\)

则,根据配偶原则:

\(C_1 \oplus b_4 \oplus b_3 \oplus b_1 = 0\)

\(C_2 \oplus b_4 \oplus b_2 \oplus b_1 = 0\)

\(C_4 \oplus b_3 \oplus b_2 \oplus b_1 = 0\)

例2

令\(b_4b_3b_2b_1 = 1101\),则:

\(C_1 = b_4 \oplus b_3 \oplus b_1 = 1 \oplus 1 \oplus 1= 1\)

\(C_2 = b_4 \oplus b_2 \oplus b_1 = 1 \oplus 0 \oplus 1 =0\)

\(C_4 = b_3 \oplus b_2 \oplus b_1 = 1 \oplus 0 \oplus 1 = 0\)

故 0101的汉明码应为\(C_1C_2b_4C_4b_3b_2b_1\),即1010101。

纠错过程

汉明码的纠错过程实际上就是对配偶原则(或者奇)的检验,根据新数据的状态,便可直接指出错误的位置。直接看例子:

例3

已知,传送的正确汉明码是\(1010101\)(配偶原则),传送后接受到的汉明码为\(1010111\):

二进制序号 1 2 3 4 5 6 7
发送的汉明码 1 0 1 0 1 0 1
接收的汉明码 1 0 1 0 1 1 1

检测:

  • \(P_4 = 4 \oplus 5 \oplus 6 \oplus 7 = 0 \oplus 1 \oplus 1 \oplus 1 = 1\)
  • \(P_2 = 2 \oplus 3 \oplus 6 \oplus 7 = 0 \oplus 1 \oplus 1 \oplus 1 = 1\)
  • \(P_1 = 1 \oplus 3 \oplus 5 \oplus 7 = 1 \oplus 1 \oplus 1 \oplus 1 = 0\)

可见,\(P_4 和 P_2\)都不为 0,显然出错了。

那如何找出错误呢?

这里是假设只出现一位错误,因为此时的\(L = 3\),只能检一位错,纠一位错。

  • 因为\(P_1 = 0\),所以可以认为 \(1,3,5,7\)都没有错。
  • \(P_4 = 1,P_2 = 1\),说明 \(4,5,6,7\)中有一位错, \(2,3,6,7\)中有一位错。
  • 那现在错误的范围就缩小到了,\(4,6\)中有一位是错的,\(2,6\)中有一位错的。
  • 显然,第6位是错的。

此时,更加巧合 的是:二进制数\(P_4P_2P_1 = 110\)恰好是\(6\)。

换句话说,检测出的信息 所表示的 就是出错的位置。

韦恩图

我们用韦恩图来表示一下刚刚找错误位的过程:

刚刚找 6 的过程不就是:\(\neg P_1 \cap P_2 \cap P_4\),这样十分巧妙地利用集合就找出了错误的位。

这样可以理解之前设计的原因了吧。

参考文献

维基百科

唐朔飞. 计算机组成原理[M]. 第3版. 高等教育出版社, 2020.

内容
  • 等保测评之主机测评——Windows Sever
    等保测评之主机测评——Windo
    2023-12-08
    目录.(一)身份鉴别.(二)访问控制.(三)安全审计.(四)入侵防范.(五)恶意代码防范.(六)可信验证.(七)数据完整
  • 读发布!设计与部署稳定的分布式系统(第2版)笔记26_安全性上
    读发布!设计与部署稳定的分布式系
    2023-12-07
    1. 安全问题.1.1. 系统违规并不总是涉及数据获取,有时会出现植入假数据,例如假身份或假运输文件.1.2. 必须在整
  • 联邦GNN综述与经典算法介绍
    联邦GNN综述与经典算法介绍
    2023-12-07
    作者:京东科技 李杰.联邦学习和GNN都是当前AI领域的研究热点。联邦学习的多个参与方可以在不泄露原始数据的情况下,安全
  • keras图片数字识别入门AI机器学习
    keras图片数字识别入门AI机
    2023-12-07
    通过使用mnist(AI界的helloworld)手写数字模型训练集,了解下AI工作的基本流程。.本例子,要基于mnis
  • Hutool:一行代码搞定数据脱敏
    Hutool:一行代码搞定数据脱
    2023-12-07
    1. 什么是数据脱敏.1.1 数据脱敏的定义.数据脱敏百度百科中是这样定义的:.数据脱敏,指对某些敏感信息通过脱敏规则进
  • 一种配置化的数据脱敏与反脱敏框架实现
    一种配置化的数据脱敏与反脱敏框架
    2023-12-07
    1.tony框架背景.在业务量日益剧增的背景下,大量数据在各种业务活动中产生,数据安全控制一直是治理的重要环节,数据脱敏
  • 使用GetDIBits()获取Windows位图数据的标准用法,解决内存、堆栈报错问题
    使用GetDIBits()获取W
    2023-12-06
    获取图标的位图数据.分两次使用GetDIBits(),以便于正确设置缓存的大小.正确设置BITMAPINFO的大小,否则
  • 小波去噪算法的简易实现及其扩展(小波锐化、高斯拉普拉斯金字塔去噪及锐化)之二。
    

SSE图像算法优化系列九:灵活运用SIMD指令16倍提升Sobel边缘检测的速度(4000*3000的24位图像时间由480ms降低到30ms)
    小波去噪算法的简易实现及其扩展(
    2023-12-06
    上一篇文章谈及了GIMP里实现的小波分解,但是这仅仅是把图像分解为多层的数据,如果快速的获取分解数据以及后续怎么利用这些
  • 不清除手机数据怎么解锁锁屏密码
    不清除手机数据怎么解锁锁屏密码
    2023-12-06
    不清除手机数据怎么解锁锁屏密码.在现代社会中,手机已经成为我们生活中不可或缺的一部分。然而,有时我们可能会遇到忘记锁屏密
  • 智能物联网时代里信息存储、处理和传输方式的变化浅谈
    智能物联网时代里信息存储、处理和
    2023-12-06
    智能物联网时代里信息存储、处理和传输方式的变化浅谈.在智能物联网时代,信息存储、处理和传输的方式将发生重大变化。以下是一
  • 开发环境篇之HALCON数据结构
    开发环境篇之HALCON数据结构
    2023-12-05
    开发环境篇之HALCON基础.目录.基本数据分类.图标类数据.Image(图片).Pixel:像素.Channel:通道
  • 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法
    虹科案例 | 丝芙兰xDomo:
    2023-12-05
    全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段。身为数据驱动型企业,2018年以来,丝芙兰就率先在
  • colmap 初体验🫠🎶
    colmap 初体验🫠🎶
    2023-12-05
    安装:Installation — COLMAP 3.9-dev documentation.使用:Tutorial —
  • ManageEngine ServiceDesk Plus之CVE漏洞
    ManageEngine Ser
    2023-12-05
    什么是CVE?.CVE的英文全称是“Common Vulnerabilities &.Exposures”即通用漏洞披露
  • 自主三维GIS引擎笔记-实现三维球045
    自主三维GIS引擎笔记-实现三维
    2023-12-05
    最小GIS迷你地球实现(实现一套最小的三维GIS球体) V1.0.0.0版本.数据加代码比较大(主要是数据,数据有1G多
  • Wireshark使用
    Wireshark使用
    2023-12-03
    WireShark是非常流行的网络封包分析工具,可以截取各种网络数据包,并显示数据包详细信息。常用于开发测试过程中各种问
  • Rsync简介
    Rsync简介
    2023-12-03
    Rsync是一个远程数据同步工具,可以实现Windows系统间、Linux系统间以及Windows和Linux系统间的数
  • 业务数据“一站式”数据管理平台,从设备实时数据和业务应用数据两个方面要彻底解决“信息孤岛”的问题
    业务数据“一站式”数据管理平台,
    2023-12-02
    ** 1. 产品背景**.工业数据大致分为两种数据:设备实时数据和业务应用数据。.设备实时数据.的管理是iNeuOS工业
  • Easygraph:全面高效的图分析与社会计算开源工具
    Easygraph:全面高效的图
    2023-12-01
    前言.图是对事物之间关系的一种原生的表达,利用图可以深入直接地认识世界中的关联。社交网络、交易数据、知识图谱、交通运输、
  • ***远程监控系*
    ***远程监控系*
    2023-12-16
    ***远程监控系*.产品功能.我们的服务器远程监控系*是一款针对企业服务器管理的智能监控系*。它具有实时监控、远程操作、
  • ***虚拟化解决方案
    ***虚拟化解决方案
    2024-01-05
    ***虚拟化解决方案产品介绍.我们公司自豪地推出了全新的服务器虚拟化解决方案,该产品旨在帮助企业更高效地利用服务器资源,
  • ***硬件
    ***硬件
    2023-12-21
    ***硬件.产品功能.***硬件是一种专门为数据存储和处理而设计的硬件设备。它能够提供稳定可*的存储空间和数据处理能力,
  • 电子元件继电器
    电子元件继电器
    2024-01-10
    电子元件继电器.产品功能.电子元件继电器是一种用于控制电路的开关装置,通过控制电磁吸引力的改变来实现开关的闭合和断开。它
  • 互联网金融服务平台
    互联网金融服务平台
    2024-01-10
    互联网金融服务平台.产品功能.个人理财:用户可以通过平台进行投资理财,选择适合自己的理财产品,实现资金增值。.贷款服务:
  • ***软件
    ***软件
    2023-12-06
    ***软件产品介绍.产品描述.我们的服务器软件是一款高性能、稳定可靠的服务器管理软件,具有强大的功能和灵活的配置,适用于
  • 移动应用开发
    移动应用开发
    2023-12-01
    移动应用开发.产品描述.移动应用开发是一种专注于为移动设备(如智能手机、平板电脑)开发应用程序的技术和流程。这些应用程序
  • 电子元件半导体器件
    电子元件半导体器件
    2023-12-06
    电子元件半导体器件.产品功能.我们的电子元件半导体器件是一种高性能的电子元件,主要用于在电子设备中实现信号放大、整流、稳
  • 电子元件传感器
    电子元件传感器
    2024-01-15
    电子元件传感器.产品功能.电子元件传感器是一种具有高精度和快速响应的传感器,可用于检测温度、湿度、压力等多种物理量,并将
  • 数据分析和挖掘软件
    数据分析和挖掘软件
    2023-12-06
    数据分析和挖掘软件.产品功能.我们的数据分析和挖掘软件提供了丰富的功能,能够帮助用户快速有效地实现数据分析和挖掘,包括数