关于海明码,我悟了

article/2025/10/18 18:34:26

目录:

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

话在前面

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

差错控制编码

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

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

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

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

差错控制编码的分类

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

检错码

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

纠错码

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

奇偶校验码

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

奇偶校验码的这种监督关系可以用公式表示。设该组码长度为n,表示为( a n − 1 a_{n-1} an1, a n − 2 a_{n-2} an2, a n − 3 a_{n-3} an3, a 0 a_{0} a0,),其中前n-1位为信息码元,第n位为监督位 a 0 a_0 a0

在偶校验时有: a 0 a_{0} a0 a 1 a_{1} a1⊕······⊕ a n − 1 a_{n-1} an1 = 0
在奇校验时有: a 0 a_{0} a0 a 1 a_{1} a1⊕······⊕ a n − 1 a_{n-1} an1 = 1

海明码

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

校验位的位数

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

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

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

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

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

码字格式

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

码字位置 B 1 B_1 B1 B 2 B_2 B2 B 3 B_3 B3 B 4 B_4 B4 B 5 B_5 B5 B 6 B_6 B6 B 7 B_7 B7
校验位xxx
信息位xxxx
复合码字 P 1 P_1 P1 P 2 P_2 P2 D 1 D_1 D1 P 3 P_3 P3 D 2 D_2 D2 D 3 D_3 D3 D 4 D_4 D4

校验位的位置

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

第n位校检码校检的起始位置为 2 n − 1 2^{n-1} 2n1,并从当前位置开始校验 2 n − 1 2^{n-1} 2n1位,每隔 2 n − 1 2^{n-1} 2n1位在校检 2 n − 1 2^{n-1} 2n1位。

当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、…)位,(包括 P 1 P_1 P1自己)
  • P2负责校验海明码的第2、3、6、7、…(P2、D1、D3、D4、…)位,(包括 P 2 P_2 P2自己)
  • P3负责校验海明码的第4、5、6、7、…(P3、D2、D、D4、…)位,(包括 P 3 P_3 P3自己)
复合码字 P 1 P_1 P1 P 2 P_2 P2 D 1 D_1 D1 P 3 P_3 P3 D 2 D_2 D2 D 3 D_3 D3 D 4 D_4 D4
P 1 P_1 P1校验的位xxxx
P 2 P_2 P2校验的位xxxx
P 3 P_3 P3校验的位xxxx

校验位的校验规则

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

码字位置 B 1 B_1 B1 B 2 B_2 B2 B 3 B_3 B3 B 4 B_4 B4 B 5 B_5 B5 B 6 B_6 B6 B 7 B_7 B7
复合码字 P 1 P_1 P1 P 2 P_2 P2 D 1 D_1 D1 P 3 P_3 P3 D 2 D_2 D2 D 3 D_3 D3 D 4 D_4 D4
校验位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的所有位。

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

码字位置 B 1 B_1 B1 B 2 B_2 B2 B 4 B_4 B4
复合码字 P 1 P_1 P1 P 2 P_2 P2 P 3 P_3 P3
编码的第几位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,进行偶校验,求编码之后的海明编码。

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

  • P 1 P_1 P1 D 1 D_1 D1 D 2 D_2 D2 D 4 D_4 D4 = 0
  • P 2 P_2 P2 D 1 D_1 D1 D 3 D_3 D3 D 4 D_4 D4 = 0
  • P 3 P_3 P3 D 2 D_2 D2 D 3 D_3 D3 D 4 D_4 D4 = 0

根据上述的条件得知( P 1 P_1 P1, P 2 P_2 P2, P 3 P_3 P3) = (0,1,0)

复合码字 P 1 P_1 P1 P 2 P_2 P2 D 1 D_1 D1 P 3 P_3 P3 D 2 D_2 D2 D 3 D_3 D3 D 4 D_4 D4
信息码1011
P 1 P_1 P1校验的位xxxx
P 2 P_2 P2校验的位xxxx
P 3 P_3 P3校验的位xxxx
编码后的海明码 0 \color{red}{0} 0 1 \color{red}{1} 11 0 \color{red}{0} 0011

