首页 > 其他分享 >海明码简单介绍

海明码简单介绍

时间:2024-11-13 19:43:00浏览次数:1  
标签:校验位 明码 介绍 出错 简单 D7 D4 S2

简介

海明码是一种既能检错也能纠错的校验码,校验的原理其实用的是多重奇偶校验;

本篇文章只介绍能纠正一位错误的海明码,这种编码又称为SEC(Single-bit Eror Corection)码。

编码过程

这里以一个示例来进行说明编码过程,假设原始数据为:1101000

1、计算校验位的位数

根据公式 k + r ≤ 2r - 1 计算,其中【r】为校验位位数( r 取满足公式的最小值),【k】为原始数据的位数。

因此 1101000 对应的校验位的位数 r = 4,则海明码的位数 n = k + r = 7 + 4 = 11

原始数据用D表示,7位表示为:D7D6D5D4D3D2D1

校验位用 P表示,4位表示为:P4P3P2P1

海明码用 H表示,11位海明码为:H11H10H9H8H7H6H5H4H3H2H1

2、计算校验位的位置

经过上一步计算,虽然知道了校验位的位数,但是怎样将4位校验位和7位数据位组合成11位海明码呢?

在海明码中,校验位通常放置于2的幂次的位置上,也就是Pi放在 2i-1 的位置上,如下:

  • P1 位于第 1 (21-1) 位(H1 所在位置)
  • P2 位于第 2 (22-1) 位(H所在位置)
  • P3 位于第 4 (23-1) 位(H4 所在位置)
  • P4 位于第 8 (24-1) 位(H8 所在位置)

然后将信息位按照从右到左依次将数据填充上去,最后整个海明码的数据表示如下:

H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 P4 D4 D3 D2 P3 D1 P2 P1

3、将信息位进行分组

海明码的本质其实是多组偶校验,也就是每一组的数据进行异或运算,如果结果是0,表明没有错,等于1说明有错。

所以我们需要将7位信息位进行分组,分组规则是通过信息位的位置信息进行分组的,如下:

D1位置(第3位) 0 0 1 1
D2位置(第5位) 0 1 0 1
D3位置(第6位) 0 1 1 0
D4位置(第7位) 0 1 1 1
D5位置(第9位) 1 0 0 1
D6位置(第10位) 1 0 1 0
D7位置(第11位) 1 0 1 1
G4 G3 G2 G1

从右到左依次有4列,取出每列每行值为1的数据位组成一组,共有4组,依次为

  • G1D1D2D4D5D7

  • G2D1D3D4D6D7

  • G3D2D3D4

  • G4D5D6D7

4、计算校验位的值

通过以上步骤,我们将信息位分成了4组数据,校验位的值就等于每组数据异或后的值,

P1 = D1D2D4D5D7 = 0
P2 = D1D3D4D6D7 = 0
P3 = D2D3D4 = 1
P4 = D5D6D7 = 1

5、海明码的校验

每个校验组分别利用校验位和参与该校验位的数据位进行偶校验检查,构成4个校验方程,如下:
S1 = P1D1D2D4D5D7
S2 = P2D1D3D4D6D7
S3 = P3D2D3D4
S4 = P4D5D6D7

以上分组保证了,没有出错的情况下 S1 S2 S3 S4 都应该等于0(偶校验检查,1的数量为偶数)

校验时,如果S1 = 1,S2\S3\S4都等于0,那么可以确定是P1出错了,也就是P1的值由 0 变为 1了

为什么这样确定呢?可以逐一排查,比如:

  • 如果D1 错,那么 S2 应该也等于1,也出错
  • 如果D2 错,那么 S3 应该也等于1,也出错
  • 如果D4 错,那么 S2S3 应该也等于1,也出错
  • 如果D5 错,那么 S4 应该也等于1,也出错
  • 如果D7 错,那么S2S4 应该也等于1,也出错

如果以上表述没有看明白,可以参考下图,更直观一些

6、海明码纠错

现在数据位、校验位的位置都已确定,校验位的值也已计算出来,校验原理也知道了,咱们再说下纠错

H11 H10 H9 H8 H7 H6 H5 H4 H3 H2 H1
D7 D6 D5 P4 D4 D3 D2 P3 D1 P2 P1

例1: 只有S1出错,在上一步知道是P1出错了,也就是H1出错

S1 = 1
S2 = 0
S3 = 0
S4 = 0

例2:只有S2出错呢,和上一步排查错误原理一样,可以确定是P2出错了,也就是H2出错

S1 = 0
S2 = 1
S3 = 0
S4 = 0

例3:只有S3出错呢,确定是D1出错了,也就是H4出错

