循环冗余校验 CRC 的算法分析和程序实现

CRC循环冗余校验(比较全面从校验原理到FPGA程序设计) CRC校验的原理到FPGA设计的过程理解。 阅读详情

循环冗余校验 CRC 的算法分析和程序实现

摘要 通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠
与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错
控制。本文详细介绍了循环冗余校验CRC(Cyclic Redundancy Check)的差错控制原理及其算法实
现。
关键字 通信 循环冗余校验 CRC-32 CRC-16 CRC-4
概述
在数字通信系统中可靠与快速往往是一对矛盾。若要求快速,则必然使得每个数据码元所占地
时间缩短、波形变窄、能量减少,从而在受到干扰后产生错误地可能性增加,传送信息地可靠性下
降。若是要求可靠,则使得传送消息地速率变慢。因此,如何合理地解决可靠性也速度这一对矛盾,
是正确设计一个通信系统地关键问题之一。为保证传输过程的正确性,需要对通信过程进行差错控
制。差错控制最常用的方法是自动请求重发方式(ARQ)、向前纠错方式(FEC)和混合纠错(HEC)。
在传输过程误码率比较低时,用FEC 方式比较理想。在传输过程误码率较高时,采用FEC 容易出
现“乱纠”现象。HEC 方式则式ARQ 和FEC 的结合。在许多数字通信中,广泛采用ARQ 方式,
此时的差错控制只需要检错功能。实现检错功能的差错控制方法很多,传统的有:奇偶校验、校验
和检测、重复码校验、恒比码校验、行列冗余码校验等,这些方法都是增加数据的冗余量,将校验
码和数据一起发送到接受端。接受端对接受到的数据进行相同校验,再将得到的校验码和接受到的
校验码比较,如果二者一致则认为传输正确。但这些方法都有各自的缺点,误判的概率比较高。
循环冗余校验CRC(Cyclic Redundancy Check)是由分组线性码的分支而来,其主要应用是二
元码组。编码简单且误判概率很低,在通信系统中得到了广泛的应用。下面重点介绍了CRC 校验
的原理及其 算法实现。
一、循环冗余校验码(CRC)
CRC 校验采用多项式编码方法。被处理的数据块可以看作是一个n 阶的二进制多项式,由
0 1
2
2
1
1 a x a x a x a x
n
n
n + + ⋅ ⋅ ⋅ + + −
−
−
− 。如一个8 位二进制数10110101 可以表示为:
1 0 1 0 1 1 0 1 2 3 4 5 6 7 + + + + + + + x x x x x x x 。多项式乘除法运算过程与普通代数多项式的乘除法相
同。多项式的加减法运算以2 为模,加减时不进,错位,和逻辑异或运算一致。
采用CRC 校验时,发送方和接收方用同一个生成多项式g(x),并且g(x)的首位和最后一
位的系数必须为1。CRC 的处理方法是:发送方以g(x)去除t(x),得到余数作为CRC 校验码。
校验时,以计算的校正结果是否为0 为据,判断数据帧是否出错。
CRC 校验可以100%地检测出所有奇数个随机错误和长度小于等于k(k 为g(x)的阶数)的
突发错误。所以CRC 的生成多项式的阶数越高,那么误判的概率就越小。CCITT 建议:2048 kbit/s
的PCM 基群设备采用CRC-4 方案,使用的CRC 校验码生成多项式g(x)= 1 4 + + x x 。采用16
位CRC 校验,可以保证在14 10 bit 码元中只含有一位未被检测出的错误] 2 [ 。在IBM 的同步数据链
路控制规程SDLC 的帧校验序列FCS 中,使用CRC-16,其生成多项式g(x)= 1 2 15 16 + + + x x x ;
而在CCITT 推荐的高级数据链路控制规程HDLC 的帧校验序列FCS 中,使用CCITT-16,其生成多
项式g ( x ) = 1 5 15 16 + + + x x x 。CRC-32 的生成多项式g ( x )
= 1 2 4 5 7 8 10 11 12 16 22 23 26 32 + + + + + + + + + + + + + + x x x x x x x x x x x x x x 。CRC-32 出错的概
率比CRC-16 低5 10− 倍] 4 [ 。由于CRC-32 的可靠性,把CRC-32 用于重要数据传输十分合适,所以
在通信、计算机等领域运用十分广泛。在一些UART通信控制芯片(如MC6582、Intel8273 和Z80-SIO)
内,都采用了CRC 校验码进行差错控制;以太网卡芯片、MPEG 解码芯片中,也采用CRC-32 进
行差错控制。
二、CRC 校验码的算法分析
CRC 校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数
作为CRC 校验码。其实现步骤如下:
(1) 设待发送的数据块是m 位的二进制多项式t(x),生成多项式为r 阶的g(x)。在数据块
的末尾添加r 个0,数据块的长度增加到m+r 位,对应的二进制多项式为) (x t xr 。
(2) 用生成多项式g(x)去除) (x t xr ,求得余数为阶数为r-1 的二进制多项式y(x)。此二进
制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC 校验码。
(3) 用) (x t xr 以模2 的方式减去y(x),得到二进制多项式) ( ' x t xr 。) ( ' x t xr 就是包含了CRC
校验码的待发送字符串。
从CRC 的编码规则可以看出,CRC 编码实际上是将代发送的m 位二进制多项式t(x)转换成
了可以被g(x)除尽的m+r 位二进制多项式) ( ' x t xr ,所以解码时可以用接受到的数据去除g(x),
如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多
CRC 的硬件解码电路就是按这种方式进行检错的。同时) ( ' x t xr 可以看做是由t(x)和CRC 校验码
的组合,所以解码时将接收到的二进制数据去掉尾部的r 位数据,得到的就是原始数据。
为了更清楚的了解CRC 校验码的编码过程,下面用一个简单的例子来说明CRC 校验码的编码
过程。由于CRC-32、CRC-16、CCITT 和CRC-4 的编码过程基本一致,只有位数和生成多项式不
一样。为了叙述简单,用一个CRC-4 编码的例子来说明CRC 的编码过程。
设待发送的数据t(x)为12 位的二进制数据100100011100;CRC-4 的生成多项式为g(x)
= 1 4 + + x x ,阶数r 为4,即10011。首先在t(x)的末尾添加4 个0 构成) ( 4 x t x ,数据块就成了
1001000111000000。然后用g(x)去除) ( 4 x t x ,不用管商是多少,只需要求得余数y(x)。下表为
给出了除法过程。
从上面表中可以看出,CRC 编码实际上是一个循环移位的模2 运算。对CRC-4,我们假设有
除数次数
被除数/ g(x)/结果
余数
1 001000111000000
1 0011
0
0 000100111000000
100111000000
1 00111000000
1 0011
1
0 00001000000
1000000
1 000000
1 0011
2
0 001100
1100

C#实现CRC循环冗余校验 C#语言实现CRC循环冗余校验 有源码程序 立即下载

相关推荐

计算机网络实验报告(循环冗余码的生成和验证程序)

编写一个循环冗余码的生成和验证程序(要求:模拟发送信息,噪声加入,检测验证,信息重发的过程) 1.计算校验和算法 假设一帧有m位,它对应于多项式M(x) (1)假设G(x)的阶为r。在帧的低位端加上r个0位,所以该帧现在包含m+r位,对应多项式为xrM(x)。 (2)利用模2除法,用对应于G(x)的位串去除对应于xrM(x)的位串。 (3)利用模2减法,从对应于xrM(x)的位串中减去余数(总是小于等于r位)。结果就是将被传输的带校验和的帧。它的多项式不妨设为T(x)。 2.检验算法: 接收方在收到了带校验和的帧之后,用G(x)来除它, (1)如果余数为0,则接收方收到的帧是正确的。 (2)如果余数不为0,则接收方收到的帧是错误的。

CRC循环冗余校验 (Cyclic Redundancy Check) 原理/电路实现/Verilog实现

多项式表示:把所有二进制位字符串视为变量 (x) 的多项式方程;多项式除法:使用“多项式除法” (模2算术运算) 进行校验;在检测单bit和多bit错误时极其可靠;可以简单地通过反馈移位寄存器和XOR门高效地实现。

weixin_43664101的博客 9299

CRC循环冗余校验算法C语言实现

CRC循环冗余校验算法C语言实现 CRC循环冗余校验算法C语言实现

循环冗余校验(CRC)和FPGA实现

循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用模二除法及余数的原理来作错误侦测的。在计算机网络通信中运用CRC校验时相对于其他校验方法就有一定的优势。CRC可以高比例的纠正信息传输过程中的错误,可以在极短的时间内完成数据校验码的计算,并迅速完成纠错过程,通过数据包自动重发的方式使得计算机的通信速度大幅提高,对通信效率和安全提供了保障。

m0_52889836的博客 2022

攀藤PMS系列传感器STM32驱动开发与数据解析实战

本文详细介绍了攀藤PMS系列传感器与STM32微控制器的驱动开发与数据解析实战,涵盖硬件连接、数据协议解析、驱动源码编写及数据处理优化。重点解析了传感器数据帧结构,提供了完整的STM32驱动实现代码,并分享了实际应用中的问题排查与性能优化经验,帮助开发者快速实现高精度颗粒物浓度检测。

milk8的博客 348

STM32N6570-DK ISP调试

将下载线接入STLINK V3EC接口,将BOOT1拨码拨至右边,即将其置为H,上电或已经上电的按复位,打开STM32CubeProgrammer,设置start address:0x70000000。板子消耗电流较大,即使缩短数据线接了USB供电依然不能正常点亮显示屏,最终通过板上CN2端子加了外部5V供电,仍然需要560mA的外部电流。3.烧录bin文件:STM32N6_ISP_IQTune_App_revC01-v1.1.0-trusted.bin。

liu的博客 1065

CRC(循环冗余校验)原理及Verilog代码

CRC(循环冗余校验)是一种常用的错误检测码,广泛应用于数据通信和存储系统中,用于检测数据传输过程中是否发生了错误。CRC校验通过在数据流中附加校验位(余数)的方式实现错误检测,具有高效性和可靠性。下面是CRC校验的详细原理和步骤:①生成多项式:CRC校验使用一个固定的生成多项式来进行计算。生成多项式通常表示为一个二进制数,如1011。②数据处理:在数据发送端,需要将待发送的数据(比特流)与一定数量的零比特序列相连,以确保数据位数能够容纳生成多项式的位数。

争取早日成为硅农 5万+

SAP数据导入避坑指南:财务期初上线实操全流程(含常见错误排查)

本文详细解析了SAP财务期初数据导入的全流程,包括数据准备、主数据标准化、余额与未清项导入等关键步骤,并提供了常见错误排查和解决方案。特别强调了过渡科目和存货价值的处理技巧,帮助企业在SAP系统上线时避免数据导入陷阱,确保财务数据的准确性和系统平稳运行。

weixin_30832143的博客 396

软件工程-面向对象建模分析

面向对象分析 关注技术领域中的实体,并将其建模为对象 面向对象分析技术主要基于分类,泛化,聚合关系在对象集合之间建立结构 对象的行为是执行预定的动作(服务/活动) 对象通过执行动作来完成状态变迁 Peter Code的面向对象方法 "对象"是问题领域中真实存在的实体,有定义清晰的边界 对象中封装有属性和行为 面向对象分析的五个核心概念:对象,属性,结构,服务和主题 一般-特殊结构 整体-部分结构 面向对象的分析方法学 识别对象和类(类是对象的抽象定义) 识别类之间的关系,建立由继承和组合关系组成的

weixin_46570942的博客 2298

ConvNeXt 改进 :ConvNeXt添加GnConv递归门控卷积,二次创新CNBlock结构 ,独家首发

视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnConv),通过门控卷积和递归设计执行高阶空间交互。该新操作具有高度的灵活性和可定制性,兼容各种卷积变体,并将自注意力中的二阶交互扩展到任意阶数,而不会引入显著的额外计算。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 235

