校验之:海明码校验、奇偶校验

1、奇偶校验码

奇偶校验通过在编码中增加一个校验位来使编码中的1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为2.对于奇校验,它可以检测代码中奇数位出错的编码,但不能发现偶数位出错的情况。既当合法编码中奇数位出现错误。也就是1变成0或者0变成1,其编码的奇偶性就发生了变化,从而发现错误。但是这种校验只能发现出现了错误但是不知道具体是哪一位发生了错误。

8421码的奇偶校验码

   十进制数       8421 BCD码         带奇校验位的8421码        带偶校验位的8421码    
0 0000 0000  1 0000  0
1 0001 0001  0 0001  1
2 0010 0010  0 0010  1
3 0011 0011  0 0011  0
4 0100 0100  1 0100  1
5 0101 0101  0 0101  0
6 0110 0110  1 0110  0
7 0111 0111  0 0111 1
8 1000 1000  0 1000  1
9 1001 1001  1 1001  0

常用的奇偶校验有三种:水平奇偶校验,垂直奇偶校验校验和水平垂直奇偶校验。

水平奇偶校验:对每一种数据的编码添加校验位,使信息位与校验位处于同一行

垂直奇偶校验:这种校验将数据分为若干组,一组一行,整齐排列,再加上一行校验位,针对每一列采样奇校验或偶校验。

对32位数据:10100101  00110110  11001100 10101011 进行校验:

        编码分类                垂直奇校验                垂直偶校验        
数据
10100101

00110110

11001100

10101011


10100101

00110110

11001100

10101011

校验位 00001011 11110100

就是这个意思:--------------------------------------------------------------------------------------------------------------

水平校验与垂直水平校验都类似。

2.海明码

海明码也是利用奇偶校验和纠错校验的方法,海明码的构成是:在数据位之间插入k个校验位,通过扩大码距来时间检查和纠错。例如:对于8位的数据,需要4个校验位来进行校验。如,令数据位:D7、D6、D5、D4、D3、D2、D1、D0和校验位位:P4、P3、P2、P1。则编码位置:

H12     H11    H10    H9    H8    H7    H6    H5    H4    H3    H2    H1

D7     D6     D5     D4      P4      D3     D2     D1    P3     D0     P2    P1

校验码的设置位置在2^i的位置上。每个校验位只校验数据中位置号的二进制编码和自身位置号的二进制编码相匹配的数据:

即如下图所示:

因此校验关关系为:

P1偶校验:P1、D0、D1、D3、D4、D6

即:P1=D0⊕D1⊕D3⊕D4⊕D6

P2偶校验:P2、D0、D2、D3、D5、D6

即:P2=D0⊕D2⊕D3⊕D5⊕D6

P3偶校验:P3、D1、D2、D3、D7

即:P3=D1⊕D2⊕D3⊕D7

P4偶校验:P4、D4、D5、D6、D7

即:P4=D4⊕D5⊕D6⊕D7

海明码的错误检测也非常简单,对使用海明码的数据进行如下计算即可:

G1=P1⊕D0⊕D1⊕D3⊕D4⊕D6

G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6

G3=P3⊕D1⊕D2⊕D3⊕D7

G4=P4⊕D4⊕D5⊕D6⊕D7

对于所得的值,若采用偶校验,则全为0表示接受的数据无误(奇校验则全为1)当G4G3G2G1不全为0,说明发生了错误,而且是G4G3G2G1的十进制值指出了错误的位置:如:G4G3G2G1=1010,则说明H10(D5)出了问题,将其取反便可纠正。

设数据01101001,采用四个校验位求其偶校验的海明码:

0    1    1    0    1    0    0    1

D7 D6 D5  D4  D3  D2  D1  D1

P1=D0⊕D1⊕D3⊕D4⊕D6=1⊕0⊕1⊕0⊕1=1

P2=D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕1⊕1⊕1=0

P3=D1⊕D2⊕D3⊕D7=0⊕0⊕1⊕0=1

P4=D4⊕D5⊕D6⊕D7=0⊕1⊕1⊕0=0

所以校验的海明码为:

时间: 2024-11-08 07:06:05

校验之:海明码校验、奇偶校验的相关文章

海明码校验和纠错原理 详细

海明纠错码 当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错,简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码. 海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误的纠错码,所以它也仅用于通信特性较好的环境中,如以太局域网中,因为如果通道特性不好的情况下,出现的错通常也不是一位. 海明码的检错.纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位

软考历程(2)——海明码校验

