汉明校验码

首先放个图,为汉明码中信息位N与校验位K的位数关系:
2^(K-1)>=N+K+1

码距:一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数叫这两个码字的码距,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。

以汉明校验码中的偶校验为例,若汉明码最高位号为m,最低位号为1,即有Hm、Hm-1、Hm-2···H2、H1。

一、
编码规则为:
⑴每个校验位Pi在汉明码中被分到位号2^(i-1)的位置上,其余各位为信息位。

⑵汉明码的每一位Hi有多个校验位校验,其关系式是被校验的每一位位号等于校验它的各校验位的位号之和

⑶在增大码距时,应使所有编码的码距尽量均匀的增大,以保证对所有代码的检测能力平衡的提高。

二、
校验规则为:
⑴当S5~S1为00000时,表明无错。

⑵当S5~S1中仅有一位不为0时,表明是某一校验位出错或者是3位汉明码同时出错。由于3位同时出错的情况很少,故通常认为是某一位出错,出错位是该Si对应的Pi位。

⑶当S5~S1中有2位不为0时,表明是两位汉明码同时出错,此时只能发现错误,但无法确定出错位置。

⑷当S5~S1中有3位不为0时,表明1位信息位出错或3位汉明码同时出错,由于3位同时出错的情况很少,故通常认为是某一位信息位出错。出错位的位号由S5~ S1 的4位代码值指明,此时不仅能检查出一位错,而且能够准确的定位,因而可以纠正这个错误(该位取反)。

⑸当S5~S1中有4位或5位不为0时,表明出错情况严重,系统工作可能出现故障,应当检查系统硬件的正确性。



按照以上原则,我们来看一道例题:设有一个8位信息为1010 1100,试求汉明编码的生成和校验过程。

1.编码生成:由信息位与校验位的关系2^(K-1)>=N+K+1得,K=5,即有5位校验位。将校验位关系列出,校验过哪些信息位就列出,按偶校验有:

P1=D1⊕D2⊕D4⊕D5⊕D7=1
P2=D1⊕D3⊕D4⊕D6⊕D7=1
P3=D2⊕D3⊕D4⊕D8=1
P4=D5⊕D6⊕D7⊕D8=0

在上述4个公式中,不同信息位出现在Pi项中的次数是不一样的,其中D4和D7出现了3次,而D1、D2、D3、D5、D6、D8仅出现两次。此时,不同公式中的码距不同,,因此需要再补充一项校验公式,使得各信息位被校验的次数相等:P5=D1⊕D2⊕D3⊕D5⊕D6⊕D8=1 。

则其二进制表示的汉明码为1101 0011 0101 1

2.校验
假设上述汉明码经传送后,H11(D7)位发生了错误,原码字就变为 1111 0011 0101 1

检错只需要将接收到的码字重新进行偶校验即可。

检错关系式为:
S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7=1
S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7=1
S3=P3⊕D2⊕D3⊕D4⊕D8=0
S4=P4⊕D5⊕D6⊕D7⊕D8=1
S5=P5⊕D1⊕D2⊕D3⊕D5⊕D6⊕D8=0

从S5向上,将校验结果列出得01011,即误字为01011,转化为十进制即为H11位出错。H11位为1,取反变为0即为正确信息。

纠正后的汉明码为 1101 0011 0101 1

原文地址:https://blog.51cto.com/14671287/2480262

时间: 2024-11-03 22:16:53

汉明校验码的相关文章

Hamming校验码

可参考:http://winda.blog.51cto.com/55153/1068000 Hamming校验码作用:用于校验通信数据,防止出现错误,并具有一定的纠错功能. 汉明码在传输的消息流中插入验证码,当计算机存储或移动数据时,可能会产生数据位错误,以侦测并更正单一比特错误.由于汉明编码简单,它们被广泛应用于内存(RAM). 1,获取最小校验码位数:对于有n个信息位的信息,需要k个校验位,满足:2^k-1>=n+k;使k最小即可得出n个信息位所需最小的校验码数: 2,确定校验码所在位置:共

Redis源码中的CRC校验码(crc16、crc64)原理浅析

在阅读Redis源码的时候,看到了两个文件:crc16.c.crc64.c.下面我抛砖引玉,简析一下原理. CRC即循环冗余校验码,是信息系统中一种常见的检错码.大学课程中的"计算机网络"."计算机组成"等课程中都有提及.我们可能都了解它的数学原理,在试卷上手工计算一个CRC校验码,并不是难事.但是计算机不是人,现实世界中的数学原理需要转化为计算机算法才能实现目的.实际上作为计算机专业背景人并不会经常使用或接触到CRC的计算机算法实现的原理,通常是电子学科背景的人士

