文章目录

  • 知道两个概念
    • 模2和
    • 模2减
  • 两种不同的二进制除法
    • 除法
    • 模2除法
  • CRC 循环冗余校验
    • 编码过程
    • 差错检测能力

谈CRC循环冗余校验的之前,先把二进制除法说一下,先回忆一下十进制之间的除法是如何运算的,

这个式子在做除法的时候满足了这几个条件:

  • 从被除数的最左边开始向右做除法
  • 被除数运算的两位永远比除数大
  • 如果相减的时候需要向前一位借1,则前一位要减1

知道两个概念

模2和

两个二进制位相加不进位,即 0+0=0,0+1=1,1+0=1,1+1=0(此时不进位)

模2减

两个二进制位相减不借位,即0-0=0,0-1=1(此时不进位),1-0=1,1-1=0

两种不同的二进制除法

除法

这个方法和正常的十进制除法没什么区别,就和刚开始回顾的二进制除法运算方法一样,在下面的例子中,被除数前四位1010除以111要考虑向前一位借1,其实把这些二进制转换成十进制的除法就是83/7=11…6,而这个二进制的运算结果完全吻合。

模2除法

模2除法就要用到之前说的两个概念之中的1个,就是模2减,除数和被除数相减的时候不考虑进位(可以看作做异或运算),这就引出了CRC(Cyclic Redundancy Check)循环冗余校验,用来检测或校验数据传输或者保存后可能出现的错误,本次主要讲解在计算机网络信息传输中的校验,计算机组成原理的信息保存校验原理和网络信息校验一样,不做深入讲解。在相减的时候每一次都是3位之间相减。你可能会问,为什么有时结果是1,有时结果是0呢,主要是被除数百位和除数百位相减可以抵消,不然相减结果还是3位就没有意义了。

CRC 循环冗余校验

编码过程

计算机传输数据的时候要最底层是物理层,向上有数据链路,网络层等等。当然数据要从计算机输出,是自上向下传输,比如从网络层得到一个IP数据报,封装成数据帧。在发送端把数据划分成组,假设每一组k位,数据M=101001,那么k=6,在M后面添加n位的二进制数值(冗余码)用来差错检验。添加冗余码的时候被除数和除数之间进行的是模2除法。

接下来确定除数,除数采用二进制系数多项式,如下表

名称 多项式 对应除数
CRC-8 x8+x2+x+1 1000 0011 1
CRC-16 x12+x11+x3+x2+x+1 1100 0000 01111

x8+x2+x+1表示二进制第8,2,1,0位为1,黄色的就是0位,其它多项式同理

接下来继续M数据的处理,设除数P=1101,则n=3,为什么冗余码的长度是3呢?

因为余数比除数少1,余数是被用来做校验用的。被除数是2nM=101001000。

为什么后面多出来n个0呢?这和后面的检验有关由于拿到的是(k+n)的数据要对数据做模2运算最后判断余数,只有被除数处于(除数+除数的余数)才会等于0,所以0的个数和余数的个数一样。

根据上面模2除法运算结果是商为110100,余数为001,把101010改为101001001,这就是一个完整的可校验数据。

下表是本题的各个数据的含义

符号 含义
M 一组数据 101001
n 冗余码的位数 3
k 每组数据的位数 6
P 除数 1101
2nM 被除数 101001000
Q 110101
R (余数)冗余码 001
2nM+R 发送的数据 101001001

差错检测能力

利用多项式,我们定义误码多项式E(X)是接收到的消息码字与正确码字的异或。即

E(X) = Trecv(X) XOR Tcorrect(X) …… (14)

当E(X)能够被CRC多项式P(X)整除的时候(即R=0)CRC算法无法检查到错误。当我们选择一个适当的P(X)时,E(X)都不能被P(X)整除,因此可以检测出的出错情况有:

  • 单比特差错,只要P(X)含有一个以上的非零项。
  • 双比特差错,只要P(X)满足上述两种形式((12)(13)式)。
  • 任意奇数个比特差错,只要P(X)含有因式(X - 1)。
  • 任意突发差错,当突发差错长度小于或等于帧检验序列(F(X))的长度(n - k)。
  • 长度为(n - k + 1)的突发差错片段,这个片段等于(1-2-(n-k-1))。
  • 长度大于(n - k + 1)的突发差错片段,这个片段等于(1 - 2-(n-k))。

