关于海明码,我悟了

原创 typedef 2023-03-24 08:00

目录:

  • 话在前面
  • 差错控制编码
  • 差错控制编码的分类
    • 检错码
    • 纠错码
  • 奇偶校验码
  • 海明码
    • 校验位的位置
    • 码字格式
    • 校验位的确定
    • 校验位的校验规则(重点)
    • 海明编码示例
  • 检错和纠错
    • 什么是码距
    • 海明码的码距
    • 海明码的检错与纠错能力
    • 海明码的检错与纠错能力理解
  • 总结
  • 考题
  • 最后
  • 参考链接

话在前面

最近又过了一遍海明码,就想着给大家分享分享。在写作的过程中,同时又解决了很多疑惑。真应了教学相长这句话。文章内容较多,建议先收藏,空闲时在观看。

差错控制编码

在数据通讯方面,要求信息传输具有高度的可靠性,即要求误码率足够低。然而实际会有各种干扰对信号造成不良的影响,致使数据在传输过程中出错。

为了满足通讯要求,减少误码出现,一方面要提高硬件的质量,另一方面可以采用差错控制编码。

差错控制编码的基本思想是:在发送端被传送给的信息码序列的基础上,按照一定的规则加入若干"监督码元"后进行传输,这些加入的码元与原来的信息码序列之间存在着某种确定的约束关系。在接收数据时,如果既定的约束关系遭到破坏,则在接收端可以发现传输中的错误,乃至纠正错误。

使用这种方式虽然提高了数据可靠性,但是却增加了信息量的冗余,降低了系统的效率。

差错控制编码的分类

根据码组的分类,可以分为检错码和纠错码两类。

检错码

检错码是指能自动发现差错的码。

纠错码

纠错码是指不仅能发现差错而且能自动纠正错误。

奇偶校验码

这是一种简单的检错码,是在传输数据后附加一位监督位,使该组码连同监督位在内的码组中的"1"的个数为偶数(称为偶校验)或奇数(称为奇校验)。

奇偶校验码的这种监督关系可以用公式表示。设该组码长度为n,表示为(, , , ,),其中前n-1位为信息码元,第n位为监督位

在偶校验时有:⊕······⊕ = 0
在奇校验时有:⊕······⊕ = 1

海明码

海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。

校验位的位数

一般来说,若信息长为n,信息位数为k,则监督位数r=n-k,如果希望用r个监督位构造除r个监督关系式来指示一位错误码的n中可能位置。则要求:

2r - 1 >= n 或者 2r >= k + r + 1

推导并使用信息长度为k位的码字的海明码,所需步骤如下:

  1. 确定最小的校验位数将它们记成、…、,每个校验位符合不同的奇偶测试规定。
  2. 原有信息和 r 个校验位一起编成长为 k+r 位的新码字。选择r校验位(0或1)以 满足必要的奇偶条件。
  3. 对所接收的信息作所需的 r 个奇偶检查。
  4. 如果所有的奇偶检查结果均为正确的,则认为信息无错误。

如果发现有一个或多个错误,则错误的位由这些检查的结果来唯一地确定。

码字格式

从理论上讲,校验位可放在任何位置,但习惯上校验位被安排在1、2、4、8、…的位 置上。当 k=4,r=3 时,信息位和校验位的分布情况如下表所示(其中,为校验位,,…,为信息位)。

码字位置B1B2B3B4B5B6B7
校验位xx
x


信息位

x
xxx
复合码字P1P2D1P3D2D3D4

校验位的位置

r 个校验位是通过对 k+r 位复合码字进行奇偶校验而确定的。校验位置在位置上,例如:1、2、4、8...

第n位校检码校检的起始位置为,并从当前位置开始校验位,每隔位在校检位。

当n=1时,第1位校检码校检的起始位置为1,并从当前位置开始校验1位,每隔1位在校检1位。
当n=2时,第2位校检码校检的起始位置为2,并从当前位置开始校验2位,每隔2位在校检2位。
当n=3时,第3位校检码校检的起始位置为4,并从当前位置开始校验4位,每隔4位在校检4位。

