海明码校验【简单详细】

article/2025/10/31 20:24:15

海明码

1.什么是海明码:

一个名叫Richard Hanming老爷爷在1950年提出的检验纠错方法,它具有一位纠错能力。

2.海明码的计算方法:

设欲检测的二进制代码为n位,K为检测位(提供纠错),总共n+k位代码

当中检测位满足的关系: 2 k 2^{k} 2k>=(n+k+1) ===此关系也是求不同代码长度n所需要检测位的位数k

1.海明码的编码规则

k个检验位为Pk,Pk-1...P1,

n个数据位为Dn-1,Dn-2,....D1,D0对应的海明码为Hn+k,Hn+k+1,....H1

那么检验位与海明码的位置对应关系:

(1)Pi在海明码的第 2 i − 1 2^{i-1} 2i1位置,比如P2, 2 2 − 1 2^{2-1} 221则海明码的位置为 H 2 H_{_2} H2

(2)注意:海明码的任何一位都是由若干个校验位来校验的

其中的对应关系:

被校验的海明码下标等于所有参与检验该位检验位下标之和

校验位由自己本身校验

Eg: H 12 H_{12} H12,他的下标为12,对应的是8+4(上面的公式求解,要对应二进制)也就是海明码的第8和第4检验位

实际应用举例:

对于8位的数据位,进行海明码校验需要4个校验位( 2 k 2^k 2k>=n+k+1, 2 4 2^4 24>=8+4+1)

令数据位为: D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 D 3 D_3 D3 D 2 D_2 D2 D 1 D_1 D1 D 0 D_0 D0

​ 校验位为: P 4 P_4 P4 P 3 P_3 P3 P 2 P_2 P2 P 1 P_1 P1 P 4 P_4 P4

​ 形成的海明码: H 12 H_{12} H12 H 12 H_{12} H12 H 11 H_{11} H11 H 10 H_{10} H10 H 1 H_{1} H1

具体过程:

(1)确定DP在海明码中的位置

H 12 H_{12} H12 H 11 H_{11} H11 H 10 H_{10} H10 H 9 H_{9} H9 H 8 H_{8} H8 H 7 H_{7} H7 H 6 H_{6} H6 H 5 H_{5} H5 H 4 H_{4} H4 H 3 H_{3} H3 H 2 H_{2} H2 H 1 H_{1} H1
D 7 D_7 D7 D 6 D_6 D6 D 5 D_5 D5 D 4 D_4 D4 P 4 P_{4} P4 D 3 D_{3} D3 D 2 D_{2} D2 D 1 D_{1} D1 P 3 P_{3} P3 D 0 D_{0} D0 P 2 P_{2} P2 P 1 P_{1} P1

注意:当中的 H 8 H_{8} H8, H 3 H_{3} H3

(2)计算检验位

第一个检验位 P 1 P_{1} P1是位于 H 1 H_{1} H1的位置,他检验的位置为 H 1 H_{1} H1, H 3 H_{3} H3, H 5 H_{5} H5, H 7 H_{7} H7, H 9 H_{9} H9, H 11 H_{11} H11 就是读一位,隔一位

第二个检验位 P 2 P_{2} P2是位于 H 2 H_{2} H2的位置,他检验的位置为 H 2 H_{2} H2, H 3 H_{3} H3, H 6 H_{6} H6, H 7 H_{7} H7, H 10 H_{10} H10, H 11 H_{11} H11 就是读二位,隔2位

第三个检验位 P 3 P_{3} P3是位于 H 4 H_{4} H4的位置,他检验的位置为 H 4 H_{4} H4, H 5 H_{5} H5, H 6 H_{6} H6, H 7 H_{7} H7, H 9 H_{9} H9, H 12 H_{12} H12 就是读四位,隔四位

第四个检验位 P 4 P_{4} P4是位于 H 8 H_{8} H8的位置,他检验的位置为 H 8 H_{8} H8, H 9 H_{9} H9, H 10 H_{10} H10, H 11 H_{11} H11, H 12 H_{12} H12 就是读8位,隔8位

以此类推,

​ 第n位的校验位的海明位是:从自身开始, 2 n − 1 2^{n-1} 2n1位,隔 2 n − 1 2^{n-1} 2n1…直到结束

(3)对校验位对应的数据进行异或运算

一般默认为偶校验,可以求出每个校验位负责检测的海明位—采用奇校验,将各校验位的偶校验值取反即可

