汉明校验·简明教程

汉明校验

一、简介

汉明码是由 Richard Hanming 于 1950 年提出的,它具有一位纠错能力。

新增的汉明码校验位数应满足如下关系: 2 k ⩾ n + k + 1 2^{k}\geqslant n+k+1 2kn+k+1,其中k为校验位位数,n位数据位数。

二、汉明码生成

  1. 确定校验位的个数与汉明码位数

    使用公式【 2 k ⩾ n + k + 1 2^{k}\geqslant n+k+1 2kn+k+1】计算需要的k,其中 k 是检验位的数量,n 是数据位的数量;

    举个逆子:原欲发送数据为:0101,此时我们可得n=4,则欲使 2 k ≥ 4 + k + 1 2^k\geq4+k+1 2k4+k+1,k最小为3,即校验位个数为3;则未来将要生成的汉明码位数为原数据4位+3位校验位共7位。

  2. 安置校验位

    我们规定:所有的校验位均放置在第 2 n 2^n 2n位,也就是第1、2、4、8…位置等都是校验位,n从0开始,到k-1结束。

    上例中k=3,则校验位的位置为:① 2 0 = 1 2^0=1 20=1;② 2 1 = 2 2^1=2 21=2;③ 2 2 2^2 22=4;即3位校验位放在最后要发送数据的第1,第2,第4个位置。

  3. 填充数据位:

    在非校验位的其他位置上填写真正的数据,填充后汉明码应如如下形式才对:

    c 1 c_1 c1 c 2 c_2 c20 c 3 c_3 c3101

    其中 c 1 c_1 c1 c 2 c_2 c2 c 3 c_3 c3为待确定值的校验位。

  4. 画表计算校验位的值

在这里插入图片描述

我们的原则是,位置代表的二进制写好后,每一行值为一的二进制位分为一组;然后,你会发现,每一行校验位的位置是互斥的,只有一个为1。

基于这样的发现,我们让汉明码那一行的未知数放在等式左边,其他已知的数值位放在等式右边进行异或(两个二进制位异或,相同结果为0,不同为1)运算,即可得到对应的校验位的值,如下计算所示:
C 1 = 0 ⊕ 1 ⊕ 1 = 0 C 2 = 0 ⊕ 0 ⊕ 1 = 1 C 3 = 1 ⊕ 0 ⊕ 1 = 0 C_1=0\oplus1\oplus1=0\\ C_2=0\oplus0\oplus1=1\\ C_3=1\oplus0\oplus1=0 C1=011=0C2=001=1C3=101=0

  1. 书写完整的汉明码

    如第四步所计算,结合原来的位置,将校验位的值填充进行,写出完整的汉明码,上例的汉明码为

    0100101

三、汉明码校验

假设我们收到了0110101,已知这是一个传输出错的汉明码

  1. 提取校验位

    0110101总位数为1,则易推得校验位为3位;再根据校验位的插入规则,我们可得到三位校验码分别在第1,2,4位,则可得校验码为010

  2. 校验

    我们按照生成校验码时的规则,将原来的分组的各组与其对应的校验码进行异或运算,若为0则表示该位没出错,否则表示出错。

    上述汉明码,我们进行如下计算:
    p 1 = 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1 p 2 = 1 ⊕ 1 ⊕ 0 ⊕ 1 = 1 p 3 = 0 ⊕ 1 ⊕ 0 ⊕ 1 = 0 p1=0\oplus1\oplus1\oplus1=1\\ p2=1\oplus1\oplus0\oplus1=1\\ p3=0\oplus1\oplus0\oplus1=0 p1=0111=1p2=1101=1p3=0101=0
    欸,汉明码只能纠错1位,那到底是哪一位出错了呢?其实呀,这里并不能只管看出来,但是汉明码的神奇之处就在于,校验后的k位数值的二进制逆序组合转化为十进制表示的数值就是出错的位置。

    如上例,计算完得到 p 1 p 2 p 3 p_1p_2p_3 p1p2p3=110,我们逆序得到 p 3 p 2 p 1 p_3p_2p_1 p3p2p1=011,其十进制表示3,那么就是第三位出错了,瞅瞅是不是😁

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

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

相关文章

Python学习从0到1 day18 Python可视化基础综合案例 3.动态柱状图

夜色难免黑凉,前行必有曙光。 —— 24.3.25 目录: 01.基础柱状图 02.基础时间线柱状图 03.GDP动态柱状图绘制 一、基础柱状图构建 掌握构建一个基础的柱状图并能够反转x和y轴 1.通过Bar功能构建基础柱状图 基础柱状图的开发 # 导包 Bar包,生…

吴恩达2022机器学习专项课程(一) 第一周课程实验:成本函数(Lab_04)

问题预览 1.实验目的是什么? 2.一元线性回归的一元是什么意思? 3.如何实现一元线性回归的成本函数? 4.b确定,w和成本函数走势的关系是? 5.w,b和等高线图的关系是? 6.什么情况下,可以…

linux查看本机开放哪些端口,以及某个端口是否开放

一、查看Linux系统上已经打开的端口 netstat -tuln二、查看某个端口是否开放 以3306端口为例: 1、nestat sudo netstat -tuln | grep 3306这条命令将列出当前正在运行的网络服务,并筛选出端口号为3306的服务。如果3306端口处于开放状态,则…

