全网最详细的CRC讲解即计算

CRC

循环冗余码(Cyclic Redundancy Code, CRC)是一种用于校验通信链路上数字传输准确性的计算方法(通过某种数学运算来建立数据位和校验位(CRC)的约定关系的)。它是利用除法以及余数的原理来作错误侦测。
发送方: 使用某公式计算出被传送数据所含信息的一个值,并将此值 附在被传送数据后。
接收方: 对同一数据进行相同的计算,应该得到相同的结果。对比CRC结果。

数学背景

模二运算

模二运算,是一种二进制的四则运算,包括模二加(+)、模二减(-)、模二乘(x)、模二除(/) 四种二进制运算。与四则运算不同的是模二运算不考虑进位和借位.
模二除法

重点

  1. 模二加法和模二减法的结果是相同的,并且与异或(XOR)运算的结果是一致的。 异或运算可以代替模二加减运算。可用硬件XOR异或门硬件代替运算。
  2. 模二乘法可看作两个步骤, 可用AND与门代替运算。
    a. 第一步被乘数的位跟乘数进行与运算,再根据被乘数的阶进行左移被乘数的阶数位,被乘数的位数对应n个部分积。
    b. 部分积进行模二加法运算。
  3. 模二乘除法与普通乘除法一样演算,区别是模二除法的被除数部分的阶数与除数P的阶数相同时,进行部分XOR异或运算,得到商数和余数,将余数的阶数与除数P循环计算,直到余数的阶数小于R,这个余数就是附加的校验码。
    关注模二除法,因为它与CRC算法密切相关,它有三个性质:
  4. 当最后余数的位数小于除数位数时,除法停止。
  5. 当被除数的位数小于除数位数时,则商数为0,被除数就是余数。
  6. 只要被除数或部分余数的位数与除数一样多,且最高位为1,不管其他位是什么数,皆可商1。

二进制多项式

对任意的二进制数都构造与其对应的一个二进制系数多项式
例如:10011B,其对应的二进制系数多项式为P(X) = X^4 +X +1。
CRC算法中,对于二进制数都是以二进制系数多项式去描述的,。
在这里插入图片描述

CRC算法

CRC 算法的基本思想是将要传输数据后面填充N个0(既是传输数据信息左移N位)当做一个包含数据的多项式。将左移后的数据多项式 模二除以另一个生成多项式(Poly),得到的余数作为(CRC)校验数据附加到原数据后面。(模二除,CRC取余)
在这里插入图片描述
在这里插入图片描述

g(x)为校验码的生成多项式(上文中,除数的二级制多项式poly),不同的位数的CRC多项式,对应生成多项式的次幂不同,其纠错能力也不同。常见的标准多项式如下。
在这里插入图片描述

CRC-8算法为例,该算法生成多项式G(X)为在这里插入图片描述
.除数p(x)为0b10000 0111。

CRC算法参数模型

NAME:参数模型名称,决定了CRC位宽和POLY生成多项式。
WIDTH:宽度,即CRC位数。
POLY:生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7。
INIT:这是计算CRC循环冗余码时,在数据后面预填充的预置值,十六进制表示。
REFIN:控制输入数据是否进行反转操作,True或False。若False,则输入数据的比特顺序反转,通常是将最高有效位(MSB)变为最低有效位(LSB)。
REFOUT:控制输出CRC校验值是否进行反转操作。在计算左移后数据多项式模二除以生成多项式后,余数(即CRC校验值)是否按位反转,True或False。
XOROUT:计算结果与此参数异或后得到最终的CRC值。

数据m(x)=0x31 ,CRC-8算法为例,该算法生成多项式G(X)为在这里插入图片描述
.除数p(x)为0b10000 0111。数据m(x)左移八位即x8m(x)=0x3100。 p(x) 模二除以x8m(x)的余数为0x97.

以CRC-16/DNP算法为例,
● 多项式公式G(X)为x16 + x13 + x12 + x11 + x10 + x8 + x6 + x5 + x2 + 1,除数为p(x)=0x13D65= 0b10011 1101 0110 0101。
● 数据m(x)为=0x31=0b0011 0001。由于CRC-16/DNP模型的输入数据反转,其值RefIn m(x) =0b1000 1100 =0x8C。数据m(x)左移16位即x16RefInm(x)=0x8C0000。
● x16RefIn m(x) = 0x8C0000模二除以p(x) = 0x13D65 的余数为r(x)=0b0101 1001 1011 0101=0x59b5.输出数据翻转RefOut r(x)=0b1010 1101 1001 1010 =0xAD9A。
● 结果异或值XorOut为0xFFFF,CRC-16/DNP算法的CRC值= 结果异或值XorOut 按位异或 输出数据翻转RefOut r(x),即RefOut r(x) ^ XorOut 。其值为0xAD9A ^ 0xFFFF = 0xE265。

传统CRC算法