检错和纠错

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

什么是码距

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

假如四位信息码中,编码范围为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://mp.weixin.qq.com/s/MHtSwUNVQbi4gHaAy0Rzgw
  • https://www.cnblogs.com/godoforange/p/12003676.html
  • https://www.electrically4u.com/hamming-code-with-a-solved-problem/

http://chatgpt.dhexx.cn/article/DX4AMgES.shtml

相关文章

SVPWM原理

SVPWM原理 空间矢量的定义PWM逆变器基本输出电压矢量SVPWM的实现 SVPWM已经是非常成熟且应用范围最为广泛的PWM调制方式之一了,所以本文也只是常规的原理介绍。 空间矢量的定义 交流电动机绕组的电压、电流、磁链等物理量都是随时间变化的,如果考虑到它…

foc学习笔记2——svpwm

foc学习笔记2——svpwm 写在前面:如今网上关于foc的文章和教程很多,但初学者往往会被那些专业且复杂的公式搞晕,不知道自己到底在学什么。本文尽量少列公式,多解释用途,所以不会有公式的推导过程,会更加注重…

二、SVPWM

二、SVPWM 1. 介绍 SVPMW是将逆变器和电机看作一个整体,用八个基本的电压矢量合成期望的电压矢量,建立逆变器功率器件的开关状态,并依据电机磁链和电压关系,实现对电机恒磁通变压变频调速。 三相无刷电机的三项排除三项全部为1和…

SVPWM调制中非零基础矢量的幅值是2/3Udc还是Udc?

1:、三相电压空间矢量的合成 设直流母线侧电压为Udc,逆变器输出的三相相电压为UA、UB、UC、其分别加在空间上互差120的三相静止平面坐标系上,可以定义三个相电压UA(t)、UB(t)、UC(t)、他们的方向始终在各自的轴线上,而大小随着时间按正弦规律…

Matlab SVPWM仿真模型

文中涉及的仿真模型可在公众号 iFTrue未来已来 中获取: 请扫描下方二维码关注微信公众号:iFTrue 未来已来 在公众号后台回复以下关键字获取SVPWM仿真模型:SVPWM模型 「 iFTrue 未来已来 」 目录: 1.1 基于C语言的SIMULINK仿真模…

SVPWM调制的simulink仿真

1、SVPWM的生成 在FOC矢量控制中,Id、Iq 经过PID输出Vd、Vq。Vd、Vq经过反park变换成Vα、Vβ。再Vα、Vβ合成空间参考矢量Uref。那么怎么根据Vα、Vβ确定Uref所在扇区,然后确定所在扇区两个非零基础矢量的作用时间呢。 1.1、传统的计算方法 1.1.1、…

电机专用SVPWM算法实现

SH33F2811包含三相电机的空间矢量脉宽调制(Space Vector Pulse Width Modulation,SVPWM)算法,对应于交流感应电机或永磁同步电机中的三相电压源逆变器的功率器件的一种特殊的开关触发顺序和脉宽大小的组合。这种开关触发顺序和组合…

小猫爪:PMSM之FOC控制04-SVPWM

小猫爪:PMSM之FOC控制04-SVPWM 1 SVPWM的引出2 SVPWM的原理3 SVPWM的推导4 仿真END 1 SVPWM的引出 在Park变换那一节,说到了可以通过控制Eq(Iq)和Ed(Id)来控制电机。而电流我们并不能直接控制,只能简介通过控制输出电压来控制电流&#xff0c…

SVPWM matlab建模

此为SVPWM算法的SIMULINK建模过程,没有具体的公式推导(太多了,难打字) abc为matlab自带的三相正弦波发生器,需要调整参数。 首先进行坐标变换 第一个fcn里的代码 function y fcn(a,b,c) y (2/3)*( a-0.5*b-0.5*c);%…

SVPWM算法的推导