海明校验码

原博地址:http://blog.csdn.net/yudandan10/article/details/11878421  计算机组成中的海明校验码,相信学过的都会有了解,那么对其中校验位的确定,我想似乎有些人不是很明白,今天我来详细的把如何确定校验位分享一下 首先看下基本的概念  : 2^r≥k+r+1 其中r为校验位 ,k为信息位  信息位是已知的,那么如何确定校验位呢,用一个例子来说明 例如:二进制码1011  求它的海明编码 步骤如下: 1.首先确定信息位,也就是1011了,那么随之K

身份证号生成,校验码计算

二代身份证号有18位,组成是: 6位地区码+8位出生年月日+3位顺序码+1位校验码 其中,校验码计算如下图,本范例按照红色计算方向走 第一步骤就是映射权重:第二步骤是求积:第三步骤相加求余:最后一个步骤就是查找码表得出最后1位字符 红色方向数字更小,计算更快. import randomimport time   # 地区区域码,此范例只列出3位areas = ('610622', '410901', '321281', '350581')# 身份证前17位权重w17 = (7, 9, 10,

CRC校验码的verilog实现与仿真结果

循环冗余校验码(CRC)的基本原理是: 将被处理的报文比特序列当做一个二进制多项式A(x)的系数,(任意一个由二进制位串组成的代码都可以和一个系数仅为'0'和'1'取值的多项式一一对应.例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111),该系数乘以2^n(n为生成多项式g(x)中x的最高次幂)以后再除以发送方和接收方事先约定好的生成多项式g(x)后,求得的余数P(x)就是CRC校验码,把它副到原始的报文A(x)后面形成新的报

CRC校验码原理、实例、手动计算

CRC16实现代码 思路:取一个字符(8bit),逐位检查该字符,如果为1,crc^crc_mul;同时,如果原本crc最高位是1,那么crc^crc_mul后左移1位,否则只是左移一位.计算完一个字符后,装入下一个字符. #include<stdio.h> #define crc_mul 0x1021 //生成多项式 unsigned int cal_crc(unsigned char *ptr, unsigned char len) { unsigned char i; unsigned

计组_海明校验码

原理: 在数据中加入几个校验码,并把数据的每一个二进制位分配在几个奇偶校验组中. 设:校验位的个数为r,能表示2^r个信息,1个表示“没错误”, 2^r -1个指出错误发生在哪一位. k= 2^r –1-r个信息可用于纠正数据位. 2^r≥k+r+1 若要检测并纠正一位错,同时发现两位错,r,k应满足下列关系: 2^r-1≥k+r      (见表3.8) 校验位和数据位是如何排列的 校验位排列在  2^(i–1) (i =0,1,2,…)的位置上 例:有一个编码 为D4D3D2D1,由此生成一

md5和SHA校验码

md5已经不安全了,中国山东大学女学霸王小云破解了一系列密码,当真是巾帼不让须眉.说是破解,其实就是给你一个md5码,让你求出这个md5码所对应的原始信息,显然一个md5对应无数种原始信息.而md5的特性就是难以还原初始信息,但是王小云可以迅速找到给定md5码的可行解.md5的解空间虽然巨大,但是却难以捕捉到解. md5虽然已经不安全了,但是仍然可以用于校验. md5不是编码,编码是能够还原初始信息的,而md5只是固定的16byte,它只能从总体上反映初始信息的一些特征,却无法完整的还原出来,因

信管备考知识点精讲·计算机硬件基础之校验码

信息系统管理工程师是全国计算机技术与软件专业技术资格考试(简称计算机软件资格考试)中的一个中级考试.信息系统管理工程师考试要求考生掌握计算机系统.操作系统.数据库.计算机网络.信息化和信息系统等相关知识内容.信息系统管理工程师考试要求掌握的内容宽且多,备考期间哪些内容是需要重点掌握的呢?下面跟着希赛软考学院来学习信息系统管理工程师计算机硬件基础校验码部分要重点掌握的内容. 信息系统管理工程师备考知识点精讲之校验码 奇偶校验 是一种简单有效的校验方法通过在编码中增加一位校验位来使编码中的1的个数为