当前位置: 首页 > news >正文

汉明码:从奇偶校验到错误精确定位的传奇编码

汉明码:从奇偶校验到错误精确定位的传奇编码

在数字通信的复杂网络中,信息传输极易受到噪声干扰,导致数据错误。信道编码技术作为保障信息准确传输的关键,显得尤为重要。而汉明码,凭借精准的错误定位(仅限1个bit位出错)功能,在多种场合得到应用。上大学时没好好学,这两天又静下心来看了一遍,感觉发明汉明码的人太牛了,感叹这样的奇思妙想和精妙设计。

奇偶校验:汉明码诞生的启示

奇偶校验是一种基础的错误检测方法,其原理基于码组中“1”的个数的奇偶性。在偶校验,为使整个码组“1”的个数为偶数,如果原始码组中“1”的个数为奇数,则在信息码的最后添加一个监督码“1”,反之则监督码设为“0”。比如,对于信息位1011,“1”的个数为3,为实现偶校验,校验位设为1,最终码组为10111。奇校验则相反,使码组“1”的个数为奇数。

数学表达上,设码组为:
a n − 1 , a n − 2 , ⋯   , a 1 , a 0 a_{n - 1}, a_{n - 2}, \cdots, a_{1},a_{0} an1,an2,,a1a0
校验位为 a 0 a_{0} a0

偶校验时,通过设置 a 0 a_{0} a0,使下面的等式成立:
a n − 1 ⊕ a n − 2 ⊕ ⋯ ⊕ a 0 = 0 a_{n - 1} \oplus a_{n - 2} \oplus \cdots \oplus a_{0} = 0 an1an2a0=0

接收端收到后,做同样的运算,若不为“0”,则判为传输出错

奇校验时,通过合理设置 a 0 a_{0} a0使得下面等式成立:
a n − 1 ⊕ a n − 2 ⊕ ⋯ ⊕ a 0 = 1 a_{n - 1} \oplus a_{n - 2} \oplus \cdots \oplus a_{0} = 1 an1an2a0=1
这里” ⊕ \oplus “表示异或运算。

奇偶校验通过增加1个监督位,能够监测码组传输是否出错,深入分析可以发现如果出错的码元成偶数个,奇偶校验码是无法检测的。

好奇的你可能已经发现,通过增加1个监督码就能检测是否发送出错,那么能不能多增加一些监督码实现错误码元的定位呢,对于二进制码,只要能定位就能进行纠错。

大胆假设,小心求证

线性分组码

上面讨论的奇偶监督码的编码方法利用代数关系式产生监督位。我们将这类编码称为代数码。在代数码中,若监督位和信息位的关系是由线性代数方程式决定的,则称这种编码为线性分组码。换句话说,线性分组码是代数码的一种。它的构造方法较简单、理论较成熟,故应用也较广泛。下面我们介绍线性分组码的一个典型代表,也是今天的主角——汉明码。

汉明码

汉明码是一种能够纠正一个错码位(bit)的线性分组码,由汉明(R.W.Hamming)于1950年提出的。

对于偶数监督码而言,在接收端解码时,实际上就是在计算下式:
S = a n − 1 ⊕ a n − 2 ⊕ ⋯ ⊕ a 0 S = a_{n - 1} \oplus a_{n - 2} \oplus \cdots \oplus a_{0} S=an1an2a0

若计算出的S=0,就认为无错码;若计算出的S=1,就认为有错码。将上面的式子称为监督关系式S称为校正子。由于校正子S是一位二进制数字,它只有两种取值,故只能表示有错和无错,而不能进一步指明错码的位置。
不难推想,若此码组长度增加一位,即有两个监督位,则能增加一个类似于上式的监督关系式。这样,就能得到两个校正子。两个校正子的可能取值有4种组合,即00,01,10,11,故能表示4种不同的信息。若用其中一种组合表示无错码,则还有其他3种组合可以用于指明一个错码的3种不同位置。因此,若有r个监督关系式,则r个校正子可以指明一个错码的 ( 2 r − 1 ) (2^r-1) 2r1个不同位置(其中一个用于指示是否出错)。只有当校正子可以指明的错码位置数目等于或大于码组长度n时,才能够纠正码组中任何一个位置上的错码,即要求:
( 2 r − 1 ) > = n (2^r-1)>= n 2r1>=n

下面通过一个例子来说明如何具体构造监督关系式。假设要求设计一个能够纠正1个错码的分组码 ( n , k ) (n,k) nk,给定的码组中有4个信息位,即k=4。由上式可知,这时要求监督位数 r ≥ 3 r≥3 r3。若取r=3,则 ( 2 3 − 1 ) = 7 (2^3-1)= 7 2

相关文章:

  • 【11408学习记录】英语通知写作速成攻略:框架拆解+宾语从句疑难全破解
  • 21 天 Python 计划:MySQL 库相关操作
  • DB-Mysql中TIMESTAMP与DATETIME的区别
  • 【Flask开发】嘿马文学web完整flask项目第3篇:2.用户认证,2.用户认证【附代码文档】
  • 【STM32单片机】#6 定时器比较输出
  • OceanSim: 基于Isaac Sim GPU 加速水下机器人感知仿真框架
  • 基于SpringBoot酒店管理系统设计和实现(源码+文档+部署讲解)
  • qt socket编程正确重启tcpServer的姿势
  • 同一份数据,Redis为什么要存两次
  • 人脸考勤管理一体化系统(人脸识别系统,签到打卡)
  • WinForm真入门(9)——RichTextBox控件详解
  • 基于大数据的美团外卖数据可视化分析系统
  • 【易飞】易飞批量选择品号处理方法,工作效率提升300%
  • 学透Spring Boot — 018. 优雅支持多种响应格式
  • 多智能体优秀开发框架
  • Java 中的 CompletableFuture:异步编程的强大工具
  • 网络原理 - HTTP/HTTPS
  • HAL 库设置回调成员函数的一种方法
  • 2-vim编辑器的安装和使用
  • 【爬虫】携程旅游项目数据爬取
  • 哈尔滨网站建设哪家有/百度收录在线提交
  • 手机网站建设制作/百度信息流广告怎么收费
  • 微芒网站建设/百度竞价广告
  • 建设企业网站登录901/优化大师怎么样
  • 大连网站建设设计公司哪家好/十大最靠谱培训机构
  • 怎么做美食团购网站/整合营销方案案例