博文默认采用恒幅值变换,若是用到恒功率变换的时候,会特别说明。推导过程其实有很多种,云龙混杂,看着看着自己就晕了,所以最好找一种自己好理解的。有关坐标变换的理论,参考坐标变化这篇博客 1.三相空间电…

svpwm理解

svpwm主要用于逆变器件的开关与导通,使得在电机内部形成圆形磁场。与spwm相比有诸多优点,中小功率的逆变器基本都采用svpwm进行逆变控制。 svpwm目的是在电机内部形成圆形磁场,磁场与电机内部合成电压的关系为正交,即合成电压为磁…

SimpleFOC(八)—— 理论+实践 深度分析SVPWM

目录 说明一、有感FOC控制原理二、SVPWM原理三、SimpleFOC(不带电流采样)的控制原理:四、SimpleFOC核心代码五、代码实验5.1、实验目的5.2、硬件准备5.3、修改代码 第一阶段5.3.1 打开例程5.3.2 修改代码5.3.3 验证上传5.3.4 电机观测5.3.5 修…

matlab查表svpwm,SVPWM的查表生成方式代码

昨天研究了传统的SVPWM生成方法之后 偶然看到了这个东西: 也就是说 SVPWM的占空比-角度的关系可以用分段函数进行表示 这样就简单多了 基本上通过查cos表+判断能避免浮点数运算 下面素程序www 结果输出到3个txt文件中,修改p的值可以算占空比(相电压)或者线电压... /* * SVPW…

svpwm的matlab模型,SVPWM的matlab仿真实现

在仿真之前您必须安装MATLAB7.0或以上版本,必须确保simpowersysm工具箱已被安装,如果以上要求已经达到,那么就可以执行以下步骤了: 步骤1:打开matlab主界面,然后在command window界面中的“>>”旁边输…

SVPWM细节

SVPWM细节 # 原理 通过六个扇区的六个非零矢量进行矢量合成所需电压,但在合成过程中不可避免地会经过零矢量来合成,从而降低开关频率动作次数。 一般过调制的情况下非零矢量作用时间大于载波周期,所以在此过程中只取有效矢量的作用时间之和。…

SVPWM学习

作者寄语:在公众号(浅谈电机控制)中以小文章的形式记录自己学习SVPWM的过程。有时候自学未免出现理解错误的地方,所以烦请学友们批评指正。 如果需要SVPWM模型,关注微信公众号:浅谈电机控制。留下邮箱获取…

单相SVPWM

单相SVPWM逆变技术起源于三相电机调速系统中的三相SVPWM技术,在三相SVPWM调制中由旋转的电压矢量得到旋转的磁场,对电压矢量进行控制从而实现电机调速,其实电压矢量控制的实质是一种逆变过程,故单相SVPWM逐渐被研究并应用于逆变电…

SVPWM

接上一篇文章咱们接着讲讲SVPWM,如果对于PWM和SPWM不是很了解的同学可以看我上一篇文章。电机控制是一门很深得学问,由于时间和精力有限,本文章不会讲解特别深入,在此只是抛砖引玉。 SVPWM原理 SVPWM的全称是空间矢量脉宽调制(Sp…

SVPWM算法理解(一)——基本原理

SVPWM算法理解(一)——基本原理 说明1 SVPWM基本原理1.1 引言1.2 三相电量的空间矢量表示1.3 SPWM与SVPWM比较1.4 问题1:2Udc/3还是Udc? 2 SVPWM算法推导2.1 SVPWM的合成原理2.2 问题2:电压利用率1?2.3 SVP…

SVPWM理论部分

SVPWM理论部分 简述1、基本原理2、SVPWM控制2.1 扇区判断(根据$\alpha\beta$为方便判断扇区而采取的一种方法)2.2 电压空间矢量合成及作用时间2.3 电压空间矢量作用顺序2.3.1 五段式SVPWM2.3.2 七段式SVPWM 总结 简述 SVPWM,即空间矢量调制&…