实际应用时,发送方和接收方按以下方式通信:
发送方和接收方在通信前,约定好一个预设除数P(X)。P(X)首位和最后一位的系数必须为1. 以上面的CRC-8为例,多项式(poly)为X8 + X2 + X +1,对应除数P(X) = 10011.
发送方在发送前,将原始数据左移 除数P(X)的次幂的位,将其值进行模二除法运算生成余数F(X)(即CRC码),然后将其附加到原始数据后面一起T(X)发送给接收方。
接收方收到后将其T(X)模二除以约定好的除数P(X),当且仅当余数为0时接收方认为没有差错.

CRC校验码的编码方法是用待发送的二进制数据D(x)昧以生成多项式G(x),将最后的余数作为CRC校
验码。其实现步骤如下:
①没待发送的数据块是P位的二进制多项式D(x).生成多项式为i阶的G(x)。在数据块的末尾掭加i
个0.数据块的长度增加到m+i位.对应的二进制多项式为xiD(x).
②用生成多项式G(x)去除xiD(x),求得余数为阶数为i-1的二进制多项式R(x)。此二进制多项式R(x)
就是D(x)经过生成多项式G(x)编码的CRC校验码。
③用xiD(x)以模2的方式减去R(x),得到二进制多项式xiD’(x)。xiD’(x)就是包含了CRC校验码的
待发送字符串。

基于查表法的CRC算法

计算机操作单元一般为字节为单位,所以采用一个或者多个字节长度的CRC进行校验传递数据,提高CRC校验速度。 预先将CRC计算出来,并存到校验表里,且校验表存在 该行的首个CRC码与该列的首个CRC码的异或值 与他们交集的CRC码相同,每次调用CRC算法采用查表法替代移位计算发放,可提升计算速度。
以8bit 一个字节长度的CRC为例,有256种情况,对应余数有0~255种,将256种余数分别计算出来,按照顺序存放在一个包含256个入口地址的校验表中,然后对输入数据流采用查表来实现。

设置数据流为,在这里插入图片描述
数学表达式为
在这里插入图片描述

,其中⊕为异或运算符。生成多项式为G(x)17bit,则CRC码为CRC16,数学表示式为

CRC校验可以100%地检测出所有奇数个随机错误和长度小于或等于i(i为g(x)的阶数)的突发错误。
所以CRC的生成多项式的阶数越高,那么误判的概率就越小。

参考链接

【科普向】谁都能看懂的CRC(循环冗余校验)原理:https://blog.csdn.net/weixin_44256803/article/details/105805628
什么是CRC:https://info.support.huawei.com/info-finder/encyclopedia/zh/CRC.html
CRC校验查表法原理及实现(CRC-16): https://blog.csdn.net/AgonyRR/article/details/107810982
CRC循环冗余校验 查表算法的代码实现:https://blog.csdn.net/weixin_44256803/article/details/111794445
CRC在线计算: http://www.ip33.com/crc.html
[1]马群,王会燃.基于查表法的嵌入式系统CRC算法研究[J].软件导刊,2014,13(10):51-52.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/43804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

客户关系管理怎么做?这4个工具一定要会用!

在商海浮沉中,每一位企业家和销售经理都深知,客户是企业生存与发展的基石。但如何有效管理这些宝贵的资源,让每一次互动都成为加深关系、促进成交的契机,却是一门艺术加科学的结合体。今天,咱们就来聊聊客户关系管理&a…

3SRB5016-ASEMI逆变箱专用3SRB5016

编辑:ll 3SRB5016-ASEMI逆变箱专用3SRB5016 型号:3SRB5016 品牌:ASEMI 封装:SGBJ-5 批号:2024 现货:50000 最大重复峰值反向电压:1600V 最大正向平均整流电流(Vdss):50A 功…

Kodcloud可道云安装与一键发布上线实现远程访问详细教程

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云,…

唐刘:当 SaaS 爱上 TiDB(一)- 行业挑战与 TiDB 的应对之道

导读 在 TiDB 8.1 发布后,TiDB 展现了强大的支持 SaaS 业务的能力,成为 SaaS 业务数据库的优先选择之一。 本文为“当 SaaS 爱上 TiDB”系列文章的第一篇,系列文章将从技术原理和真实用户体验两个角度深入探讨 TiDB 在 SaaS 业务中的表现&a…

太速科技-3U VPX飞腾处理器刀片计算机

3U VPX飞腾处理器刀片计算机 一 、产品概述 该产品是一款基于国产飞腾FT2000 4核或腾锐D2000 8核的高性能3U VPX刀片式计算机。产品提供了4个x4 PCIe 3.0总线接口,同时可配置为1个x16或2个x8 PCIe3.0接口,因此具有很强的扩展性,极大…

agents 分类

一、分类 自动agent、半自动agent、领域、自定义sop和支持人为干预的agent。 先泼个冷水,目前这些agent项目都是实验品,发展还没有做知识库问答相关开源项目那么成熟, 二、全自动agent autoGPT、loopGPT、babyAGI 全自动agent就是人类不可…