CRC循环冗余校验引起的二进制除法如何计算风暴相关推荐

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

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

  2. 终于弄懂 CRC 循环冗余校验 辽

    概述 CRC 即 Cyclic Redundancy Check 的缩写 CRC 循环冗余校验属于检错码,只能检测出现了错误,但无法纠正错误. 与CRC循环冗余校验类似的,还有奇/偶校验,但是 CRC ...

  3. CRC循环冗余校验是如何纠错的

    引言 昨天同学突然问我CRC循环冗余校验是如何纠错的?我突然大脑一片空白,学过校验码自然知道CRC循环冗余校验码是可以检错和纠错,但是仿佛只知道求出检验码和检错的过程,但是不知道如何纠错的过程,查询书 ...

  4. CRC循环冗余校验(计算机网络)

    CRC循环冗余校验 CRC差错检验的过程 提要 CRC的具体过程 例题详解 CRC差错检验的过程 提要  数据在链路层进行传输时,为了保证接收到的数据比特流是准确无误的,会采用CRC循环冗余校验的方式 ...

  5. CRC(循环冗余校验) BCC校验(异或校验) 温度换算 在线计算

    1,CRC(循环冗余校验)在线计算 2,BCC校验(异或校验)在线计算 3,温度换算 4,在线换算器

  6. CRC循环冗余校验码总结

    一.CRC简介 先在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting ...

  7. CRC 循环冗余校验码 的计算方法

    循环冗余校验CRC(Cyclical Redundancy Check)字段位于尾部,有32位,有时称为IEEE/ANSI标准的CRC32.要使用一个n位CRC监测 数据传输错误,被检查的消息首先要追 ...

  8. 3级流水线11位-4位CRC循环冗余校验码生成器Verilog

    循环冗余校验 循环冗余校验(英语:Cyclic redundancy check,通称"CRC")是一种根据网上数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数,主要用 ...

  9. CRC循环冗余校验检错的原理

    比起奇偶校验码(PCC)只能校验一位错误,循环冗余校验码(CRC)的检错能力更强,可以检出多位错误. 1.CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形 ...

最新文章

  1. 原生JS添加类名 删除类名
  2. GNU make manual 翻译( 一百二十一)
  3. 人工神经网络基本特点
  4. IDEA中Git操作
  5. const 内联 枚举 宏
  6. 【codeforces 534D】Handshakes
  7. FileZilla 服务器端win server2008以上的配置
  8. PHP条件语句总结,php条件语句的总结
  9. 苹果录屏没声音_通过AppleALC,轻松解决黑苹果没声音问题
  10. Xenu工具的简单使用
  11. Mybatis如果存在该条数据则修改,否则新增
  12. 图像处理学习笔记之空间滤波(1)图像的噪声
  13. mysql数据库重做日志文件_数据库:mysql:重做日志文件(redo log file)
  14. Anemometer安装
  15. Apache Flink_JZZ166_MBY
  16. 计算机输入输出接口形式,输入输出接口-微计算机原理-电子发烧友网站
  17. 进程间通信方式有哪些-Linux进程间通信
  18. oXygen使用笔记:使用模板创建dita文件
  19. Java基础教程-首篇前序-二进制符号位及原反补
  20. 安卓APP源码和设计报告——快递查询录入系统

热门文章

  1. iOS自动化打包 Jenkins+Gitlab+Fastlane+蒲公英+钉钉
  2. Spring Security默认登录页面
  3. php excel图表,phpexcel图形图表(二)图形
  4. java自带logging以及log4j的应用
  5. 气传导耳机是什么意思?气传导耳机原理是什么?
  6. Spring Cloud应用接入华为云微服务CSE
  7. 第5节 Selenium 操作form表单
  8. Ubuntu20.04切换源
  9. git让单个文件回滚到指定版本
  10. 苹果、瘟疫与危机:牛顿奋斗的那些年