S1 = 0
S2 = 0
S3 = 1
S4 = 0

通过以上示例,大家应该注意到了,出错的位数其实和S4 S3 S2 S1排列组合成的二进制数是一样的,如下:

例1 排列的值是0001 = 1

例2 排列的值是0010 = 2

例3 排列的值是0100 = 4

咱们再举个例子,比如H11(D7)错了,有可能是1变为0,或者由0变为1,不管哪种情况,肯定导致了D7所在的组的偶检验的结果是1,那么也就是S4、S2、S1为1,

排列的值是:1011 = 11

标签:校验位,明码,介绍,出错,简单,D7,D4,S2
From: https://www.cnblogs.com/baikaishui-liang/p/18544651

相关文章

  • 数据库系列: 主流分库分表中间件介绍(图文总结)
    数据库系列:主流分库分表中间件介绍(图文总结) 相关文章数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据......
  • PTA 7-75 简单宏
    期中考试后我做完了这个学期的pta题目,得意忘形,用pta中的题目打趣老师,没想到老师在下节课上增加了题目。这题对我来说是颇有难度的一道题,完整代码在文章结尾。这道题要求我们识别出输入语句中的宏定义,处理语句中的多余空格并将其中的宏替换。处理语句还有额外要求:语句前的空格......
  • ECMAScript 安全赋值运算符 (?=) 提案介绍及其 Polyfill
    本文介绍最新的ECMAScript安全赋值运算符提案以及相应的替代实现前言我们经常会跟try/catch打交道,但如果你写过Go或者Rust就会发现在这两种语言中是没有try/catch的,那么这些语言怎么进行错误捕获呢Go:Errorhandlingf,err:=os.Open("filename.ext")iferr......
  • 谷歌浏览器的实验性功能介绍
    谷歌浏览器(GoogleChrome)作为全球最受欢迎的网络浏览器之一,以其快速、稳定和丰富的扩展功能而闻名。除了常见的功能外,Chrome还提供了许多实验性功能,这些功能可以通过启用一些隐藏的标志来访问。本文将详细介绍如何启用和使用这些实验性功能,同时也会涉及到一些常见问题的解决方......
  • 【Java Web】JSTL及其核心库介绍 JSTL函数
    文章目录JSTL介绍核心库表达式控制\<c:out>\<c:set>\<c:remove>\<c:catch>流程控制\<c:if>\<c:choose>循环标签\<c:forEach>URL标签\<c:import>\<c:url>\<c:param>\<c:redirect>格式化JSTL函数JSTL介绍JSTL(JavaSer......
  • vue3使用tsParticles实现爆开五彩碎纸屑动效,简单高效免费(撒花特效、粒子效果)
    实现效果:tsParticles|ConfettiPreset|JavaScriptParticles,ConfettiandFireworksanimationsforyourwebsitetsParticles-Easilycreatehighlycustomizableparticles,confettiandfireworksanimationsandusethemasanimatedbackgroundsforyourweb......
  • 如何批量打水印?六个电脑屏幕水印批量设置方法分享!步骤既简单,又快速!
    如何批量打水印?你是否曾经为需要在大量文件或屏幕上添加水印而感到烦恼?电脑屏幕水印,作为版权保护和信息安全的重要手段,重要性不言而喻。然而,手动逐个添加水印不仅耗时费力,还容易出错。那么,有没有一种方法能够批量、快速地为电脑屏幕或文件添加水印呢?答案是肯定的。本文,将......
  • ES6 的20 个新特性的详细介绍(完整版)
    ES6的20个新特性的详细介绍以及相关知识拓展:目录一.块级作用域二.箭头函数三.类(Class)四.模板字符串五.解构赋值六.默认参数七.扩展运算符八.剩余参数九.Promise十.模块化十一.Symbol十二.Iterators十三.Generators十四.Map数据结构十五.Set......
  • 英语中常见引导词的介绍和用法
    这些引导词可以分为几大类:关系代词、关系副词、从属连词等。我们将分别讨论它们的用法和例句。1.关系代词(RelativePronouns)关系代词用于引导定语从句,修饰先行词。常见的关系代词有who,whom,whose,which,that。1.1 who用法:指人,作主语。例句:Themanwhospoketo......
  • 在Active Directory(AD)域控环境下,推送安装软件并实现静默安装,通常有几种方法可以实现。
    在ActiveDirectory(AD)域控环境下,推送安装软件并实现静默安装,通常有几种方法可以实现。根据你的需求,这里介绍几种常见的方式,它们支持EXE、MSI等多种安装包格式,并且可以实现静默安装。1. 组策略(GroupPolicy)部署组策略是AD域环境中部署软件的一种常见方式。它特别适合MSI安装包。......