海明校验码

简介: 海明校验码

二进制数据在 传送、存取等环节,可能会发生 误码(1变成0或0变成1). 如何发现并纠正 误码? 解决此类问题的思路是在原始数据(数码位)基础上增加几位校验位。常使用的检验码有三种. 分别是 奇偶校验码、海明校验码和循环冗余校验码(CRC)

其中 奇偶校验码 只能查是否有错误而无法纠错,且要求只能有一位出现错误。

为了能找到发生错误的位置,而有了 海明校验码


实际上本质来说, 海明码是升级款的奇偶校验码,其采用了一种非常巧妙的方式,把这串数字(即要传输的内容)分了组,通过分组校验来确定哪一位出现了错误

类似KMP算法,描述起来很麻烦,实际上使用起来却很简单

"海明"也被译为"汉明"

微信截图_20230925222349.png

实例


数据位为8的数据 D7D6D5D4D3D2D1D0=01101001D_7D_6D_5D_4D_3D_2D_1D_0=01101001D7D6D5D4D3D2D1D0=01101001,求海明码


1.计算校验位的个数


设数据位为n位,校验位P为k位,则n和k必须满足以下关系:

微信截图_20230925222739.png

微信截图_20230925223016.png

2.计算校验位的位置


2.1 海明码的总位数


设校验位为P,数据位为D,海明码为H,则海明码H的位数为数据的位数校验码的位数相加,

在此即为 8+4 = 12 位

微信截图_20230925223553.png

2.2 校验码的位置


校验位P 在海明码的第 2i−12^{i-1}2i1 位,即 Hj=Pi,j=2i−1H_j = P_i,j=2^{i-1}Hj=Pij=2i1,i从1开始计数。

无论是海明码、校验位还是数据位,均从右向左排列,即从低位向高位排列。

可先填入校验码的位置,再将数据位依次从低位到高位填入


如此例,i即为 1,2,3,4, 故有:

微信截图_20230925223604.png

3.确定每个数据位 都由哪些校验码进行校验

微信截图_20230925223703.png

数据位D的下标,等于其校验位的下标之和

微信截图_20230925223717.png

4.计算校验码的值


校验码的值 为有参与校验的数据依次从低到高异或的值。

(异或:相同为0,相异为1)

微信截图_20230925223801.png

5.错误校验

微信截图_20230925223836.png

海明码是一种纠错码,其方法是为需要校验的数据位增加若干校验位,使得校验位的值决定于某些被校位的数据,当被校数据出错时,可根据校验位的值的变化找到出错位,从而纠正错误。对于32位的数据,至少需要增加(  )个校验位才能构成海明码。

以10位数据为例,其海明码表示为 D(0≤i≤9)表示数据位,P (1 ≤j≤4)表示校验位,数据位D由(  )进行校验。

微信截图_20230925223947.png

微信截图_20230925223958.png

目录
相关文章
|
前端开发 Java Linux
cp: can‘t stat ‘/usr/share/zoneinfo/Asia/Shanghai‘: No such file or directory
cp: can‘t stat ‘/usr/share/zoneinfo/Asia/Shanghai‘: No such file or directory
|
12月前
|
安全 Java 开发者
Java 中的向上转型与向下转型
本文深入探讨了Java中的向上转型与向下转型概念。向上转型(Upcasting)指将子类对象赋值给父类引用,过程安全且无需显式转换,常用于多态场景。向下转型(Downcasting)则是将父类引用转为子类类型,需显式转换并注意安全性,通常借助`instanceof`避免`ClassCastException`。文章通过实例解析两种转型的特点、使用场景及注意事项,帮助开发者灵活运用以提升代码质量与可扩展性。
406 2
|
监控 Oracle Java
JVM工作原理与实战(一):初识JVM
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。同时,JVM还具备动态优化功能,可以根据实际运行情况进行调整和优化。本文主要介绍了JVM的概念、JVM的三大核心功能、常见的JVM虚拟机等内容。
921 4
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
476 0
|
SQL 数据挖掘 数据库
SQL 子查询深度剖析来袭!嵌套查询竟有如此无限可能,带你轻松玩转复杂数据检索与操作!
【8月更文挑战第31天】在 SQL 中,子查询是一种强大的工具,允许在一个查询内嵌套另一个查询,从而实现复杂的数据检索和操作。子查询分为标量子查询、列子查询和行子查询,可用于 SELECT、FROM、WHERE 和 HAVING 子句中。例如,查找年龄大于平均年龄的学生或每个课程中成绩最高的学生。子查询具有灵活性、可重用性和潜在的性能优化优势,但需注意性能问题、可读性和数据库支持。合理使用子查询能够显著提升查询效率和代码维护性。
454 1
|
网络协议 大数据 网络架构
桥接模式和NET模式的区别
桥接模式和NET模式的区别
975 0
|
移动开发 前端开发 HTML5
分享62个Html后端模板,总有一款适合您
分享62个Html后端模板,总有一款适合您
431 4
|
Web App开发 缓存 JavaScript
Chrome浏览器清除页面js文件缓存的方法
Chrome浏览器清除页面js文件缓存 Chrome浏览器清除js缓存方法虽然简单,但有些人还是不太会,有些人会去设置里面清除有时候没有用,这里写一下简单步骤,使用一次以后就会了,而且...
5947 0
在 Win 11 中添加小鹤双拼
在 Win 11 中添加小鹤双拼
935 0
|
移动开发 JavaScript 前端开发
学习vue3使用在线官方开发环境play.vuejs.org进行测试
学习vue3使用在线官方开发环境play.vuejs.org进行测试
385 1