实例演示Kafka-Stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…

Java中的LinkedList(链表)(如果想知道Java中有关LinkedList的知识点,那么只看这一篇就足够了!)

前言&#xff1a;在Java编程语言中&#xff0c;Java集合框架提供了一组丰富的数据结构&#xff0c;以满足各种应用需求。其中&#xff0c;LinkedList作为一种常用的数据结构&#xff0c;具有独特的优势和广泛的应用场景。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内…

linux radix-tree 基数树实现详解

radix tree&#xff0c;又称做基数树&#xff0c;是一种适合于构建key(index)与value(item)相关联的数据结构。内核中使用非常广泛。本文主要聚焦linux内核基数树的代码实现,大量注释过的代码。 radix-tree组织结构如下: 1、数据结构 /** The bottom two bits of the slot de…

IDEA阿里云OSS实现文件上传·解决苍穹外卖图片回显

简单交代配置阿里云OSS的思路 1. 首先去阿里云开通一个OSS服务&#xff0c;配置好一个自己的Bucket 2. 在IDEA配置Bucket 3. 拷贝官网的OSS工具类代码 package com.sky.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSS…

子任务:IT运维的精细化管理之道

在当今的企业运营中&#xff0c;信息技术已成为支撑业务发展的核心力量。根据Gartner的报告&#xff0c;IT服务管理&#xff08;ITSM&#xff09;的有效实施可以显著提升企业的运营效率&#xff0c;降低成本高达15%&#xff0c;同时提高服务交付速度和质量。随着业务的复杂性和…

电脑工具箱神器——uTools

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 很多人脑子里都有一些一个月只用两三次的软件&#xff0c;这些软件就这样积满了灰尘&#xff0c;需要的时候又不知道去哪里找。uTools 完美地解决…

MYSQL审批流程判断同一层级审批人是否全部通过审批

在做流程审批的时候&#xff0c;通常会出现某一层有多个审批人的情况&#xff0c;这个时候需要所有人都通过才会进入到下一步 数据结构如下图表格所示 每一个审批申请对应一个apply_id serial_no相同的代表是同一层级审批人 approval_status是审核状态 下面我们可以用一个SQL来…

Day50:单调栈 LeedCode 739. 每日温度 496.下一个更大元素 I 503. 下一个更大元素 II

739. 每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输…

【蓄势·致远】 同为科技(TOWE)2024年年中会议

2024年7月2日-8日&#xff0c;同为科技&#xff08;TOWE&#xff09;召开2024年年中工作会议。会议回顾上半年总体工作情况&#xff0c;分析研判发展形势&#xff0c;规划部署下半年工作。 为期一周的工作会议&#xff0c;由同为科技&#xff08;TOWE&#xff09;创始人、董事长…

深度|不同数据系统中的“一致性”(Consistency)含义的区别

“你们的系统能实现强一致性吗&#xff1f;”作为过去几年一直在开发流处理系统的从业者&#xff0c;我经常被问到这个问题。我时常想自信地推销我们的产品&#xff0c;但现实情况是&#xff0c;回答这个问题并不简单。其中的挑战并不在于问题本身&#xff0c;而在于 “一致性”…

字节8年经验之谈!好用移动APP自动化测试框架有哪些?

移动App自动化测试框架是为了提高测试效率、降低测试成本而开发的一套工具和方法。好用的移动App自动化测试框架有很多&#xff0c;下面将介绍一些常用的框架&#xff0c;并提供一篇超详细和规范的文章&#xff0c;从零开始帮助你搭建一个移动App自动化测试框架。 1. Appium&a…

十大优秀AI人工智能作词软件有哪些?

1、妙笔生词&#xff1a;国内专业智能作词工具&#xff0c;是一款非常优秀的国内作词软件&#xff0c;它可以选择语言&#xff0c;风格&#xff0c;韵脚一键生成歌词&#xff0c;也可以仿写歌词&#xff0c;可以续写歌词&#xff0c;可以智能取歌名&#xff0c;找优秀词句&…

神经网络识别数字图像案例

学习资料&#xff1a;从零设计并训练一个神经网络&#xff0c;你就能真正理解它了_哔哩哔哩_bilibili 这个视频讲得相当清楚。本文是学习笔记&#xff0c;不是原创&#xff0c;图都是从视频上截图的。 1. 神经网络 2. 案例说明 具体来说&#xff0c;设计一个三层的神经网络。…

如何找工作 校招 | 社招 | 秋招 | 春招 | 提前批

马上又秋招了&#xff0c;作者想起以前读书的时候&#xff0c;秋招踩了很多坑&#xff0c;但是第一份工作其实挺重要的。这里写一篇文章&#xff0c;分享一些校招社招的心得。 现在大学的情况是&#xff0c;管就业的人&#xff0c;大都是没有就业的辅导员&#xff08;笔者见过…