【软考】校验码之海明码

目录

          • 1. 说明
          • 2. 编码规则
          • 3. 编码过程
          • 4. 举个例子
          • 5. 检测错误

1. 说明
  • 1.海明码(Hamming Code)是由贝尔实验室的 Richard Hamming 设计的,是一种利用奇偶性检错纠错的校验方法。
  • 2.海明码的构成方法是在数据位之间的特定位置上插入k个校验位,通过扩大码距来实现检错和纠错。
  • 3.设数据位是n位,校验位是k位,则n和必须满足以下关系:2k-1≥n+k,减一是因为1个校验信息用来指出错误。
2. 编码规则
  • 1.设4个校验位P4P3P2P1,8个数据位D7D6D5D4D3D2D1D0,则对应的海明码为H12H11H10H9H8H7H6H5H4H3H2H1
  • 2.P1在海明码的第20位置上,P2在海明码的第21位置上,P3在海明码的第22位置上,P4在海明码的第23位置上,即Hj=Pi,j=2i-1
  • 3.数据位则依序从低到高占据海明码中剩下的位置。
  • 4.海明码中的任何一位都是由若干个校验位来校验的。
  • 5.被校验的海明码位的下标等于所有参与校验该位的校验位的下标之和。
  • 6.校验位由自身校验。
3. 编码过程
  • 1.例如8位的数据位,进行海明校验需要4个校验位,因为24-1=15>(8+4),减1是因为留一个数判断整体是否有错误。
  • 2.假如数据位为D7D6D5D4D3D2D1D0,校验位为P4P3P2P1,形成的海明码为H12H11H10H9H8H7H6H5H4H3H2H1
  • 3.按照8,4,2,1位放校验位,即H8H4H2H1放校验位P4P3P2P1,得到序列为:D7D6D5D4 P4 D3 D2 D1 P3 D0 P2 P1
  • 4.数据位 D7 的位置为12,分解为8+4,即数据位D7由校验位 P4 P3 校验。
  • 5.数据位 D6 的位置为11,分解为8+2+1,即数据位D6由校验位 P4 P2 P1 校验。
  • 6.数据位 D5 的位置为10,分解为8+2,即数据位D5由校验位 P4 P2 校验。
  • 7.数据位 D4 的位置为9,分解为8+1,即数据位D4由校验位 P4 P1 校验。
  • 8.数据位 D3 的位置为7,分解为4+2+1,即数据位D3由校验位 P3 P2 P1 校验。
  • 9.数据位 D2 的位置为6,分解为4+2,即数据位D2由校验位 P3 P2 校验。
  • 10.数据位 D1 的位置为5,分解为4+1,即数据位D1由校验位 P3 P1 校验。
  • 11.数据位 D0 的位置为3,分解为2+1,即数据位D0由校验位 P2 P1 校验。
  • 12.校验位 P4 的位置为8,即校验位P4由校验位 P4 校验。
  • 13.校验位 P3 的位置为4,即校验位P3由校验位 P3 校验。
  • 14.校验位 P2 的位置为2,即校验位P2由校验位 P2 校验。
  • 15.校验位 P1 的位置为1,即校验位P1由校验位 P1 校验。
  • 16.P1校验P1、D0、D1、D3、D4、D6,使得P1=D0⊕D1⊕D3⊕D4⊕D6
  • 17.⊕表示异或,同为假,异为真,即1⊕0=1,1⊕1=0,0⊕0=0。
  • 18.P2校验P2、D0、D2、D3、D5、D6,使得P2=D0⊕D2⊕D3⊕D5⊕D6
  • 19.P3校验P3、D1、D2、D3、D7,使得P3=D1⊕D2⊕D3⊕D7
  • 20.P4校验P4、D4、D5、D6、D7,使得P4=D4⊕D5⊕D6⊕D7