RK3588芯片CAN总线调试秘籍:SocketCAN与错误帧攻略

RK3588芯片在嵌入式领域凭借8nm工艺和强大性能成为核心控制器。本文详细介绍了其CAN总线配置流程,包括硬件连接、内核驱动配置及SocketCAN命令操作,并深入解析了CAN通信中的错误帧机制及分析方法。通过智能工厂案例,展示了从问题定位到解决方案的全过程,强调了稳定通信对工业应用的重要性。文章为RK3588的CAN总线应用提供了实用技术参考,并对未来智能诊断技术在该领域的应用进行了展望。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 516

循环冗余校验+CRC的算法分析和程序实现

循环冗余校验 CRC的算法分析和程序实现 摘要   通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控制。本文详细介绍了循环冗余校验CRC(Cyclic Red

2983

Android Jetpack 最全面试题及参考答案

要使用 WorkManager 定义一个异步任务,以下是详细步骤。首先,需要创建一个继承自 Worker 类的自定义类,这个类代表了要执行的具体任务逻辑。// 在这里编写具体的任务逻辑,比如从网络下载文件try {在上述代码中,doWork方法就是任务的核心执行逻辑所在,这里模拟了从给定的 URL 下载文件到本地的操作,若下载成功返回,若出现异常则返回。然后,在需要调度任务的地方,比如在某个 Activity 或者 Fragment 中,通过构建 WorkRequest 来安排任务执行。

大模型大数据攻城狮的专栏 1895

循环冗余校验 CRC的算法分析和程序实现

循环冗余校验 CRC的算法分析和程序实现西南交通大学计算机与通信工程学院  刘东 摘要   通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控制。本文详细介绍了循环冗余校验CRC(Cyclic Redundancy Chec

1131

手把手教你学Simulink——基于Simulink的储能PCS(功率转换系统)离网V/f控制仿真示例

本文带你从零开始,在Simulink中硬核还原了一套完整的100kW 储能PCS离网V/f控制系统。通过引入:✅无PLL的自主角度生成机制(实现真正的“构网”能力)✅电压外环与电流内环的双闭环解耦架构(兼顾稳态精度与动态响应)✅黑启动软充电与有源阻尼等工程化手段(确保系统平滑建压与抗谐振)核心收获透彻理解了储能系统在无大电网支撑下的自主运行机理。掌握了从“跟网(Grid-Following)”向“构网(Grid-Forming)”跨越的控制算法核心差异。

MHD0815的博客 77

Pytorch入门实战(7):基于BERT实现文本隐喻二分类(Kaggle入门题目)

Bert入门实战,文本二分类问题

iioSnail的博客 4055

循环冗余校验CRC的算法分析和程序实现

循环冗余校验CRC的算法分析和程序实现 作者:刘东 概述 在数字通信系统中可靠与快速往往是一对矛盾。若要求快速,则必然使得每个数据码元所占地时间缩短、波形变窄、能量减少,从而在受到干扰后产生错误地可能性增加,传送信息地可靠性下降。若是要求可靠,则使得传送消息地速率变慢。因此,如何合理地解决可靠性也速度这一对矛盾,是正确设计一个通信系统地关键问题之一。为保证传输过程的正确性,需要对通信过程进行...

weixin_30294021的博客 361

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[转贴]循环冗余校验 CRC的算法分析和程序实现

循环冗余校验 CRC的算法分析和程序实现 西南交通大学计算机与通信工程学院  刘东 摘要   通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控制。本文详细介绍了循环冗余校验CRC(Cyclic Redundancy Check)的差错控制原理及其算法实现。   关键

1943

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

c语言用CRC校验FCS序列,循环冗余校验_CRC的算法分析和程序实现.doc

循环冗余校验 CRC的算法分析和程序实现CRC实现(VC 编程)循环冗余校验 CRC的算法分析和程序实现- -Tag: CRC 算法分析 程序实现 c循环冗余校验 CRC的算法分析和程序实现西南交通大学计算机与通信工程学院 刘东摘要 通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控...

weixin_29503627的博客 532

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

crc介绍之一

    循环冗余码校验英文名称为Cyclical   Redundancy   Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error   Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。根据应用环境与习惯的不同,CRC又可分为以下几种标准:

yc_8301的专栏 2047

crc

  具体可以看:http://bbs.chinaunix.net/viewthread.php?tid=154696http://article.pchome.net/content-84503.htmlhttp://www.dzkf.cn/html/qianrushixitong/2006/0905/529.html 校验码辅导讲座老顽童(原创)二进制数据经过传送、存取等环节

idoit0204的专栏 1127
上一篇: 处理器外频
下一篇: Delphi函数参考手册
peanut_pro
博客等级 码龄21年 7粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值