这两天学了校验码,在计算机系统基础知识这块,校验还是挺重要的.这里涉及到的校验码有三种: 奇偶校验码(Parity Code) 海明码(Hamming Code) 循环冗余检验码(CyclicRedundancy Check,CRC) 1.奇偶校验码 这是一种最简单最有效的校验方法,通过在编码中添加一位校验位.使1的个数为偶数(偶校验)或奇数(奇校验).从而使码距变为2. 奇校验能够检測代码中奇数位出错的编码,不能够发现偶数位出错的情况. 2.海明码 这是利用奇偶性来检错和纠错的校验方法.其构成

能将0和1两个数字玩的如此传神!是个程序要都应该了解的海明码(通俗版)

得到海明码步骤: 一.确定校验码的位数k 二.确定校验码的位置 三.数据的位置 四.求出校验位的值 其中还需要一个公式的推导,好了,下面开始: 首先,海明码的作用是:在编码中如果有错误,可以表达出第几位出了错,二进制的数据只有0和1,修改起来很容易,求反即可,这需要加入几个校验位.对于一个m位的数据信息,到底应该加入几个呢?假设需要k个,那么编码之后应该是m+k位,这k个二进制数组成的数据能够表达的数值是2的k次方个,比如需要3个校验位,k=3,3位二进制数从000 . 001 .-- .111

海明码一篇文章彻底搞懂

海明码学习前提 记住几个要点: 不要用异或套用公式!!!!题目随便变几个变死你! 看完这篇博客不要看别的博客!!!!别的人瞎写的坑死你 学习海明码之前,我们要约定3个原则: 海明码只能检测出2位错,纠1位错(因此不要问如果3位错怎么办等幼稚问题). 海明码默认进行偶校验(除非特殊说明使用奇校验). 海明码是一串由0和1组成的序列(除01外没有其他的值,记住了!这是重点) 如果下面有任何无法理解的问题,反复看上面三个原则,下面再也不赘述. 前提:奇偶校验 奇校验:这串序列1的个数如果为偶数则在前面

文档:网络通讯包结构(crc校验,加解密)

包结构: 包 对(datacrc+protoID+dataSize)组成的byte[] 进行crc计算而得到 对(数据内容)进行crc计算而得到 协议号 数据内容的字节长度 数据内容 字段 headcrc datacrc protoID dataSize data 类型 uint uint ushort ushort byte[] 字节数 4 4 2 2 dataSize crc校验 问:TCP协议中,底层做了校验,那通信时我们还有必要再进行有CRC或者其他校验吗? 答:tcp 是可靠的, 就是

raid之理解

RAID方案有两种,一种是硬件RAID解决方案,一种是软RAID解决方案. 硬件RAID解决方案 1.RAID 0 RAID 0是最早出现的RAID模式,即Data Stripping数据分条技术.RAID 0是组建磁盘阵列中最简单的一种形式,只需要2块以上的硬盘即可,成本低,可以提高整个磁盘的性能和吞吐量.RAID 0没有提供冗余或错误修复能力,但实现成本是最低的. RAID 0示意图 RAID 0最简单的实现方式就是把N块同样的硬盘用硬件的形式通过智能磁盘控制器或用操作系统中的磁盘驱动程序以

磁盘阵列 RAID 技术原理详解

RAID一页通整理所有RAID技术.原理并配合相应RAID图解,给所有存储新人提供一个迅速学习.理解RAID技术的网上资源库,本文将持续更新,欢迎大家补充及投稿.中国存储网一如既往为广大存储界朋友提供免费.精品资料. 1.什么是Raid;RAID(Redundant Array of Inexpensive Disks)称为廉价磁盘冗余阵列.RAID 的基本原理是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大.价格昂贵的磁盘.目前 RAID技术大致分为两种:基于硬件的

存储基础知识笔记

DAS.NAS.SAN是三种存储模式,NAS与SAN都是在DAS的基础上发展起来的,是新型数据存储模式中的两个主要发展方向. DAS是大型服务器采用的主要存储方式,DAS(Direct Attached Storage,直接外挂存储) NAS(Network Attached Storage,网络附加存储) SAN(Storage Area Network,存储域网络) 直接连接存储(Direct Attached Storage,简称DAS),是通常放置在服务器机箱内部的驱动器,通常是SCSI

非常阔气的Raid磁盘阵列

详解Raid磁盘阵列 一.什么是raid,为甚吗要用软raid? RAID是"Redundant Array of Independent Disk"的缩写,叫独立冗余磁盘阵列.简单地解释,就是将N台硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用.RAID的采用为存储系统(或者服务器的内置存储)带来巨大利益,其中提高传输速率和提供容错功能是最大的优点. 原理是利用数组方式来作磁盘组,配合数据分散排列的设计,提升数据的安全性.