首页 > 其他分享 >学习笔记 - 汉明码

学习笔记 - 汉明码

时间:2024-12-28 20:07:51浏览次数:5  
标签:奇偶校验 错误 0100 笔记 校验码 学习 1010 汉明码 1000

汉明码属于一种具备纠错功能的线性分组码。

线性分组码,是将信息序列按特定长度分组(设长度为\(k\)),每组信息位会相应生成一组由信息位与监督位共同构成的码字(设长度为\(n\),且\(n > k\)),各码字之间遵循线性关系。汉明码的纠错能力使其能够识别并修正传输、存储环节里出现的错误。

在数据传输时,受外界干扰影响,单个比特可能产生差错。汉明码借助添加的冗余监督位,依照特定规则精准判断出错比特位,进而完成纠正,确保信息恢复如初,宛如给数据披上一层“防护甲”,使其即便处于复杂环境,也能维持精准可靠,在通信、存储等众多领域发挥关键作用。

三重码

所谓“三重码”,恰如其字面含义,即重要之事重复三遍。就数据而言,一旦出现数据损坏状况,便可利用其他相关数据修复受损数据。只要出错数量在1个以内,对应的数据便可成功修复。

原始数据 0 0 0 0 1 1 1 1
发送数据 000 000 000 000 111 111 111 111
接收数据 000 001 010 100 111 110 101 011
还原数据 0 0 0 0 1 1 1 1

不过,要是出错地方超过2个,就无法修复了(尽管这种概率极低):

原始数据 0 0 0 0 1 1 1 1
发送数据 000 000 000 000 111 111 111 111
接收数据 011 101 110 111 100 010 001 000
还原数据 1 1 1 1 0 0 0 0

但数据出错概率很低,使用三重码需传输三次原始数据,致使传输效率下滑。既然如此,也可适当降低纠错频率。

奇偶校验码

奇偶校验码的工作原理是统计一段二进制数里“1”出现的频次。若这段数中“1”的数量为偶数,校验码是“0”;若为奇数,校验码则是“1”。以下是一个8位的简单示例:

原始数据 接收数据 校验码
0100 1010 0100 1010 1
0100 1010 0100 1000 1

在原始数据“0100 1010”中,“1”出现了3次(奇数),所以校验码为“1” 。但在第二个数据里,接收数据“0100 1000”中“1”仅出现2次(偶数),校验码本该是“0”,实际接收的却是“1”,由此可判断该数据有误。

不过,奇偶校验码仅能判断1个以内的错误。因为它仅能体现“1”出现次数的奇偶性,一旦出现2个错误,奇偶校验码就失效了。

依据奇偶校验码特性,还能通过行列定位错误位置。下面是一个16位的例子:

实际数据 校验码
0 1 0 0 1
1 0 1 0 0
0 1 0 0 1
1 0 0 0 1
校验码 0 0 1 0
错误数据 校验码
0 1 0 0 1
1 0 0 0 0
0 1 0 0 1
1 0 0 0 1
校验码 0 0 1 0

如此,能迅速锁定出错位置。但要是出现2个连续的错误,就没办法定位了:

错误数据 校验码
0 1 0 0 1
1 0 0 1 0
0 1 0 0 1
1 0 0 0 1
校验码 0 0 1 0

由于每行校验码均无误,所以难以定位。而且这种方式效率不高,16位数据需8个校验码。于是,查德·卫斯里·汉明发明了——汉明码。

汉明码

有一道知名智力谜题:16杯水中有1杯有毒,怎样用最少的化验次数找出有毒的那杯?

解题思路如下:随机选8杯化验,若有毒,有毒杯子就在这8杯里;若没毒,有毒杯子就在另外8杯之中。接着选4杯化验……如此这般化验4次,直至确定有毒的那一杯。概括来讲,就是错误若不在这一半,那必然在另一半。我们继续用16位数据举例:

原始数据 校验码
0100 1010 0100 1000 0
0100 1010 0100 1000 1
0100 1010 0100 1000 1
0100 1010 0100 1000 0

据此算出“0100 1010 0100 1000”的4位校验码是“0110”。

要是接收数据是“0100 1000 0100 1000”,其校验码是“0000”,与接收的校验码“0110”不匹配,表明接收数据有误。

第1个和第4个校验码无误,说明错误不在这些地方:
0100 1000 0100 1000

第2个和第3个校验码出错,意味着错误同时出现在第2个和第3个校验的位置:
0100 1000 0100 1000

综合上述分析,错误只会在:
0100 1000 0100 1000

所以,正确的数据应为:
0100 1010 0100 1000

然而,这种操作存在一个问题:第1位发生的错误无法检测出来。也就是说,4位校验码能够校验15位数据。此外,还面临一个难题:要是数据没错,但校验码出错,该如何处理?汉明的办法是把校验码与原始数据混合在一起:在11位数据中混入4位校验码。

位置 位置的2进制值 备注
1 0001 留空
2 0010 留空
3 0011 0
4 0100 留空
5 0101 1
6 0110 0
7 0111 0
8 1000 留空
9 1001 1
10 1010 0
11 1011 1
12 1100 0
13 1101 0
14 1110 1
15 1111 0

可以发现,留空位置的二进制值仅有1位是“1”。

计算校验码时,先算出位置二进制值第1位是“1”的奇偶校验码,例如位置“1001”、“1010”,填入第8位;接着算第2位是“1”的奇偶校验码,像位置“0101”、“1110”,填入第4位;再算第3位是“1”的奇偶校验码,如位置“0110”、“1010”,填入第2位;最后算第4位是“1”的奇偶校验码,比如位置“1001”、“1011”,填入第1位。

