海明码

作者: 在阳光下睡觉 | 来源:发表于2020-10-30 23:04 被阅读0次

海明码是一种可以纠正一位差错的编码,它是利用校验字段来检测数据中是否包含错误的一种方式。

海明码编码方法

计算校验为个数

校验码个数需要满足公式:

2^K ≥ N + K

其中K为校验码的个数,N为数据的个数
例如需要编码的数据为0011 1001,则需要K需要至少等于4才能满足条件

重排编码位置

根据编码K的大小,将当前编码位放置到2^K的位置上

取数据位为D0, D1, DK.....
取编码位为P0, P1, PK.....

重排前位置为 D7, D6, D5, D4, D3, D2, D1, D0
重排后位置为 D7, D6, D5, D4, P3, D3, D2, D1, P2, D0, P1, P0

计算编码值

对于P0,从P0开始每间隔2^0=1位取1个值进行异或
P0 = D0 ⊕ D1 ⊕ D3 ⊕ D4 ⊕ D6

对于P1,从P1开始每间隔2^1=2位取2个值进行异或
P1 = D0 ⊕ D2 ⊕ D3 ⊕ D5 ⊕ D6

对于P2,从P2开始每间隔2^2=4位取4个值进行异或
P2 = D1 ⊕ D2 ⊕ D3 ⊕ D7

对于P3,从P3开始每间隔2^3=8位取8个值进行异或
P3 = D4 ⊕ D5 ⊕ D6 ⊕ D7

将计算完的P值放入到编码后的对应位置即可得到最终的编码

海明码解码方法

海明码解码跟海明码编码方式刚好相反
下面以0011 0110 1111为例

先获取海明码编码位数的大小

通过 2^K ≥ 12 得出K的大小至少为4,所以海明码编码位数的大小为4

获取编码位置的值

通过PK = 2^K获取具体的编码值
P0 = 1
P2 = 1
P3 = 1
P4 = 0

通过D重新计算P值

计算中可以通过1的个数来快速进行异或,偶数个1为0,奇数个1为1
P0 = D0 ⊕ D1 ⊕ D3 ⊕ D4 ⊕ D6 = 1 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 = 1
P1 = D0 ⊕ D2 ⊕ D3 ⊕ D5 ⊕ D6 = 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 0 = 0
P2 = D1 ⊕ D2 ⊕ D3 ⊕ D7 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0
P3 = D4 ⊕ D5 ⊕ D6 ⊕ D7 = 0 ⊕ 0 ⊕ 1 ⊕ 1 = 0

判断错误位

当P值出现和原始P值不同时,则表明在该位上对应的D出现了错误
其中P0, P3无错误,所以D0, D1, D3, D4, D5, D6, D7无错误
P1, P2 有错误,推出D2错误

相关文章

  • 海明码

    海明码是一种可以纠正一位差错的编码,它是利用校验字段来检测数据中是否包含错误的一种方式。 海明码编码方法 计算校验...

  • 海明码的编码和校验方法

    海明码(也叫汉明码)具有一位纠错能力。本文以1010110这个二进制数为例解释海明码的编码和校验方法。 编码 确定...

  • 超级无敌简单易懂的海明码的校验和纠错原理与实现

    最近和朋友的聊天涉及到了海明码纠错,先来康康海明纠错码到底是什么 海明码 Hamming Code,电信领域的一种...

  • 软考中级软件设计师笔记

    计算机基础 海明码的校验已知数据信息为16位,最少应附加( )位校验位,以实现海明码纠错。公式 2^r-r≥...

  • 海明码编码计算和纠错、CRC校检码计算

    一、海明码检错/纠错基本思想 海明码(Hamming Code)是一个能够有多个校验位。具有检測并纠正一位错误代码...

  • 计算机知识回顾:海明码

    更多分享:http://www.cherylgood.cn 海明码,又名汉明码,是在电信领域的一种线性调试码,以发...

  • 海明码校验说明

    海明码校验: 设数据位是n位。校验位是k位,则满足关系:。下面以1010110讲解校验的步骤: 确定校验位的位置校...

  • 计算机组成原理

    海明码 15 位海明码 4个检验位 之间的关系 第一位是1不是0 存储系统要点 随机存储器(ram) 只读存储器 ...

  • 一文读懂汉明码

    海明码(也叫汉明码)是具有一位纠错能力的编码方式。在软考中经常涉及,教材讲的又太过公式话,下面我边讲解边举例让大家...

  • 海明码 (__builtin_popcount( )使用)

网友评论

      本文标题:海明码

      本文链接:https://www.haomeiwen.com/subject/rxljvktx.html