香农在其著名的论文《A mathematical theory of communication》中提出了信道编码定理,在传输速率小于信道容量的情况下,可以通过编码非常高效的提高传输的可靠性。我们现在所说的信道编码主要指的是纠错编码,比如卷积码,汉明码,Turbo码和LPDC码等等。本文主要研究在这些编码技术中比较常用的一种检验技术,即CRC。

CRC技术也是通过增加信道的冗余来提高传输的可靠性,不但能够起到校验的作用同时也具备一定的纠错能力。CRC算法的实现是基于循环码的,其数学原理在于通过发射端信息做一个多项式除法,得到余数作为检验位,然后将其加入原始信息的后面。在接收端提取发射端的数据位然后做相同的求余运算,再将计算出的校验位和发送数据带有的检验位相对比,若相同则说明数据是正确的,若不同说明数据是错误的。下图展示了一个简单的CRC结构:

前面说了CRC的原理是做除法取余数,这里就涉及了一个除法项,我们称之为生成多项式(Generator Polynomial),这个生成多项式是发送机和接收机两端约定好的一个二进制序列,在整个传输过程中保持不变。这个生成多项式同时满足如下几个条件:

  1. 最高位和最低为为1
  2. 当传输信息任何1位发生错误时,被其除后余数不为0
  3. 不同位数发生错误时,余数不同。
  4. 对于余数做除法,应使余数循环。

这里我们以一个简单的CRC-4为例,来解释生成多项式的作用和CRC校验的原理:

CRC-4的常用的一个生成多项式为:

即10011,其求余过程如下图所示:

最后的发送数据就为:

其实现的Matlab代码如下:

InputBits 

最终输出的结果为:

和上面手算的相同。


软件仿真结束后我们就可以开始使用硬件进行实现了,我个人实现的思路是通过状态机来实现上述matlab代码中的循环运算,首先设定一个数据位宽长度计数器width cont,每当进来一次有效的数据,判断其最高位是否为1,若否则左移一位width cont减1,找到其最高位为1的数据后进入下一个状态进行xor运算,在xor状态中将数据和poly 序列进行xor运算,随后在进入刚才的判断状态,找到最高位为1的位置,直到width cont < poly序列的长度时结束计算,然后保存余数,跳入等待下一个有效数据计算的状态。正当我兴致冲冲打算去码代码的时候,发现了一个神奇的网站可以直接生成CRC校验的代码。。。

CRC Generation Tool​www.easics.com

只要选择好poly多项式和数据位宽就可以直接生成verilog代码,十分方便:

生成代码如下:

// polynomial: x^4 + x^1 + 1

这是个函数形式的代码,并且通过并行的形式直接可以计算出CRC的几个余数,效率简洁高效,我暂时还没看懂这个代码是什么原理,懂得大佬可以指点一下。

随后在发射端只要进行一个简单的CRC编码:

always 

接收端校验使用的方法为:

always 

具体的仿真结果这里就没有做了,等有空再补上~

参考文献

[1] 王栋. 基于CRC的多比特纠错算法研究与实现[D].西安电子科技大学,2013.

