奇偶效验码和海明码

奇偶效验码

奇偶校验码是奇校验码和偶校验码的统称。它们都是通过在要校验的编码上加一位校验位组成。

奇校验码:加上校验位后,编码中 1 的个数为奇数个。

偶校验码:加上校验位后,编码中 1 的个数为偶数个。

水平奇偶效验码

例:

原编码 奇校验 偶校验
0000 0000 1 0000 0
0010 0010 0 0010 1
1100 1100 1 1100 0
1010 1010 1 1010 0

 

 

 

垂直奇偶效验码

例:

有32位数据 10100101 00110110 11001100 10101011

  垂直奇校验 垂直偶校验
 原编码 10100101 10100101
00110110 00110110
11001100  11001100 
10101011 10101011
 校验码 00001011 11110100

 

 

 

 

缺点:

只能检测出奇数位出错,且无法检测出哪位出错。

设原编码为0000,传输的过程中变成了1001。若使用奇校验,原编码是00001,传输过后会变成10011,1仍然是奇数个,无法校验;如果使用偶校验,原编码是00000,传输过后会变成10010,1仍然是偶数个,同样无法校验。

 


 

海明码

海明码也是利用奇偶性来校验数据的,它是一种多重奇偶校验检错系统。通过在数据位之间插入k个校验位,来扩大码距,从而实现检错和纠错。

注:码距指两个码组对应位上数字的不同位的个数。

假设数据位数为m,向其(2的幂次方,如1,2,4,8……)各位插入k位校验码,且满足m+k+1<2k

例:101101100,求海明码。

101101100,9+k+1<2k

解得,k=4,即校验码位数为4位

位置 1 2 3 4 5 6 7 8 9 10 11 12 13
原始信息位     1   0 1 1   0 1 1 0 0
 用到的校验码 校验位1   校验位2   1+2=3  校验位3   1+4=5  2+4=6  1+2+4=7  校验位4   1+8=9 2+8=10  1+2+8=11  4+8=12  1+4+8=13

 

 

 

 即得每个校验位校验了哪些位置:

  bit1=3,5,7,9,11,13

  bit2=3,6,7,10,11

  bit4=5,6,7,12,13

  bit8=9,10,11,12,13

 通过原始信息位,对各位进行模2运算(异或:相同为0,不同为1)得:

  bit1=1,0,1,0,1,0=1

  bit2=1,1,1,1,1=1

  bit4=0,1,1,0,0=0

  bit8=0,1,1,0,0=0

得校验码分别为:1,1,0,0

原文地址:https://www.cnblogs.com/zhanghx/p/9744885.html

时间: 2024-10-08 03:01:52

奇偶效验码和海明码的相关文章

计算机系统知识(一)—海明码

海明码校验 当计算机存储或移动数据时,可能会产生数据位错误.这时能够利用汉明码来检測并纠错,简单的说,汉明码是一个错误校验码码集. 了解海明码之前先了解一下异或: 异或的数学符号为"⊕".计算机符号为"xor".其运算法则为: a⊕b = (?a ∧ b) ∨ (a ∧?b) 假设二进制下用1表示真,0表示假.则异或的运算法则为: 0⊕0=0, 1⊕0=1, 0⊕1=1. 1⊕1=0(同为0,异为1).  海明码的编码步骤: 1. 依据信息位数,确定校验位数,2r 

计算及校验海明码的3个举例

海明码具有检错纠错能力,用于传输质量较好的信道,因为出错太多检测不出来. m位数据需要满足具有r位校验码 m+r ≤ 2r-1 校验位放在2n位置上,如??1? 111? 1111 111? 111... 校验码依次在20. 21. 22. 23. 24位置上,有的是从后往前写的,结果不影响,知道怎么算就行. 例1,计算1011的海明码及检验 一.算校验位 原数据1011, 有4位数据位, 需满足4+r≤2r-1这个公式, 求得r=3,表明有3个检验位,以下用a.b.c....来代替 得到ab1

纠错编码-海明码

一.海明码 海明码只能发现双比特错误,纠正单比特错误 二.工作原理 "动一发而牵全身",因为海明码是一个多重校验码,也就是码字中的信息码位同时被多个校验码进行校验 三.工作流程 1.确定校验码位数 海明不等式2^r>=k+r+1,r为冗余信息位,k为信息位 eg:要发送的数据为D=101101 则数据的位数k=6 满足的不等式最小r为4 也就是D=101101的海明码应该有6+4=10位,其中原始数据6位,校验码4位 2.确定校验码和数据的位置 还是上面的那个例子D=101101

洛谷 P1461海明码 Hamming Codes 枚举 搜索

洛谷 P1461海明码 Hamming Codes枚举 搜索 1 #include <bits/stdc++.h> 2 using namespace std ; 3 4 const int N = 11 ; 5 int mx,B,n,D ; 6 int bin[N] ; 7 struct base{ 8 bool f[ N ] ; 9 inline void clear() { 10 for(int i=1;i<N;i++) f[ i ] = 0 ; 11 } 12 inline vo

洛谷 P1461 海明码 Hamming Codes

P1461 海明码 Hamming Codes 题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位的“Hamming距离”(1 <= D <= 7).“Hamming距离”是指对于两个编码,他们二进制表示法中的不同二进制位的数目.看下面的两个编码 0x554 和 0x234(0x554和0x234分别表示两个十六进制数): 0x554 = 010

LRC的效验码的计算方法

图一中需要检验ASCI码数据是30.31.30.30.30.30.30.30,转化为16进制累加后是0000 0001,取反加1得到1111 1111,转换为ASCI码46.46.和图中是一样的. 图二中需要检验ASCI码数据是30.31.30.33.30.30.30.30.31.33.38.38,转化为16进制累加后是0001 1000,取反加1得到1110 1000,转换为ASCI码45.38,怎么和图中的26.31不一样? 你对LRC的理解有问题啊……图二中的有效ASCII字符串为“010

四舍六入五成双(四舍六入奇偶效验)银行家算法

规则: 四舍六入五考虑. 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一. c#: Math.Round(new Decimal(1.2050),2) 1.2 Math.Round(new Decimal(1.2150),2) 1.22 Math.Round(new Decimal(1.2250),2) 1.22 Math.Round(new Decimal(1.2350),2) 1.24 Math.Round(new Decimal(1.2450),2) 1.24 Mat

【计算机组成原理】海明码

海明码也叫做汉明码,具有一位纠错能力. 编码: 确定校验码的位数x 设数据有n位,校验位有x位,则校验码一共有2的n次方种取值,其中需要一种取值方式表示数据正确,剩下2的n次方-1表示有一位数据出错,因此编码后的二进制串有n+x位,所以应该满足2的x次方-1>=n+x 以1010110为例,信息位有7位则校验位为4 确定校验位的位置:校验码在二进制串中的位置为2的整数幂 位置 1 2 3 4 5 6 7 8 9 10 11 内容 x1 x2 1 x3 0 1 0 x4 1 1 0 求校验位的值:

HAMMING CODES 海明码

http://acm.sdibt.edu.cn/JudgeOnline/problem.php?id=2324 题目大意:(如题) 输入输出:(如题) 解题思路: 简单搜索.按递增顺序搜索要求的n个数,然后跟前面的数判断距离是否大于d,找到的一组解即为最小的. 注意: 1.0在每组数据里面都出现. 2.b给出了搜索的最大值:2^b-1. 3.计算两个数a,b的距离,只要计算a^b的二进制形式中1的个数. 核心代码: int dist(int x,int y) { int cnt,tmp; cnt