$$
&P1=D0⊕D1⊕D3⊕D4⊕D6 \
&P2=D0⊕D2⊕D3⊕D5⊕D6 \
&P3=D1⊕D2⊕D3⊕D7 \
&P4=D4⊕D5⊕D6⊕D7 \

$$

(4)校验错误

对使用海明码的数据进行校验差错检测很简单,根据上面的方法,我们可以很轻易得知每个校验位负责检测的海明位,只要对其进行异或运算即可。

$$

&G4=P4⊕D4⊕D5⊕D6⊕D7\
&G3=P3=D1⊕D2⊕D3⊕D7 \
&G2=D2⊕D2⊕D3⊕D5⊕D6 \
&G1=D1⊕D1⊕D3⊕D4⊕D6 \end
$$

(5)判定

1.正常情况:

若采用偶校验,则G4G3G2G1全为0是表示数据没有错误

​ 奇校验应全为1,否则即出现了错误。

2.错误情况

当发生错误时,将G4G3G2G1的值转化为十进制即可知道发生错误的位置

​ 如G4G3G2G1=0110,即表示H6这个位置的数据发生了错误,只要将其取反即可纠正。

完结

参考链接:海明码(汉明码)详解
在这里插入图片描述


http://chatgpt.dhexx.cn/article/Yygj5unP.shtml

相关文章

一文看懂海明校验码及其计算方法(详细总结)

网上看了好几篇文章后终于算是捋明白了,但是看到的这些资源要么说得云里雾里,要么干脆说得有问题(然后还被点了好多赞。。。),无论如何这些都容易误导小白。作为C站多年老潜水员,我还是把海明校验码的要点总…

ResNets

ResNets 背景: 非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。 《转载更改》 https://blog.csdn.net/qq_29893385/article/details/81207203 ResNets是由残差块(Residual block)构建的 首先解释一下什么是…

正确定位混淆后Crash代码行数

Android--定位混淆后Crash代码行数 一、需求背景二、前期准备三、对混淆日志进行还原四、示例 一、需求背景 打包时需要对代码进行混淆,目的是增加安全性,防⽌反编译。但这会导致App崩溃时,抓到的日志堆栈中显示的代码行数对应不上&#xff…

repalce

1、replace基本用法 <script>/*要求将字符串中所有的a全部用A代替*/var str "javascript is great script language!";//只会将第一个匹配到的a替换成Aconsole.log(str.replace("a", "A")); // > jAvascript is great script language…

Android studio 4.2新特性及升级异常

Android studio 版本及特性系列目录 Android 12 终于来了&#xff0c;你准备好了吗&#xff1f;Android studio 4.2新特性Android studio 4.1新特性Android Studio 4.0新特性及升级异常Android Studio3.6. 插件搜索不到终极解决方案 Android studio 4.2新特性 前言升级异常Gra…

强化学习的学习之路(五十一)2021-02-20 Retrace

作为一个新手&#xff0c;写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程&#xff0c;希望对大家能有所帮助。这个系列后面会不断更新&#xff0c;希望自己在2021年能保证平均每日一更的更新速度&#xff0c;主要是介绍强化学习的基础知识&#xff…

RecId

我记得好像AX最初版本RecId是所有表都唯一的。但是这样有一个坏处就是限制了数据库可存储的数据的条数。D365FO中RecId 不再全局唯一&#xff0c;但是表唯一。 每个表都有一个Sequences生成表的RecId,格式是&#xff1a;SEQ_TableId 右键Sequences可以看下当前RecId的值&#…

ResNet过程

#ResNet 因为网络传播的层次太深&#xff0c;后面的很难传播到前面&#xff0c;所以增加了一个短接层&#xff0c;深层次网络可以退化成一个浅层次网络 #filter_num 卷积核数量 #stride 步长 class BasicBlock(layers.Layer):def __init__(self,filter_num,stride1):super(Bas…

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志 &#xff08;1&#xff09;如果Android Studio里面没有安装下列插件之一的&#xff0c;在Settings的Plugins里面安装其中一个&#xff1a; &#xff08;2&#xff09;菜单栏中的code里面找到反混…

android还原代码混淆proguard日志的工具--retrace和SmartRetrace