4. 举个例子
  • 1.数据为0 1 1 0 1 0 0 1,试采用4个校验位求其偶校验方式的海明码。
  • 2.数据位从D7D6D5D4D3D2D1D0依次为0 1 1 0 1 0 0 1。
  • 3.校验位P1=D0⊕D1⊕D3⊕D4⊕D6=1⊕0⊕1⊕0⊕1=1。
  • 4.校验位P2=D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕1⊕1⊕1=0。
  • 5.校验位P3=D1⊕D2⊕D3⊕D7=0⊕0⊕1⊕0=1。
  • 6.校验位P4=D4⊕D5⊕D6⊕D7=0⊕1⊕1⊕0=0。
  • 7.即偶校验方式海明码H12H11H10H9H8H7H6H5H4H3H2H1 D7D6D5D4 P4 D3 D2 D1 P3 D0 P2 P1
    即:0 1 1 0 0 1 0 0 1 1 0 1。
5. 检测错误
  • 1.G1=P1⊕D0⊕D1⊕D3⊕D4⊕D6
  • 2.G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6
  • 3.G3=P3⊕D1⊕D2⊕D3⊕D7
  • 4.G4=P4⊕D4⊕D5⊕D6⊕D7
  • 5.若采用偶校验,则G4G3G2G1全为0时表示接收到的数据无错误。
  • 5.若采用奇校验,则G4G3G2G1全为1时表示接收到的数据无错误。
  • 6.若采用偶校验,当G4G3G2G1不全为0时说明发生了差错,G4G3G2G1的十进制值指出了发生错误的位置,例如G4G3G2G1=1010,十进制为8+2=10,说明H10即D5出错了,将其取反即可纠正错误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/883172.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go容器化微服务系统实战

1-1 本课的go微服务有什么不同? 聚焦于容器化可观测的购物微服务系统实战,通过介绍Go语言的应用趋势、容器化优势及微服务适用性,旨在解决学习微服务过程中遇到的难点。课程内容涵盖微服务整体架构、技术工具框架及容器平台等关键技术&#…

Java之路--瓦解逻辑控制与方法使用已是瓮中捉鳖

嗨嗨大家!今天我们来学习逻辑运算和方法的使用~ 目录 一 逻辑控制 1 分支结构 1.1 if语句 1.2 switch 语句 2 循环结构 2.1 while 循环 2.2 for 循环 2.3 do while 循环 2.4 break 2.5 continue 3. 输出输入 二、方法的使用 1 方法定义语法 2 实参和…

苹果macOS 15.0 Sequoia正式版发布:iPhone应用镜像玩、手机消息电脑知

9月17日苹果向 Mac 电脑用户推送了 macOS 15 更新(内部版本号:24A335),除了引入数个 iOS 18 的新功能外,macOS 15 Sequoia 还带来了全新的 Continuity 功能 ——iPhone 镜像。 iPhone 镜像功能可以让用户直接在 Mac 上…

[Linux] Linux操作系统 进程的状态

标题:[Linux] Linux操作系统 进程的状态 个人主页:水墨不写bug (图片来源于网络) 目录 一、前置概念的理解 1.并行和并发 2.时间片 3.进程间具有独立性 4.等待的本质 正文开始: 在校的时候,你一定学过《…

图解Transformer就这30页PPT,你们真不看啊

图解Transformer就这30页PPT,你们真不看啊 主要介绍了Seq2Seq模型,慢慢引出了transformer的整体模型架构,比较具体的介绍了编码器部分的数据处理过程,包括了位置编码、多头注意力机制、残差连接、Layer Norm以及前馈网络等基本结…

支付宝沙箱环境 支付

一 什么是沙箱: 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境 支付宝正式和沙箱环境的区别 : AI: 从沙箱到正式环境: 当应用程序开发完成后,需要将应用程序从沙箱环境迁移到正式环境。 这通常涉及…

如何查看线程

1、首先找到我们的电脑安装jdk的位置,这里给大家展示一下博主本人的电脑jdk路径下的jconsole位置。 2、 ok,那么找到这个jconsole程序我们直接双击打开就可以查看我们电脑的本地进程: jconsole 这里能够罗列出你系统上的 java 进程&#xff0…

古代经典名方目录数据库-支持经典名方检索!

