1.奇偶校验码

奇偶校验就是在原有的二进制数据的基础上加上以为的校验位

奇校验:整个校验码(原有信息+校验位)中的“1”的个数为奇数

偶校验:整个校验码(原有信息+校验位)中的“1”的个数为偶数

举个例子:

有效信息位:1001101

奇校验:10011011  或   11001101

偶校验:10011010   或  01001101

偶校验的实现

偶校验在硬件中是使用异或运算来实现的,还是借助上面的例子来讲解

通过对有效信息中的值进行异或运算,可以算得偶校验位

再连同校验位一起进行异或运算,若结果为0则表示无误,结果为1表示出错

这里一定要注意,奇偶校验只适合对只有奇数位数发生错误的情况进行校验,如果有两位数同时出错,可以发现结果依然为0,显然这是有问题的


2.海明校验码

由于奇偶校验码的局限性,这里引入海明校验码。海明校验是对偶校验的扩展,引入了更多的校验位来弥补了奇偶校验的局限性

1.分组

那么需要多少个校验位呢?这里需要先对有效信息进行分组

假设有效信息有k位,分成r组,要组成n位的海明校验码。每组设一个校验位,则需要r个校验位,r个校验位组成一个r位的指误字,可以表示种状态,如果指误字是全0则表示无误,因此有-1种状态表示错误,所以如果要海明校验码能发现并纠正一位的错误,则必须要满足下面的是关系式:

n=k+r<= -1        (香农第二定理)

假设k=4,则r>=3,可以组成7位的海明校验码

首先来对校验位的位置进行确定,这个位置满足的规则,比如上面有3个校验位,那么校验位就应该在1,2,4的位置上

下面借助这个表来说,直观一点

上面的P就是校验位,A就是信息位(假设信息位是1010)

查错和纠错 

下面进行查错和纠错,上表分为了3组,将1~7分别转化成二进制数,第3组就是编号含4的,从二进制来看就是最高位是1的(形如:1XX),同理2组和1组就是 X1X 和 XX1 的形式,在这些位置上打上勾。

校验位P的求解:以第3组为例,P3 = A2⊕A3⊕A4 = 0 ,同理P2=0,P3=0

指误字G的求解:G3 =  P3⊕A2⊕A3⊕A4 = 0,G2 = 0,G1 = 0

三个指误字拼接在一起:G3G2G1 = 000, 表示没有错

假设第5位A2发生了错误:0->1,最后得到 G3G2G1=101= 5 ,说明第5位(即A2)发生了错误。


3.循环冗余校验(CRC校验)

直接讲怎么做吧

设最小生成多项式为G(X)=++1,信息码为101001,求对应的CRC码

根据最小生成多项式可以得到1101,G(X) = ++1 = 1*+1*+0*x+1*

然后进行模2除运算(类似于异或运算)

模二除法:1.因为除数是四位,所以把信息位先补三个0,最后的余数也只有三位

2.然后看最高位,如果为1,直接商1;如果为0就商0(比如第三次是0111就直接商0),然后进行模2减(异或运算)

3.最后余数是三位数001

4.对应的CRC码:101001001(把原来的信息位和余数拼接起来)

5. 校验:用CRC码除以生成多项式得到的数1101(101001001/1101=000),如果余数为000则没有错误,反之就出错了

注意:最后的余数不一定能指出错误的位置