反相器的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,输入与输出电平相反3.2,增益小于13.3,输入阻抗高,输出阻抗低4,工艺流程4.1,硅晶圆准备4.2,电路设计4.3,光刻图形定义4.4,离子注入4.5,沉积4.6

javaWeb个人日记(博客)管理系统

一、简介 在快节奏的生活中,记录生活点滴、感悟和思考是一种重要的方式。基于此,我设计了一个基于JavaWeb的个人日记本系统,旨在帮助用户轻松记录并管理自己的日记。该系统包括登录、首页、日记列表、写日记、日记分类管理和个人中心等功能&…

动态多态的注意事项

大家好: 衷心希望各位点赞。 您的问题请留在评论区,我会及时回答。 多态的基本概念 多态是C面向对象三大特性之一(多态、继承、封装) 多态分为两类: 静态多态:函数重载和运算符重载属于静态多态&#x…

深入了解 Linux 中的 MTD 设备:/dev/mtd* 与 /dev/mtdblock*

目录 前言一、什么是MTD子系统?二、 /dev/mtd* 设备文件用途注意事项 三、/dev/mtdblock* 设备文件用途注意事项 三、这两种设备文件的关系四、关norflash的一些小知识 前言 在嵌入式Linux系统的世界里,非易失性存储技术扮演着至关重要的角色。MTD&#…

Spring Aop 源码解析(下)

ProxyFactory选择cglib或jdk动态代理原理 ProxyFactory在生成代理对象之前需要决定到底是使用JDK动态代理还是CGLIB技术: config就是ProxyFactory对象,把自己传进来了,因为ProxyFactory继承了很多类,其中一个父类就是ProxyConfig // config就是ProxyFactory对象// 是不是…

开发npm上传发布

第一步:注册npm账号 首先去官网注册一个npm账号,npm官网 第二步:创建项目 新建文件夹,并执行npm init 填写对应的信息name就是插件名称。 文件夹下就会生成一个package.json文件。 你可以在项目编辑你的插件。 第三步&…

第十二届蓝桥杯物联网试题(省赛)

思路: 这个考了一个RTC的配置,RTC我只配过一次,所以有些生疏,还是不能大意,一些偏僻的考点还是要多练,在获取RTC时间的时候也遇到一些bug,这个后续会用一篇博客将最近遇到的BUG都总结一下 主要的难点还是…

wordpress将图片默认连接到媒体文件

wordpress上传图片后,图片链接可以选择链接到媒体文件或附件页面。如果选择链接到媒体文件,就是链接到了图片的地址了。如果选择链接到附件页面,就是链接到图片所在的attachment页面了。 具体链接到哪里,在wordpress模板制作时&a…

基于GA优化的CNN-LSTM-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络(CNN)在时间序列中的应用 4.2 长短时记忆网络(LSTM)处理序列依赖关系 4.3 注意力机制(Attention) 5…

Android15功能和 API 概览

Android 15 面向开发者引入了一些出色的新功能和 API。以下部分总结了这些功能,以帮助您开始使用相关 API。 如需查看新增、修改和移除的 API 的详细列表,请参阅 API 差异报告。如需详细了解新的 API,请访问 Android API 参考文档&#xff0…

FastAPI+React全栈开发03 为什么使用MongoDB

Chapter01 Web Development and the FARM Stack 03 Why use MongoDB FastAPIReact全栈开发03 为什么使用MongoDB In the following paragraphs, we will go through the main features of our selected database system - MongoDB - and give a high-level overview of the …

VSCode基本配置(编辑器)

VSCode基本配置 设置快捷键:Ctrl , 下载中文插件:Chinese,重启一下,如果没有,Ctrl Shift P,搜索:Display Language 主题推荐:Solarized Dark,快捷键:Ct…

速盾:cdn加速效果好吗

CDN(Content Delivery Network)是一种通过分布在全球多个节点的服务器来加速网络内容传输的技术。CDN加速效果好不好,需要从几个方面来考量。 首先,CDN可以显著提高网站的加载速度。由于CDN服务器分布在全球各地,用户…

C++零基础入门学习视频课程

教程介绍 本专题主要讲解C基础入门学习,所以不会涉及很深入的语法和机制。但会让你整体多面的了解和学习C的核心内容,快速学习使用C,我们的目标是先宏观整体把握,在深入各个击破! 学习地址 链接:https:/…

多线程合并练习题,线程安全(售票任务引入)--学习JavaEE的day30

day30 练习(day29) 注意代码注释,里面涉及代码实现遇到问题及解决方案,由于理解方便没有单独出来 1.计算任务 1.计算任务,一个包含了2万个整数的数组,分拆了多个线程来进行并行计算,最后汇总出…

计算机视觉的研究方向

随着科技的快速发展,计算机视觉已成为人工智能领域的一颗璀璨明星。从识别照片中的人物,到自动驾驶汽车的视觉系统,再到医学诊断的辅助工具,计算机视觉正以前所未有的方式改变着我们的生活。在这篇文章中,我们将探讨计…

uniapp先显示提示消息再返回上一页

一、描述 在有些业务场景中,需要先弹出提示后,再返回上一页。 二、思路 使用定时器,先弹出提示消息,然后开个定时器俩秒后再执行,返回上一页的操作,并且清除定时器。 三、实现 uni.showToast({title: …