海明码的基本原理

海明码

  • 一、什么是海明码
  • 二、校验位的分布方式
    • 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.rhkb.cn/news/409901.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

下载(win10-win11)微软官方ISO镜像方法

下载Win11安装镜像。 官方下载win10地址:下载 Windows 10 官方下载win11地址:Download Windows 11 下载完成后,运行 MediaCreationTool_Win11_23H2.exe 等待完成100%跳转页面后,关闭界面即可。

IDEA工具设置默认使用maven的settings.xml文件

第一步:打开idea工具,选中 File ——> New Projects Setup ——> Settings for New Projects 第二步:先设置下自动构建项目这个选项 第三步:选中 Build Tools ——> Maven,让后就可以设置自己安转的maven和se…

鸿蒙开发5.0【基于CameraKit,通过avrecorder进行录像】

1 场景描述 录像是相机应用的最重要功能之一,录像是循环帧的捕获。本文通过CameraKit自定义相机并通过avrecorder进行录像。 2 效果图 3 自定义相机录像流程图 4 方案描述 4.1 整体描述: 总体可分为:1、相机输入,2、同时输出预览流录像流…

探索全球设计灵感:六大海外设计平台

海外设计网站对于设计师而言,不仅是灵感的源泉,更是专业成长的加速器。这些平台聚集了全球创意人士,提供了一个分享和发现最新设计趋势的环境。设计师可以通过这些网站学习行业内的创新技术,参与设计挑战,提升个人设计…

基于Python的顾客购物数据可视化分析

数据可视化分析实验 数据集简介 本文在实验中考虑到实验使用设备的性能和环境的局限性,采用了kaggle官网上的的消费者购物数据集,数据地址: https://www.kaggle.com/datasets/iamsouravbanerjee/customer-shopping-trends-dataset。 此数据…

Stable Diffusion AI绘画工具的安装与配置(MAC用户)

AI绘画的热潮席卷了整个创意行业,Stable Diffusion作为其中的翘楚,让艺术创作变得前所未有的简单。然而,对于使用Mac电脑用户来说,安装和配置Stable Diffusion可能显得有些棘手。别担心,这份详细的教程将手把手教你如何…

多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱

简介: 多功能秒达开源工具箱源码,,可自部署且完全开源的中文工具箱,永远的自由软件,轻量级运行,全平台支持(包括ARMv8),完全类似 GPT 的支持,与高效的 UI 高…

【Java】—— Java面向对象基础:编程实例(学生信息管理)

目录 场景描述 定义学生类 创建学生对象并处理需求 代码解析 总结 在Java中,面向对象编程(OOP)是一种常用的编程范式,它允许我们创建基于现实世界的模型,通过类和对象来模拟这些模型。今天,我们将通过…

刘海屏的优雅回归?华为Mate 70 Pro定义新美学

在智能手机的发展历程中,华为Mate系列一直是高端旗舰的代表。而今,华为Mate 70 Pro的神秘面纱终于揭开,其回归的刘海屏设计和独特的寰宇舷窗设计,再次将华为的设计理念推向了新的高度。 刘海屏的回归:经典与创新的融合…

后端微服务与分布式系统

编写一篇关于后端微服务和分布式系统的文档,需要详细讨论微服务架构的核心概念、优缺点、关键技术,以及在分布式系统中的应用。以下是文档的大纲和内容概述: 后端微服务与分布式系统 1. 简介 微服务架构是一种将大型应用程序分解为一系列小…

【AI绘画】Midjourney前置/imagine与单图指令详解

文章目录 💯Midjourney前置指令/imagine什么是前置指令?/imaginepromptUpscale(放大)Variations(变化)🔄(重新生成一组图片) 💯单张图片指令Upscale (细节优化)Vary(变体…

COMSOL工业碱性电解槽(3D、双欧拉模型)

本案例通过改写COMSOL官方案例获得,使用了碱性电解槽和欧拉-欧拉(湍流)模型,阳极室和阴极室带有乳突状的结构,模型进行了人为缩小,仅供参考。其中一些参数可参考如下链接文章的说明。COMSOL碱性电解槽参数解…

public继承

三种继承的方法:public 继承/private继承/protected继承详解及区别_public继承-CSDN博客 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被基类的子类所访问。 错误…

关键点检测——HRNet原理详解篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

Windows上安装 nodejs,npm 和 yarn详细教程

1、下载Node.js 访问Node.js 官网下载,下载需要版本版本,具体操作如下 2、安装Node.js 具体安装可参考以下知乎教程 https://www.zhihu.com/question/591831850/answer/3423661990 3、配置淘宝镜像 npm config set registry https://registry.npmmirror…

UWB Tag钥匙防丢器,精准定位测距,一键找回!告别钥匙遗失焦虑

在这个快节奏的时代,我们每天穿梭于家、办公室、商场之间,手中的钥匙串仿佛成了连接生活各个角落的纽带。但你是否也曾有过这样的经历:匆忙间,那串沉甸甸的钥匙似乎在某个不经意的瞬间与你“不辞而别”,留下的是无尽的…

如何将本地jar包导入到maven仓库中

需要将本地的 JAR 包安装到你的本地 Maven 仓库中,可以使用 mvn install:install-file 命令来完成这一步。 1.打开终端或命令行 2.运行以下命令,将 JAR 文件安装到本地 Maven 仓库: mvn install:install-file -Dfilepath/to/your/com.magu…

APP.vue引入子组件进行页面展示

一.将vue项目启动服务器原始页面进行清空 打开APP.vue文件&#xff0c;将<template>标签里的内容和<style>标签里的内容 ctrl/ 选中进行注释&#xff0c;以及引入的Helloworld.vue文件内容代码进行注释 并且 ctrls 保存 服务器页面从原始页面 变为空白 二.在comp…

基于微信小程序的行李寄存管理系统的设计与实现(论文+源码)_kaic

基于微信小程序的行李寄存管理系统的设计与实现(论文源码)_kaic 摘 要 人们外出旅行的时候&#xff0c;经常会需要到行李寄存的服务。行李寄存处在全国各地都很常见。现存的行李寄存方式很传统&#xff0c;适合小规模的行李寄存&#xff0c;当行李数量较多时&#xff0c;就…

ssrf+redis未授权访问漏洞复现

目录 靶场搭建 报错问题解决 组合利用 使用goherus生成payload 靶场搭建 首先我们进入ubutuo拉取靶场 docker run -d -p 8765:80 8023/pikachu-expect:latest 报错问题解决 如果出现docker报错&#xff0c;靶场一直拉取不下来 解决办法&#xff1a;配置镜像加速器 vim /et…