海明码的基本原理

2024-08-27 07:36
文章标签 基本原理 明码

本文主要是介绍海明码的基本原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

海明码

  • 一、什么是海明码
  • 二、校验位的分布方式
    • 1、奇偶校验
    • 2、海明码校验位
  • 三、检错原理
  • 四、纠错原理

一、什么是海明码

首先来看一下百度的介绍:

‌‌海明码(‌Hamming Code)‌是一种具有检错和纠错能力的编码方式,由‌理查德·汉明(Richard Hamming)于1950年提出。它通过增加少数几个校验位,能够检测出两位同时出错的情况,也能检测出一位出错并自动恢复其正确值,这种自动纠错的能力是海明码的主要特点之一。海明码不仅具有检测错误的能力,还能指出错误的具体位置,从而为进一步的自动纠错提供了依据。‌

  简单来说,如果海明码的一位或者两位数据位发生了错误,我们一定可以通过海明码的特性判断出来,如果是多位数据发生了错误,我们可能可以判断出来,如果只有一位发生错误,我们还可以定位出来具体的数据位。

在这里插入图片描述

二、校验位的分布方式

1、奇偶校验

  在了解海明码之前,我们先简单了解奇偶校验,例如一个二进制数据:
在这里插入图片描述

  思考一下,如果现在需要添加一个校验位,那么这个校验位应该填1还是填0呢?
  如果是奇校验的话,我们需要保证所有数据位和校验位的值加起来是一个奇数。
  如果是偶校验的话,我们需要保证所有数据位和校验位的值加起来是一个偶数。

在这里插入图片描述

2、海明码校验位

  为什么要介绍奇偶校验?因为海明码校验位的确定就是根据奇偶校验来的,对于校验位,我们可以全部用奇校验来确定,也可以全部使用偶校验来确定,但是不可以混合使用,当你学完本文以后,再回来理解这句话就很清晰了。如果没有特别说明,那么海明码默认使用的就是偶校验,这是一个约定俗成的规定,我们只有知道海明码使用的是哪个校验方式才可以对数据进行检错和纠错。

  还是用10001这个数据作为例子,下面将使用偶校验设计海明码,先看海明码的两个性质:
  (1)校验位均在在2k上,例如1,2,4,8,16,32,64,128。

在这里插入图片描述

  如果是数据是1000,那么8号数据位也是没有意义的,故只需要2位数据位,这样就不难理解,为什么有2k>k+m这个公式了,k是校验位的个数,m是数据位的个数。

  (2)如果使用1、2、3、4…给海明码的码位标号,把号码转成二进制,那么第n位的二进制位是1的组合将满足偶校验,这个看文字不好理解,看下图就懂了。

在这里插入图片描述

在这里插入图片描述

三、检错原理

  海明码的检错原理很简单,就是按照分组验证每一组是都否符合偶校验,符合那就可能没出错,不符合那就一定出错了。如果是一位或者两位出错了,那么一定可以被检测出来,这点可以自行验证,如果验证出来了,说明你已经彻底掌握海明码了!

  下面通过例子理解一下一位出错的情况,例如10001的海明码011000011变成了011000111,再次查看各组的偶校验情况,发现含有7号元素的组都不符合偶校验了。

在这里插入图片描述

四、纠错原理

  不难可以推论出分组的规律,1、2、4、8、16、32、64、128、256…分别代表第一组、第二组、第三组、第四组、第五组、第六组…等等,其实就是二进制的每一位代表一组,可以简单的通过编号就可以看出一个数属于哪几个组的了。

在这里插入图片描述

  那么加入只有一个码位发生了错误,它所在所有的组都将不符合偶校验,例如3号出错,1、2组不符合偶校验,9号出错,1、4组不符合偶校验。

  现在我们反过来推论,假如在只有一个码位发生了错误的前提下,某一个码位所在的所有分组都不符合偶校验,那么这个码位就是出错的码位了。

  当然啊,这是在只有一个码位发生了错误的前提下才成立的,多个码位发生了错误的话是没办法纠错的,并且,有极小的概率,多个码位发生错误时,通过海明码无法校验出来,因为无法排除发生错误后各组的偶校验仍然成立的情况。

至此,海明码的基础原理与应用就学完喽

加油呀!兄弟们!!!

感谢观看,点个赞支持一下吧!

这篇关于海明码的基本原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111035

相关文章

防盗链的基本原理与实现

我的实现防盗链的做法,也是参考该位前辈的文章。基本原理就是就是一句话:通过判断request请求头的refer是否来源于本站。(当然请求头是来自于客户端的,是可伪造的,暂不在本文讨论范围内)。首先我们去了解下什么是HTTP Referer。简言之,HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

Zookeeper基本原理

1.什么是Zookeeper?         Zookeeper是一个开源的分布式协调服务器框架,由Apache软件基金会开发,专为分布式系统设计。它主要用于在分布式环境中管理和协调多个节点之间的配置信息、状态数据和元数据。         Zookeeper采用了观察者模式的设计理念,其核心职责是存储和管理集群中共享的数据,并为各个节点提供一致的数据视图。在Zookeeper中,客户端(如

Filter基本原理和使用

https://www.cnblogs.com/xdp-gacl/p/3948353.html 一、Filter简介   Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控

转载:从小白鼠试毒问题-海明码

问题提出: 有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出哪瓶水有毒? 问题分析: 需要多少只小白鼠?这个很容易想到是10只(二进制),但是如何鉴别哪一瓶水有毒?(即如何安排小白鼠?)原贴如下:https://blog.csdn.net/mengtnt/article/details/8477747 海明码计算: 转载

golang学习笔记02——gin框架及基本原理

目录 1.前言2.必要的知识3.路由注册流程3.1 核心数据结构3.2 执行流程3.3 创建并初始化gin.Engine3.4 注册middleware3.5 注册路由及处理函数(1)拼接完整的路径参数(2)组合处理函数链(3)注册完成路径及处理函数链到路由树 3.6 服务端口监听 4. 请求处理5. 请求绑定和响应渲染5.1. 请求绑定5.2 响应渲染 结束语 1.前言 g

DDS基本原理--FPGA学习笔记

DDS信号发生器原理: `timescale 1ns / 1ps//// Company: // Engineer: // // Create Date: 2024/09/04 15:20:30// Design Name: hilary// Module Name: DDS_Module//module DDS_Module(Clk,Reset_n,Fword,

小琳Python课堂:Python高并发实现的基本原理(高阶版)

大家好,这里是小琳Python课堂! 今天,我们将从高阶视角深入探讨Python高并发实现的基本原理,特别是线程安全性、线程同步和原子性这三个核心概念。这些概念对于构建复杂、高效的多线程应用程序至关重要。 线程安全性 首先,让我们深入理解线程安全性。线程安全性涉及到在多线程环境中对共享资源的正确访问。在Python中,由于全局解释器锁(GIL)的存在,真正的并行执行需要通过多进程实现。然而,即

Google的MapReduce和Hadoop的MapReduce基本原理

Google的MapReduce和Hadoop的MapReduce基本原理 MapReduce框架的执行过程可以概述为以下几个关键步骤: 输入分割:用户程序中的MapReduce库首先将输入文件分割成M个片段,每个片段通常大小在16MB到64MB之间,用户可以通过可选参数控制。 启动作业:程序在集群的多台机器上启动多个副本,其中一个机器作为master,其余作为worker。 任务分配