计算机组成原理——奇偶校验,海明校验,循环冗余校验相关推荐

  1. 进制转换及如何求校验码(海明校验码及循环冗余校验CRC码)

    文章目录 前言 一.进制转换 1.1 二进制转换为八进制数和十六进制数 1.2 任意进制数转换为十进制数 1.3 十进制转换为任意进制 二.校验码求取 2.1海明校验码 2.2循环冗余校验CRC码 总 ...

  2. 详述循环冗余校验CRC(附代码)

    内容包括循环校验码CRC及其生成原理介绍,CRC-16校验码的使用与其校验码计算方法,程序示例.紫色文字是超链接,点击自动跳转至相关博文.持续更新,原创不易! 目录: 一.CRC概念 1.什么是CRC ...

  3. CRC32(Cyclic Redundancy Check)循环冗余校验:推导

    Table of Contents 什么是循环冗余校验和CRC-32? CRC-32输出的长度是多少? CRC-8,CRC-16,CRC-32和CRC-64有什么区别? CRC32源代码 CRC32算 ...

  4. 为了进行差错控制,必须对传送的数据帧进行校验。在局域网中广泛使用的校验方法是循环冗余校验。当接收端发现错误后采取的措施是

    为了进行差错控制,必须对传送的数据帧进行校验.在局域网中广泛使用的校验方法是循环冗余校验.当接收端发现错误后采取的措施是 (D) . A.重新计算原始数据 B.报告上层协议 C.自动纠错 D.自动请求 ...

  5. 【算法集中营】循环冗余校验

    CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制.实际上,除 数据 ...

  6. 【算法】CRC 循环冗余校验

    1.概述 循环冗余校验CRC (Cyclic Redundancy Check)是一种数据链路层的差错控制技术. 在数据的传输过程中可能会产生比特错误: 1可能变为0,0可能变为1. 在一段时间内,传 ...

  7. 数据链路层的检错技术——循环冗余校验CRC(Cyclic Redundancy Check)

    数据链路层的循环冗余校验CRC(Cyclic Redundancy Check) 简介 背景 原理(以CRC-16/XMODEM为例) 应用场景 CRC各版本及反转.初始值含义详解 计算过程 计算过程 ...

  8. 从原理到代码理解CRC循环冗余校验

    概述:本文详细介绍了CRC循环冗余计算的数学原理,算法中使用的参数说明,并以Modbus协议中的CRC-16算法为例,进行手算验证,同时提供LabVIEW和C语言的直接计算CRC-16 值的代码以及C ...

  9. crc循环冗余校验 php,crc 循环冗余校验

    --- title: crc 循环冗余校验 date: 2018-09-26 updated: 2018-10-06 --- # crc 循环冗余校验 CRC(Cyclic Redundancy Ch ...

最新文章

  1. mysql set bulk_insert_buffer_size
  2. 4 个场景揭秘,如何低成本让容器化应用 Serverless 化?
  3. corosync/openais+pacemaker+drbd+web实现高可用群集
  4. python 读取word_教你怎么使用 Python 对 word文档 进行操作
  5. python 操作符 vs java 操作符
  6. 封年大促|年货节优秀PSD分层模板
  7. 《那些年啊,那些事——一个程序员的奋斗史》——37
  8. 如何用Python快速实现区块链?
  9. 计算机辅助设计与制造实例教程答案,计算机辅助设计实例教程= Example Course of Computer Aided Design...
  10. Win10 设置 Windows聚焦 变为图片
  11. 正菱台体积在线计算机,棱台体积公式
  12. 数据库:MySQL Workbench如何连接远程数据库
  13. 手把手带二大爷用EasyDL实现戴口罩检测APP
  14. python数据分析与挖掘实战(2)帕累托法则菜品盈利分析与相关性分析
  15. FastReport for Delphi
  16. 阴阳师服务器维护结界卡,阴阳师近期结界卡断粮 详解原因及解决办法
  17. ndn-tools:dissect-wireshark的使用
  18. 个人笔记,深入理解 JVM,很全!
  19. java菜鸟1:jdk 安装
  20. 数据手册中的英语小屁孩

热门文章

  1. 韩顺平java-枚举和注解异常包装类
  2. anchor机制讲解
  3. torch.repeat()与numpy.repeat()和 numpy.tile()比较
  4. java微博源码_基于jsp的微博-JavaEE实现微博 - java项目源码
  5. 怎么扫描同网段mac地址linux,如何快速收集局域网内的IP+MAC信息?用这个扫描器分分钟搞定!!!...
  6. 云效安全那些事儿-Codeup代码智能安全检测服务
  7. Linux服务器互信
  8. 《程序设计基础II》实验3——递推
  9. 对持久层、持久性、持久化的讨论
  10. Kubernetes资源清单和Pod生命周期