介绍 代码混淆时android反编译的常用方法&#xff0c;android SDK提供了Proguard工具&#xff0c;路径是 ANDROID_SDK_HOME/tools/proguard 命令行在ANDROID_SDK_HOME/tools/proguard/bin下&#xff0c;而实际的执行代码路径为ANDROID_SDK_HOME/tools/proguard/lib apk经过混…

with recursive用法

with recursive 则是一个递归的查询子句&#xff0c;他会把查询出来的结果再次代入到查询子句中继续查询。 with recursive d(n, fact) as ( values (1,2) union all #合并 select n1, (n1)*fact from d where n < 5) SELECT * from d;递归过程如下&#xff1a; n1 fact2 n…

python实验之绘制南丁格尔玫瑰图

一、实验目的 了解玫瑰图的前世今生&#xff1b;了解 matplotlib 标准库中的 pyplot 模块&#xff1b;了解在极坐标 系中绘制柱状图。 二、实验基本原理及步骤&#xff08;或方案设计及理论计算&#xff09; 实验步骤&#xff1a; 查阅文档&#xff0c;了解南丁格尔玫瑰图的原…

南丁格尔玫瑰图 | 集才华和美貌于一身的数据图表

南丁格尔玫瑰图将柱图转化为更美观的饼图形式&#xff0c;是极坐标化的柱图&#xff0c;其夸大了数据之间差异的视觉效果&#xff0c;适合展示数据原本差异小的数据。 1、玫瑰图的前世今生 长得像饼图又不是饼图&#xff0c;这种有着极坐标的统计图有着一个美丽的名字—南丁格…

雷达图+南丁格尔玫瑰图

具体实现的效果图&#xff1a; 使用的图表插件是echarts,具体的完整代码如下&#xff1a; import * as echarts from echarts;var chartDom document.getElementById(main); var myChart echarts.init(chartDom); var option;var arr [{ name: 1楼, value: 30 },{ name: 2楼…

Echarts南丁格尔玫瑰图、锥形柱状图、渐变曲线图

目录 1、南丁格尔玫瑰图 2、锥形柱状图 3、渐变曲线图 4、曲线图 1、南丁格尔玫瑰图 option {title: {text: 作物占比,left: 50, // 组件离容器左侧的距离top: 20},legend: {top: 52%,x: center,y: top,width: 180,height: 60,itemGap: 30,itemWidth: 15,itemHeight: 1…

Python数据可视化之南丁格尔玫瑰图(亲测)

文章目录 1. 什么是南丁格尔玫瑰图2. 南丁格尔玫瑰图的绘制 1. 什么是南丁格尔玫瑰图 央视新闻用来展示疫情0增长天数的图就是南丁格尔玫瑰图。 南丁格尔玫瑰图&#xff08;Nightingale rose diagram&#xff09;又名鸡冠花图、极坐标区域图。统计学家和医学改革家佛罗伦斯‧…

【R语言 南丁格尔玫瑰图绘制】

继续上一篇地理信息可视化讲起&#xff0c;为了能够更加直观的展示数据分布情况&#xff0c;发现之前人民日报客户端曾经做过一张关于疫情分布的玫瑰图&#xff0c;非常惊艳&#xff0c;故尝试用当前爬取的数据进行绘制。 绘图前数据整理 现存数据中不少地区病例已经清零&…

南丁格尔玫瑰图解析

一&#xff1a;先安装软件&#xff0c;任意一个都可以 PyCharm安装教程 https://www.cnblogs.com/du-hong/p/10244304.html Anaconda安装教程 https://blog.csdn.net/ITLearnHall/article/details/81708148 二&#xff1a;相关软件以及Python库的知识讲解&#xff1a; Py…

Echarts南丁格尔图.

项目场景&#xff1a; 通过Echarts修改南丁格尔图js文件&#xff0c;修改轮盘颜色。使项目更加美观 文本标签自定义 问题描述 不知道为什么自定义函数使饼图图形上的文本标签label标签显示在内部且&#xff0c;获得对应标签的数据。使用自定义函数formatter的参数是ar&#…

Python+Matplotlib绘制饼状图模拟南丁格尔玫瑰图

开学第一课&#xff1a;一定不要这样问老师Python问题 董付国老师Python系列教材推荐与选用参考 版权声明&#xff1a;由于公众号后台规则问题&#xff0c;本文暂时无法设置原创标记&#xff0c;但仍属原创内容&#xff0c;微信公众号“Python小屋”坚持只发原创技术文章。 推…