所以有以下结果:

  • P1负责校验海明码的第1、3、5、7、…(P1、D1、D2、D4、…)位,(包括自己)
  • P2负责校验海明码的第2、3、6、7、…(P2、D1、D3、D4、…)位,(包括自己)
  • P3负责校验海明码的第4、5、6、7、…(P3、D2、D、D4、…)位,(包括自己)
复合码字P1P2D1P3D2D3D4
校验的位x
x
x
x
校验的位
xx

xx
校验的位


xxxx

校验位的校验规则

上面说第一位校验位校验1、3、5、7位,但是为什么校验这些位却没有说。包括一些教材也都没有说明缘由。

码字位置B1B2B3B4B5B6B7
复合码字P1P2D1P3D2D3D4
校验位001(1)010(2)
100(4)


  • P1对应的位置为B1,即第001(1)位, 该二进制第一位为1,所以P1监督的是位数为二进制表示的第一位为1的所有位。
  • P2对应的位置为B2,即第010(2)位, 该二进制第二位为1,所以P2监督的是位数为二进制表示的第二位为1的所有位。
  • P3对应的位置为B4,即第100(4)位, 该二进制第三位为1,所以P3监督的是位数为二进制表示的第三位为1的所有位。

我们来看一张表格,就知道是什么意思了。如下图:

码字位置B1B2B4
复合码字P1P2P3
编码的第几位001(1)010(2)100(4)
满足条件的位001(1)
011(3)
101(5)
111(7)
010(2)
011(3)
110(6)
111(7)
100(4)
101(5)
110(6)
111(7)

这就就是P1监控1、3、5、7位的原因。P2、P3同理。这部分才是精髓,一定要理解。

海明编码示例

若有四位信息码:1101,进行偶校验,求编码之后的海明编码。

根据前文提到的校验规则,可以得知,根据校验码的位置:

  • = 0
  • = 0
  • = 0

根据上述的条件得知(,,) = (0,1,0)

复合码字P1P2D1P3D2D3D4
信息码

1
011
校验的位x
x
x
x
校验的位
xx

xx
校验的位


xxxx
编码后的海明码0110011

检错和纠错

在原有的编码系统中插入若干校验位,能够提高系统的码距,从而能够实现检错和纠错的功能。

什么是码距

码距是编码系统中两个编码之间不同的二进制的位数。

假如四位信息码中,编码范围为0000~1111。例如数据1001和数据0000的码距就是2,因为它们的第1和第4位数据不同,所以码距是2。

但是我们通常关心的是编码系统中的最小码距。即最小的那个值。例如四位编码系统中的数据0000和0001,最小码距为1,没有比这个码距更小的值了。

增加码距为何能提高纠错能力?

这里举个极端的例子,假如说我的编码系统中,经过编码之后的数据只会出现数据0000 00001111 1111两种可能。即最小码距为8。

但是我在接收方却收到了数据0000 0001,这个编码明显不在我的编码系统中,数据一定是被干扰了。假设发送数据为0000 0000则最低位被干扰了,可能性较大。假设发送是数据为1111 1111则高七位被干扰了,可能性较小。

由于数据0000 0001最接近0000 0000,从而断定发送方数据为0000 0000,继而达到纠错的功能。检错的功能也类似。

海明码的码距

首先我们说的海明码通常指的是(n,k)=(7,4),即编码长度为7位、信息位为4、校验位为3位的海明码,所以通常叫74海明码。

关于海明码的码距,在网络上搜了大量的资料,也没见到说的比较明白的,果然还是得靠自己啊。

既然最小码距是编码系统中码距的最小值。那我们直接把4位信息码经过海明码编码后的所有可能穷举出来,找到最小值即可,请看下面这张表格。

原始信息码海明码编码
0001000 0111
0010001 1001
0011001 1110
0100010 1010
0101010 1101
0110011 0011
0111011 0100
1000100 1011
1001100 1100
1010101 0010
1011101 0101
1100110 0001
1101110 0110
1110111 1000
1111111 1111

