汉明码
好的,我们来详细解释一下汉明码。
核心概念
汉明码是一种用于检测和纠正数据传输或存储过程中发生的单个比特错误的编码方案(纠错码)。它是由理查德·汉明在20世纪50年代提出的,旨在解决早期计算机中继电器不可靠导致的数据错误问题。
核心思想和目标
- 添加冗余(校验位): 在原始数据位中添加额外的比特位。
- 奇偶校验: 利用这些冗余位存储特定数据比特的奇偶性信息(通常是偶校验或奇校验)。
- 精准定位: 精心设计冗余位与数据位之间的关联规则,使得当发生单个比特错误(无论是数据位还是校验位本身)时,能够通过重新计算奇偶性并比较结果,精准地定位到出错比特的位置。
- 纠错: 一旦定位到错误比特,只需将其翻转(0变1或1变0)即可纠正错误。
关键机制和步骤
-
确定校验位数量:
- 设原始数据位数为
k。 - 所需的校验位数为
r,需满足:2^r >= k + r + 1。 - 这个不等式确保
r个校验位产生的2^r种组合(包括全0代表无错)足够表示k个数据位和r个校验位中任何一个位置出错的情况(共至少k + r + 1种情况)。 - 例如:
- 4位数据 (
k=4):2^r >= 4 + r + 1 => 2^r >= 5 + r,r=3满足 (8 >= 7)。 - 8位数据 (
k=8):2^r >= 8 + r + 1 => 2^r >= 9 + r,r=4满足 (16 >= 13)。 - 11位数据 (
k=11):2^r >= 11 + r + 1 => 2^r >= 12 + r,r=4满足 (16 >= 16)。
- 4位数据 (
- 总编码长度
n = k + r。
- 设原始数据位数为
-
放置校验位:
- 校验位放置在码字中位置编号为 2 的幂次方 的地方:1, 2, 4, 8, 16, ...。
- 数据位填充剩余的位置。
- 示例 (7-4 汉明码,
k=4,r=3,n=7):- 位置编号:1, 2, 3, 4, 5, 6, 7
- 校验位位置:P1 (位置1), P2 (位置2), P3 (位置4)
- 数据位位置:D1 (位置3), D2 (位置5), D3 (位置6), D4 (位置7)
- 码字结构:
P1, P2, D1, P3, D2, D3, D4
-
分组与计算校验位(偶校验为例):
- 每个校验位负责一组特定的比特位(包括数据位和其它校验位)。
- 确定分组规则: 位置编号的二进制表示决定了它属于哪个校验组。
- P1 (位置1, 二进制 001): 负责所有位置编号中最低有效位 (LSB) 为 1 的位。即位置 1, 3, 5, 7, ... (1, 3, 5, 7)
- P2 (位置2, 二进制 010): 负责所有位置编号中中间位为 1 的位。即位置 2, 3, 6, 7, ... (2, 3, 6, 7)
- P3 (位置4, 二进制 100): 负责所有位置编号中最高有效位 (MSB) 为 1 的位。即位置 4, 5, 6, 7, ... (4, 5, 6, 7)
- 计算校验位值:
- P1 = (D1) XOR (D2) XOR (D4) // 偶校验:确保位置1,3,5,7的和为偶(即异或结果为0)
- P2 = (D1) XOR (D3) XOR (D4) // 确保位置2,3,6,7的和为偶
- P3 = (D2) XOR (D3) XOR (D4) // 确保位置4,5,6,7的和为偶
-
检错与纠错(接收端/读取端):
- 接收端收到码字后,根据同样的规则重新计算校验位,得到一组新的校验值。
- 将新计算出的校验值与接收到的校验值进行按位异或 (XOR) 操作:
- S1 = P1_received XOR P1_calculated (检查 P1 组)
- S2 = P2_received XOR P2_calculated (检查 P2 组)
- S3 = P3_received XOR P3_calculated (检查 P3 组)
- 将
S3 S2 S1组合成一个二进制数(称为伴随式或校正子)。 - 解释伴随式:
000: 没有检测到错误(也可能存在未检测到的多个错误)。- 非
000(例如XXX): 检测到错误。XXX这个二进制数直接对应错误比特的位置编号!- 例如
S3S2S1 = 101(二进制 5) 表示位置 5 的比特出错。
- 例如
- 纠错: 定位到错误比特的位置后,只需将该比特的值取反(0 变 1 或 1 变 0),即可纠正单个错误。
优点
- 高效: 相对于简单的奇偶校验(只能检错不能纠错,或只能检单错),汉明码用较少的校验位(冗余度低)实现了对单比特错误的纠正。
- 简单: 实现和理解相对简单,基于奇偶校验和二进制位置编码。
局限性
- 只能纠正单比特错误: 这是其设计目标。如果发生两个或更多比特错误,汉明码可能会:
- 错误地“纠正”成一个错误的码字(导致未检测到的错误)。
- 检测到错误但无法纠正(伴随式非零但指向错误的位置)。
- 甚至在极少数情况下漏检(伴随式为0)。
- 不能区分单错和双错: 伴随式本身无法区分到底是发生了一个错误还是两个错误(或其他偶数个错误)。
- 需要额外开销: 需要存储或传输校验位。
增强与应用
- SECDED: 为了检测双比特错误,通常在标准汉明码基础上添加一个额外的奇偶校验位,覆盖整个码字(包括所有数据和原有的校验位)。这种扩展称为 SEC-DED (Single Error Correction, Double Error Detection) 码,广泛应用在要求高可靠性的内存(ECC 内存)和其他存储系统、通信系统中。
- 实际应用场景:
- 计算机内存(ECC RAM)
- 通信信道(如调制解调器早期的标准)
- 磁盘存储控制器
- 任何需要可靠传输或存储二进制数据的场景,特别是在容易受到噪声干扰的环境中。
总结
汉明码是一种巧妙利用奇偶校验和二进制位置编码的纠错码。通过在数据中添加精心计算的校验位,并将校验位与特定的数据位组关联起来,它能够检测并精准定位单个比特错误的位置,从而实现对该错误的自动纠正。它是构建更复杂、更强大纠错码(如 SECDED)的重要基础。
简单记忆要点:位置按2的幂放校验位,每个校验位管一组特定位置(根据位置的二进制位决定),算奇偶,出错时校验结果组合起来直接告诉你哪一位错了。
卫星通信v2 第四章 传输技术(4)
继续讲解! 上堂课给出了例题!让我们一起来看看解题过程。 请注意结论! 下堂课详细讲解汉明码。 汉明码(Hamming Code)是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名
2023-01-11 11:35:07
STM32F0/F1/F2/F3/F4/F7编程数据中英文手册(所有型号中文参考手册)
STM32中文/英文编程手册(所有型号中文参考手册免费获取STM32所有手册ST官方免费的资料不应该共享的吗?怎么还欺负人,明码标价。进入官方,第一个就是。感谢大佬的分享https
资料下载
佚名
2021-12-27 19:02:04
IPUS SQPI PSRAM为STM32单片机提供RAM扩展方案
的一种基于大RAM的系统设计:系统自举是用简单的明码,其它代码是加密后存储在flash中。当系统运行时,Flash中的数据,解密后转存到PSRAM中,程序从PSRAM中运行,当程序(或函数)运行结束时,可以轻易地再次在SPI PSRAM中加密(用于再次使用)以及销毁(一次性使用)。其中密
资料下载
王利祥
2021-12-09 14:51:13
求教大佬构建距离3的汉明码步骤?
比如说11信息位,4位校验位。构建校验规则时表示不明白,该构建几位的信息位校验?然后该怎么排列组合信息位校验,使能校验出一位错误和两位错误?校验信息位的组合是唯一么,有没有其他组合?书上看到最后一个信息位总是出现在每一个组合,为什么?最后图片P4不知道是不是搞错了
汉明码纠错的基本原理及优化解决方案
我们也要看到,这样处理后提高了汉明码对突发干扰差错的纠错能力,却牺牲了对随机干扰纠错能力。因为这样对汉明码重新排序后,原来1个汉明码的各个位分布
2020-09-16 17:52:12
「ALIENTEK 阿波罗 STM32F767 开发板资料连载」第四十六章 NAND FLASH 实验
出错(一般只有 1 个 bit 出错)。ECC 就可以检测这种错误,并修正错误的数据位,因此,ECC 在 NAND FLASH驱动里面,被广泛使用。ECC 有三种常用的算法:汉明码(Hamming Code
实现汉明纠错码的编码和解码方案设计
理解汉明码首先要理解奇偶校验,奇校验就是在一串编码里增加一位校验位使这一串编码里的1的个数位奇数。偶校验同理,使编码里1的个数为偶数。
2020-05-04 09:00:00
【原创】基于FPGA的汉明码编码解码设计
基于FPGA的汉明码编码解码设计实验简述本实验的目的是实现汉明纠错码的编码和解码1.1汉明码简介 汉明码,是在电信领域的一种线性调试码,以发明者
基于FPGA的汉明码译码器如何对码元数据添加噪声干扰?
入门小白求助,我最近在做毕业设计的时候 看到一篇《基于FPGA的汉明码译码器》相关论文,其中学者对该译码器是这样设计的(附图),我想问一下在noise_add模块中是如何向输入数据添加噪声干扰
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机