crc 校验错误_信道编码之循环冗余校验(CRC)相关推荐

  1. crc 校验错误_资深工程师:图说CRC原理应用及STM32硬件CRC外设

    在嵌入式产品应用中,常常需要应对系统数据在存储或者传输过程中的完整性问题.所谓完整性是指数据在其生命周期中的准确性和一致性.这些数据可能存储在EEPROM/FLASH里,或者基于通信协议进行传输,它们 ...

  2. 7z解压crc错误_百度网盘压缩下载文件的CRC校验错误的解决方法

    转载自:http://blog.sina.com.cn/s/blog_610787990102xcnv.html 百度网盘压缩下载文件的CRC校验错误的解决方法 从百度网盘用打包压缩方式下载的文件在解 ...

  3. 百度网盘压缩下载文件的CRC校验错误的解决方法

    转载自:http://blog.sina.com.cn/s/blog_610787990102xcnv.html 百度网盘压缩下载文件的CRC校验错误的解决方法 从百度网盘用打包压缩方式下载的文件在解 ...

  4. 解决winrar解压出现crc校验错误的一个方法

    今天用winrar解压一个文件在最后老是出现错误,提示磁盘可能已满和crc校验错误. 一开始以为是下载的文件出错,于是乎又下了一次,问题依旧.后来又查,有网友说这可能是winrar的临时文件引起的.于 ...

  5. 2.1.5-3 循环冗余校验(CRC)码

    想必是雪乞春华 (҂◔∀◐҂)☆万圣节快乐♬☆◥(ฅº₩ºฅ)◤ 不给糖就捣蛋 ☆(●⁰౪⁰●)没钱(*^3^)/-☆ 中午我们要学习最后一种校验码叫做循环冗余校验码英文缩写叫CrC码,这给出了他的英 ...

  6. [2021.07.25更新]循环冗余校验(CRC)的MATLAB实现

    欢迎同步关注公众号[逆向通信猿] CRC校验(循环冗余校验) 在计算CRC校验的时候,发现一个网站如下 http://www.ip33.com/crc.html 于是,想自己动手实现该网站计算CRC校 ...

  7. 循环冗余校验-CRC

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

  8. modbus协议crc校验c语言代码,MODBUS通信协议中CRC校验码的计算(C/C++)实现

    错误检测的方法 错误校验(CRC)域占用两个字节,包含了一个16位的二进制值.CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较 ...

  9. crc校验c语言程序,C语言:CRC校验

    一.CRC码 CRC:Cylic Reduancy check译作汉语就是循环冗余校验码. 二.XOR XOR:逻辑运算符异或,不知道用符号怎么写,总之其运算法则是,不同为1,相同为0. 三.用XOR ...

  10. 常见的数据校验方式(奇偶,累加,CRC校验)

    校验就是在通讯数据的后面附加一些信息,通过这些附加的信息来判断接收到的数据是否和发送出去的数据相同,数据是否准确无误的发送到接收端.常见的校验方式有奇偶校验,累加校验,CRC校验(多项式校验). 奇偶 ...

最新文章

  1. Android APP全面屏适配技术要点
  2. 在linux下修改用户密码
  3. Mio C220破解问题
  4. java设计模式之UML③类图讲解多个类之间的关系
  5. mysql函数创建与使用_mysql function函数创建与应用方法
  6. 解决ffmpeg拉流转发频繁丢包问题max delay reached. need to consume packet
  7. 微型计算机选用要点,微型计算机原理以及应用考试_new要点分析.doc
  8. numpy 几个比较重要的链接
  9. BGP——community团体属性(讲解+配置)@
  10. Google的十个核心技术
  11. HTML美化页面(下)
  12. orcale和mysql跨库查询_ORACLE跨数据库查询的方法
  13. python 操作微信小程序数据库 实现批量修改
  14. php相亲段子,个个都是老司机!NPC段子手们经典语录
  15. SpringCloud五大神兽之Eureka服务注册(三)——Eureka的自我保护
  16. 房地产泡沫,经济发展的真正毒瘤
  17. 分享几个免费高清图片素材网站---已解决
  18. 地铁译:Spark for python developers ---Spark的数据戏法
  19. 对软件项目开发的一点思考
  20. IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决办法

热门文章

  1. 鸡易发呼吸道疾病的原因 鸡打喷嚏甩鼻用什么药
  2. Windows环境下安装OpenCV-Python 完美解决:找不到指定模块(dll缺失)
  3. 变压器励磁模型 Matlab/simulink 可用于模拟电压暂降等电能质量问题
  4. 《简约至上:交互式设计四策略》读书感悟
  5. Win10 显示无法连接到Internet,但是能上网浏览
  6. 荣耀什么时候更新鸿蒙,华为鸿蒙系统升级时间表:荣耀系列暂未在列
  7. Python安装教程-手把手教你安装
  8. python检测图像中的矩形_详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
  9. 基于Altium Designer 09制作LOGO的方法
  10. matlab如何求有约束最优化最大值,6.4.2有约束最优化问题的求解-东北大学数学系.ppt...