计算及校验海明码的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、...来代替

得到ab1c011

二、算校验位值

令发送方和接受方都采用偶检验的方法,也就是保证1的个数为偶数。采用奇检验结果也一样,但收发双方一定要用相同的检验方法。

a b 1 c 0 1 1

第一位检验位a的计算方法:从a开始检验一位,跳过一位,即20位,利用偶检验确定a。

第二位检验位b的计算方法:从b开始检验两位,跳过两位,即21位,利用偶检验确定b。

第三位检验位c的计算方法:从c开始检验四位,跳过四位,即22位,利用偶检验确定c。



a b 1 c 0 1 1

a 1 0 1 偶检验确定a=0



a b 1 c 0 1 1

b 1 1 1 偶检验确定b=1



a b 1 c 0 1 1

后面没有了,所以就是c 0 1 偶检验确定c=0



代入abc得海明码0110 011

三、检验

传输海明码,若在信道上受到干扰,导致一位编码出现异常由0110 011→0111 011

根据确定检验位的值来检验,第n组 检验2n位,跳过2n位,分别把每组的数据异或,得出错位置。这里的异或也就是相当于偶检验的过程,1的个数为偶数G就为0。



0 1 1 1 0 1 1

G1=0⊕1⊕0⊕1=0



0 1 1 1 0 1 1

G2=1⊕1⊕1⊕1=0



0 1 1 1 0 1 1

G3=1⊕0⊕1⊕1=1



由于发送端采用的是偶检验那么G3G2G1=000可说明传送中没有出错,G3G2G1=100转化为十进制说明海明码第4位出错,将第四位纠错后变成0110 011

例2,计算0111 011的海明码及检验

一、算校验位

m=7,根据m+r ≤ 2r-1求得r=4

a b 0 c 1 1 1 d 0 1 1

二、算校验位值

令发送方和接受方都采用偶检验的方法,也就是保证1的个数为偶数。

a b 0 c 1 1 1 d 0 1 1



a b 0 c 1 1 1 d 0 1 1

a 0 1 1 0 1 偶检验确定a=1



a b 0 c 1 1 1 d 0 1 1

b 0 1 1 1 1 偶检验确定b=0



a b 0 c 1 1 1 d 0 1 1

c 1 1 1 偶检验确定c=1



a b 0 c 1 1 1 d 0 1 1

d 0 1 1 偶检验确定d=0



代入abcd得海明码1001 1110 011

三、检验

传输海明码,若在信道上受到干扰,导致一位编码出现异常由1001 1110 011→1001 1110 111

根据确定检验位的值来检验,第n组 检验2n位,跳过2n位,分别把每组的数据异或,得出错位置。



1 0 0 1 1 1 1 0 1 1 1

G1=1⊕0⊕1⊕1⊕1⊕1=1



1 0 0 1 1 1 1 0 1 1 1

G2=0⊕0⊕1⊕1⊕1⊕1=0



1 0 0 1 1 1 1 0 1 1 1

G3=1⊕1⊕1⊕1=0



1 0 0 1 1 1 1 0 1 1 1

G4=0⊕1⊕1⊕1=1



由于发送端采用的是偶检验那么G4G3G2G1=0000可说明传送中没有出错,G4G3G2G1=1001转化为十进制说明海明码第9位出错,将第9位纠错后变成1001 1110 011

例3,再来个多的,再多就没有意义了。计算0111 0110 11的海明码及检验

一、算校验位

m=10,根据m+r ≤ 2r-1求得r=4

a b 0 c 1 1 1 d 0 1 1 0 1 1

二、算校验位值

令发送方和接受方都采用偶检验的方法,也就是保证1的个数为偶数。

a b 0 c 1 1 1 d 0 1 1 0 1 1



a b 0 c 1 1 1 d 0 1 1 0 1 1

a 0 1 1 0 1 1偶检验确定a=0



a b 0 c 1 1 1 d 0 1 1 0 1 1

b 0 1 1 1 1 1偶检验确定b=1



a b 0 c 1 1 1 d 0 1 1 0 1 1

c 1 1 1 1 1偶检验确定c=1



a b 0 c 1 1 1 d 0 1 1 0 1 1

d 0 1 1 0 1 1偶检验确定d=0



代入abcd得海明码0101 1110 0110 11

三、检验

传输海明码,若在信道上受到干扰,导致一位编码出现异常由0101 1110 0110 11→0001 1110 0110 11

根据确定检验位的值来检验,第n组 检验2n位,跳过2n位,分别把每组的数据异或,得出错位置。



0001 1110 0110 11

G1=0⊕0⊕1⊕1⊕0⊕1⊕1=0



0001 1110 0110 11

G2=0⊕0⊕1⊕1⊕1⊕1⊕1=1



0001 1110 0110 11

G3=1⊕1⊕1⊕1⊕0⊕1⊕1=0



0001 1110 0110 11

G4=0⊕0⊕1⊕1⊕0⊕1⊕1=0



由于发送端采用的是偶检验那么G4G3G2G1=0000可说明传送中没有出错,G4G3G2G1=0010转化为十进制说明海明码第2位出错,将第2位纠错后变成0101 1110 0110 11

原文地址:https://www.cnblogs.com/xfk1999/p/11759115.html

时间: 2024-10-13 14:38:34

计算及校验海明码的3个举例的相关文章

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

海明码校验 当计算机存储或移动数据时,可能会产生数据位错误.这时能够利用汉明码来检測并纠错,简单的说,汉明码是一个错误校验码码集. 了解海明码之前先了解一下异或: 异或的数学符号为"⊕".计算机符号为"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 

奇偶效验码和海明码

奇偶效验码 奇偶校验码是奇校验码和偶校验码的统称.它们都是通过在要校验的编码上加一位校验位组成. 奇校验码:加上校验位后,编码中 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 110011

纠错编码-海明码

一.海明码 海明码只能发现双比特错误,纠正单比特错误 二.工作原理 "动一发而牵全身",因为海明码是一个多重校验码,也就是码字中的信息码位同时被多个校验码进行校验 三.工作流程 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

[技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码

1.CRC.FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误.它是利用除法及余数的原理来作错误侦测的. FCS,全称Frame Check Sequence,中文名称为帧校验序列,俗称帧尾,即计算机网络数据链路层的协议数据单元(帧)的尾部字段,是一段4个字节的循环冗余校验码. 注:CRC循环冗余校验和FCS帧校验序列是

[C语言]模拟人工计算CRC校验码

组成原理课程设计要实现CRC码的生成与校验,然而并不会用硬件实现... 只好先用C写着玩玩,做题还能用上...网原要考的... 例题:要发送的数据为1101011011,CRC生成多项式P(X)=X4+X+1,求应添加在数据后面的余数. 笔算过程: 编程算: 附上小白的代码... 1 #include "stdafx.h" 2 #define DATABIT_LENGTH 10 //数据位数 3 #define GENERATOR_LENGTH 5 //生成多项式位数 4 #defin

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

计算身份证校验码(最后一位)

在线预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> #msg{ color: red; } </style> </head> <body> 身份证号:<input id="id-card