通过观察上面这个表可以得知,经过插入三个校验位,任意两个编码之间不同的二进制位最小值为3,所以74海明码的最小码距为3

海明码的检错和纠错能力

码距和纠错的能力有如下关系:

  • 如果要检测e个错误,最小码距应该满足:D >= e + 1
  • 如果要纠正t个错误,最小码距应满足:D >= 2*t+1
  • 如果要检测e个错误同时纠正t个错误,最小码距应该满足:D >= e + t + 1(e>t)

根据上述公式和海明码的最小码距为3可以得知,海明码能够检测两位错误或者纠正一个错误

海明码检2纠1理解

在接收方,也可根据这3个校验方程对接收到的信息进行,同样的奇偶测试:

  • A=B1⊕B3⊕B5⊕B7
  • B=B2⊕B3⊕B6⊕B7
  • C=B4⊕B5⊕B6⊕B7

假如只有一位数据出错,错误位置就可简单地用二进制数CBA指出。如果CBA=000,则说明没有错。若CBA不等于0,说明有错。假如B5位出错。根据上述校验可得CBA=101,刚好是十进制5。也代表是第五位出现错误。

但是当有两位错误的时候,例如B3和B6同时出错,CBA仍然是等于101。

可以观看下面的图,比较直观。

海明码检错纠错

总结

  • 常说的海明码指的是(n,k)=(7,4)海明码,信息为为4,监督位为3,总长7位
  • 海明码的最小码距为3
  • 海明码能够检两位错或者纠正一位错误
  • 海明码默认采用偶校验

考题

看了这么多,做两题练练手吧,请问下面两句话表述是否正确。

  • [ ] 一个码距为1的编码系统加上奇偶校验位时码距变为2
  • [ ] 一个码距为2的编码系统加上奇偶校验位时码距变为3

参考链接

  • https://www.cnblogs.com/godoforange/p/12003676.html
  • https://www.electrically4u.com/hamming-code-with-a-solved-problem/

END

点赞、转发加关注,一键三连,好运年年

关注公众号后台回复数字688可获取嵌入式相关资料

往期推荐

为什么C语言执行效率高,运行快?

二维数组与二级指针是好兄弟吗?

工作这么久,才明白的SOLID设计原则

C语言中的不完整类型


typedef 主要用于记录个人学习、总结、分享的一个平台。 教学相长,共同进步。同时并建立技术交流群,欢迎加入。期待您的关注。
评论
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 84浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 111浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 119浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 101浏览
  • 《高速PCB设计经验规则应用实践》+PCB绘制学习与验证读书首先看目录,我感兴趣的是这一节;作者在书中列举了一条经典规则,然后进行详细分析,通过公式推导图表列举说明了传统的这一规则是受到电容加工特点影响的,在使用了MLCC陶瓷电容后这一条规则已经不再实用了。图书还列举了高速PCB设计需要的专业工具和仿真软件,当然由于篇幅所限,只是介绍了一点点设计步骤;我最感兴趣的部分还是元件布局的经验规则,在这里列举如下:在这里,演示一下,我根据书本知识进行电机驱动的布局:这也算知行合一吧。对于布局书中有一句:
    wuyu2009 2024-11-30 20:30 122浏览
  • 戴上XR眼镜去“追龙”是种什么体验?2024年11月30日,由上海自然博物馆(上海科技馆分馆)与三湘印象联合出品、三湘印象旗下观印象艺术发展有限公司(下简称“观印象”)承制的《又见恐龙》XR嘉年华在上海自然博物馆重磅开幕。该体验项目将于12月1日正式对公众开放,持续至2025年3月30日。双向奔赴,恐龙IP撞上元宇宙不久前,上海市经济和信息化委员会等部门联合印发了《上海市超高清视听产业发展行动方案》,特别提到“支持博物馆、主题乐园等场所推动超高清视听技术应用,丰富线下文旅消费体验”。作为上海自然
    电子与消费 2024-11-30 22:03 98浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 50浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 120浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 106浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 68浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 100浏览
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 71浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