"古代经典名方目录"是指一系列历史上流传下来的,被认为具有一定疗效的中药方剂的汇总。这些方剂多来源于历代医学典籍,经过长期临床实践的检验,部分已被收录于官方的目录之中,以便于现代医疗实践中的参考和应用。 目前…

手机在网状态查询接口如何用C#进行调用?

一、什么是手机在网状态查询接口? 手机在网状态查询接口是利用实时数据来对手机号码在运营商网络中的状态进行查询的工具,包括正常使用状态、停机状态、不在网状态、预销户状态等。 二、手机在网状态查询适用哪些场景? 例如:商…

设计模式-结构型-11-代理模式

文章目录 1. 基本介绍2. 静态代理2.1 基本介绍UML 类图 2.2 应用实例定义接口目标对象代理对象调用代理 2.3 静态代理优缺点 3. 动态代理3.1 基本介绍3.2 JDK 中生成代理对象的 API参数说明UML类图 3.3 应用实例定义接口目标对象代理工厂调用代理 4. Cglib 代理4.1 基本介绍4.2…

求一个数的因子数(c语言)

1.计算并输出给定整数n的所有因子(不包括1与n自身)之和。规定n的值不大于1000。(因子是能整除n的数 即n%i0) // 例如,在主函数中从键盘给n输入的值为856,则输出为: sum763。 2.第一步我们先输入n的数&…

Koa (下一代web框架) 【Node.js进阶】

koa (中文网) 是基于 Node.js 平台的下一代 web 开发框架,致力于成为应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石; 利用 async 函数 丢弃回调函数,并增强错误处理,koa 没有任何预置的中间件,可快速…

mysql安装教程(新手版)

本教程不需要手动设置配置文件,比较简单,适合新手,过程需联网。 1.找到mysql官网 mysql官网 一.mysql的安装 1.界面如下图,点击箭头所指。 2.选择mysql版本,系统,安装。 3.下载完成后双击打开&#xff0…

golang操作mysql利器-gorm

1、傻瓜示例 GORM通过将数据库表中的数据映射到面向对象的模型中,简化了数据库操作,使得开发者可以很方便的使用代码来操作数据库,而无需编写SQL语句。 目前有个mysql表:miniprogram_orders,其存储了所有用户对应的订…

Android SystemUI组件(07)锁屏KeyguardViewMediator分析

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节的思维导图,主要关注左侧上方锁屏分析部分即可。 为了更好理解本文的内容,优先说明下SystemUI中与Ke…

CoreDNS实现跨集群service解析实践

CoreDNS实现跨集群service解析实践 背景介绍使用条件实现方案 CoreDNS是一款使用Go语言实现的专为云原生应用而生的DNS服务器。本文介绍CoreDNS在特定实际场景下的一种进阶使用实践,也许能为其他也在使用CoreDNS做服务发现的同学提供一些启发和思考。 背景介绍 在…

luceda ipkiss教程 76:设计光栅耦合器

案例分享:设计光栅耦合器 全部代码如下: from si_fab import all as pdk from ipkiss3 import all as i3 import numpy as npclass grating_coupler(i3.PCell):"""SOI grating coupler."""_name_prefix "grating_c…

mysql 05 InnoDB数据页结构

01.数据页结构的快速浏览 02.记录在页中的存储 在页的7个组成部分中,我们自己存储的记录会按照我们指定的 行格式 存储到 User Records 部分。但是在一开始生成页的时候,其实并没有 User Records 这个部分,每当我们插入一条记录&#xff0c…

单词记忆的化境:用思想的流水去淹没坚硬的石块

其实,鹅卵石通常都是很硬的。但是河底的石子,几乎大多都成了鹅卵石,它们被流水淹没,日复一日、夜以继日的冲刷着,没有了棱角。 在单词的记忆过程中,我们有太多的人,都有着不堪回首的往事&#x…

面试系列-携程暑期实习一面

Java 基础 1、Java 中有哪些常见的数据结构? 图片来源于:JavaGuide Java集合框架图 Java 中常见的数据结构包含了 List、Set、Map、Queue,在回答的时候,只要把经常使用的数据结构给说出来即可,不需要全部记住 如下&…