最终,我们会得到:

位置 位置的2进制值 备注
1 0001 1 留空
2 0010 0 留空
3 0011 0
4 0100 0 留空
5 0101 1
6 0110 0
7 0111 0
8 1000 1 留空
9 1001 1
10 1010 0
11 1011 1
12 1100 0
13 1101 0
14 1110 1
15 1111 0

要是第5位出错,第1位和第4位校验码会出错。从排列方式可知,要是数据出错,必然导致2个及以上校验码出错,因为数据位置的二进制值不止有1个“1”。若仅有1个校验码出错,那只能是校验码自身有问题。按上述方式,汉明码可纠正1位错误。那出现2位错误呢?可以设置第0位数来表示后面15位数的奇偶校验码:
0100 0100 1101 0010

当后面数据出现1位错误时,第0位能察觉;出现2位错误时,第0位察觉不出,但校验码能发现;如此,汉明码便拥有了纠正1位错误、察觉2位错误的能力。出现2位错误时,虽无法纠正,但能让对方重发消息来纠错。

要是出现三个错误呢?汉明码就检测不出来了。

标签:奇偶校验,错误,0100,笔记,校验码,学习,1010,汉明码,1000
From: https://www.cnblogs.com/autext/p/18637885/hamming_code

相关文章

  • 2024-2025-1 20241407《计算机基础与程序设计》第十四周学习总结
    作业信息这个作业属于哪个课程2024-2025-1计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第十四周作业这个作业的目标学习二进制文件和文本文件,文件的打开和关闭,顺序读写与随机读写,标准输入和输出及其重定向作业正文本博客教材学......
  • GraphMAE2(解码增强型掩码自监督图学习器)
    GraphMAE2:ADecoding-EnhancedMaskedSelf-SupervisedGraphLearner解码增强型掩码自监督图学习器背景​ 近年来,自监督学习(Self-supervisedLearning,SSL)得到了广泛的探索,特别是生成式自监督学习在自然语言处理以及其他人工智能领域已经取得了新兴的成功,像BERT和GPT就......
  • 《商业分析方法论与实践指南》---从零开始学习
    前言1.什么是真正的商业分析:答:懂业务、懂数据、懂方法论2.学习完整本书,应该收获什么?答:构成商业分析知识体系+形成商业分析全景图第一章:什么是商业分析1.1商业分析思维1.2如何培养出商业分析的思维注重逻辑:把大问题肢解成若干小问题,形成结构化、框架化、分支化,解决问......
  • 如意小仙女前端学习第N+3天——事件冒泡
    为什么要阻止冒泡?怎么解决?很简单的一个例子,盒子one中有一个盒子two,盒子two中有一个button上面绑着事件a,而这个相同事件恰巧在盒子one和two中也有,当button事件被触发时,one和two中的事件也会被触发,所以我们需要进行阻止。<!DOCTYPEhtml><html><head><metacharse......
  • 【笔记】在虚拟机中通过apache2给一个主机上配置多个web服务器
    (配置出来的web服务器又叫虚拟主机……)下载apache2sudoaptupdatesudoaptinstallapache2(一)ip相同web端口不同的web服务器进入/var/www/html创建站点一和站点二的目录文件(目录文件名自定义哈)sudomkdirweb1web2并进入其中分别创建一个index.htmlps:/var/w......
  • 解锁风电运维新密码:深度学习神经网络助力设备寿命精准预估
    摘要:当下,风电产业蓬勃发展,可恶劣运行环境使设备故障频发,精准预估剩余寿命迫在眉睫。深度学习中的神经网络为此带来曙光,其基础源于对大数据处理需求的回应,借由神经元、层架构自动提取特征。在风电应用里,CNN、LSTM深挖多源异构数据特征,MLP等架构构建预测模型,配合优化算法训......
  • RSS-2024 | 具身智能体也爱看片!NaVid:视觉语言导航智能体通过视频学习导航动作规划
    作者:JiazhaoZhang,KunyuWang,XiaomengFang,RongtaoXu,QiWu,GengzeZhou,ZhizhengZhang,YicongHong,HeWang,单位:中国科学技术大学计算机科学与工程学院,北京人工智能研究院,CASIA,阿德莱德大学,澳大利亚国立大学,Galbot原文链接:NaVid:Video-basedVLMPlans......
  • 十二月阅读笔记(代码大全)
    一、提升编码能力的关键—精简与优化《代码大全2》是一本关于编写高质量代码的经典之作,其中关于如何精简和优化代码的内容给我留下了深刻的印象。作者史蒂夫·麦克康奈尔在书中提出,编写清晰、简洁的代码不仅能提高代码的可读性和可维护性,也能有效减少后期的修改成本。这一理念改......
  • 8086汇编(16位汇编)学习笔记08.函数
    https://bpsend.net/thread-138-1-2.html 函数结构函数结构的演变函数的结构并不是随随便便就出来的而是解决了很多问题之后,大家统一认为那个结构是最好的一种方式例如:模拟函数实现2个数相加不用函数实现两个数相加;这是栈段stacksegmentstackdb512dup(0)stack......
  • Python的秘密基地--[章节8] Python 数据科学与机器学习
    第8章:Python数据科学与机器学习随着大数据和人工智能的飞速发展,Python已成为数据科学和机器学习领域的首选编程语言。本章将深入探讨Python在数据科学和机器学习中的核心工具和技术,包括数据处理、可视化以及机器学习模型的构建。8.1数据科学简介8.1.1什么是数据科......