笔者在阅读华中科技大学谭志虎老师主编的《计算机组成原理(微课版)》教材进行复习时,产生了一个疑问,并针对性地进行了一些思考。欢迎广大复习到这里同样有问题的同学(寒假开学接着考试实在有点汗,谁愿意寒假学习啊)&&CSDN博友针对我的疑问或想法进行批评讨论。

在编写本篇文章前,我参考了博主黎猫大侠的博客,链接放在下面。一道题带你搞懂CRC循环冗余校验是如何纠错的, 体会CRC的奇妙之处, 献给充满好奇心的你._黎猫大侠的博客-CSDN博客_crc纠错

这位博主的文章给我启发很大,感谢大虾0w0。但我在读完后仍然有一些问题。下面大概说一下我的想法:

作为循环冗余校验码,CRC的检错性能是大家有目共睹的。只要我们拿着带CRC码的信息去模2除以生成多项式,得到的余数不为0,我们便晓得是有错误出现了。

如果想要更加具体一点,知道哪位/哪几位错了,我们可以提前做一些计算工作,然后去查生成多项式对应的余数表格(类似于下图这种,实际应用中应该也能提前算出来)。如果数据信息比较短、选择的生成多项式比较好,比如(7,3)码的一些生成多项式,我们就可以利用提前搞出来的表格,顺利区分一位错和两位错,并在没有3位错的前提下检查出两位错和纠正一位错。

但是:对于CRC一位纠错性能的介绍,课本上语焉不详,只是说“可以利用CRC的编码特性设计组合逻辑电路来进行纠错”(“编码特性”是CRC的循环特性,也即:将余数左移一位除以生成多项式,得到下一个余数,再左移做除法得余数,重复这般操作,最后余数会循环变回自己。这一点在前文提及的博客里说得很详细,如果不知道可以跳转先去看看);网络上我搜集了一些资料,也只有前文博客在承认具有纠错功能的基础上讲述得比较详细(或许是我的信息检索能力比较差吧)。不过,基于前文博客的内容,我产生了一个疑惑,这里放一段博客里的话:

做个类比。假若我面对的是一个约定好的、稍微有些冷门的生成多项式,计算机咋就知道第一位出错的余数是啥(即上面情况中的101)?如果说,我已经在计算机里存储好了(或者手边就有)前文说的那种余数表,那我大可不必大费周章再来搞什么循环计算,直接查一下对应过去就完事了;如果我没有存这种余数表,那我还啥也不知道呢,(包括第一位出错的余数),我怎么就能晓得第一位出错的余数究竟是循环过程中的哪个呢?

(当然,现在看来思考这个问题的意义好像不大,因为没必要用冷门的生成多项式去实现一些功能,且CRC好像主要还是用来检错而不是纠错的)(之所以想这些才不是因为有一道作业题我写的答案很逆天,被分数gank了,尝试给自己找个台阶下呢QAQ)

我对这个问题的考虑是这样的:

先对一些定义或约定进行说明:

将原信息用一个信息多项式M(x)表示,其中Ci序列就是原来的数据信息,可以取0/1。

将M(x)左移r位,表示成,这样就能在右侧空出r位放产生的CRC校验码。

按照 模2运算规则 除以 生成多项式G(x) ,得到的余数R(x)就是待填入的CRC校验码。

(注意:模2运算规则下加运算和减运算效果相同)

也就是说,最后得到的含CRC校验码的信息应该是: M(1)|R(1)  (“|”表示把他俩连接起来)

我们有等式: (重要)

                    ①

说一个猜想:这个例子中第一位错的时候余数是101;k=4,r=3,G(x)=1011。那么有没有这样一种可能,第一位错的余数与k、r、G(x)的取值直接相关,所以我们可以直接算出当前CRC约定下的第一位错的余数而不用拐着弯的去算余数表,并为后续利用循环特性完成的计算提供数据基础?(后面的证明如果有反例或者逻辑错误请速速联系我,主打一个光速耻辱删帖好吧)

道理还是比较简单的,就是写起来和表达起来有点繁琐。对于只有第一位出错而言,他只影响最高的信息位。记影响前M(x)的定义与前文相同,影响后M'(x)的定义为:

显然,的值 可以且仅可以 为1/0和0/1两种组合情况。而在模2运算下,加运算和减运算等效,因此我们有:      ②

由等式①和等式②,我们作出如下叙述:(键盘敲太麻烦,写起来 2^{***} 跟 x^{***} 又写得挺混乱的,但意思应该能到吧,求谅解T T) (“?”就指代例子中我们在此处研究的“101”)

总结一下:

设第一位出错时的余数为'?',那么它的计算方法是: 

这样,我们在拿到CRC生成的规则后,就可以找到一种行之有效的方法迅速推理出第一位出错时的余数是啥,而且是当前约定好的CRC生成规则(k、r、G(x)的取值固定)下“放之四海而皆准”的余数。一切问题也就迎刃而解。剩下的,如果想搞余数表,整个水落石出、明明白白,那就放手去做吧,搞余数表或者查现成的表;如果想好好体验一把“CRC循环特性”(雾),就可以祭出黎猫大侠的方法,体验就完事了。(虽然我感觉这种体验其实并不好,打表才是yyds)

因为我还没学完(平时没听课,悲),所以上面的内容仅代表个人观点。希望上文对您有帮助!如果有纰漏疏忽的地方,敬请批评指正!如果有没讲明白的地方,欢迎评论留言!如果马上就要组原考试的话,祝你(也祝我)考个好成绩!另外,复习考试不要像我这个joker一样,对着一个不是考点的东西看起来没完,快要自学不完了(又悲)...

2023-5-6:来还愿,组原考试没有寄穿,反而成了一众科目里面发挥还不戳的一门。
祝大家学习组原的道路也一帆风顺捏!QWQ(当然不顺也没事,最后弄懂了就行=w=)

计算机组成原理:循环冗余校验码CRC具备“一位纠错”功能的思考与探索相关推荐

  1. 第二章 数据的表示和运算 2.1.6 循环冗余校验码/CRC码 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.6 循环冗余校验码/CRC码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 循环冗余校验码/ ...

  2. 计算机底层:循环冗余校验码CRC

    计算机底层:循环冗余校验码CRC 信息位+校验位组成循环冗余校验码,也称CRC码. 循环冗余校验码的思想:         通过将信息进行除以某个规定的数,这个数是提前约定好的,并且两边都知道的数. ...

  3. 循环冗余校验码CRC,求解步骤

    循环冗余校验码CRC,是软考-计算机组成原理 中一种重要的编码. 下面只是简要描述求解CRC码的解题步骤,面向有一定理论基础的朋友. 直接看例题. 例.信息位: 10100110   生成多项式: 解 ...

  4. 循环冗余校验码CRC原理和实例

    今天同事问了一个CRC(循环冗余校验码)的问题,好奇心之下学习了一下. 首先说它的原理,百度百科上也有,我就简单说一下,它其实就是采用多项式编码的方法,对于要发送的信息码R,发送方和接收方约定好多项式 ...

  5. 计算机系统基础知识——循环冗余校验码(CRC)

    前言:循环冗余校验码(cyclie redundancy check)简称CRC(循环码),是一种能力相当强的检错.纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位 ...

  6. java生成冗余校验码_对循环冗余校验码CRC的理解

    模2加法 1+1=0, 0+1=1, 1+0=1, 0+0=0 模2减法 1-1=0, 0-1=1, 1-0=1, 0-0=0 相当于二进制中的逻辑异或运算.也就是比较后两者对应位相同则结果为&quo ...

  7. 【校验码 - 循环冗余校验码CRC】

    水善利万物而不争,处众人之所恶,故几于道

  8. 计算机组成原理:原码、补码一位乘,Booth算法

    原码一位乘: 学习传送门:原码一位乘 主要方法:1判断,2加法,3右移,循环结束 其他: 原码逻辑右移,原码高位补零 补码算数移位 补码一位乘: 学习传送门:补码一位乘 主要思想: 1判断 2加法 3 ...

  9. 计算机组成原理学习笔记:循环冗余校验码

    循环冗余校验码 CRC 码 循环冗余校验码 (cyclic redundancy Check, CRC) 十进制除法 从熟悉的十进制出发,假设现在你要给另一个人传送882这样的一个10进制数据,为了防 ...

最新文章

  1. 数据库中存储与读取文件
  2. 代码中配置log4j (同时输出不同级别的log到不同终端)
  3. zoj3988 二分图匹配
  4. ntu ERIC 课程笔记
  5. 直流(DC)跟交流射频(RF)的电场构成
  6. 操作系统磁盘空闲管理之位示图法
  7. 番石榴的ListenableFuture
  8. umi config.js整体defineConfig配置
  9. BitmapEffect位图效果是简单的像素处理操作。它可以呈现下面几种特殊效果。
  10. 对称机密算法与非对称机密算法
  11. 三星Galaxy S21 Ultra相机再升级:1.08亿主摄+全新传感器夜景更强
  12. 面对新型肺炎疫情,AI 能做什么?
  13. 桌面云 服务器 价格,细数目前市场上桌面云的收费模式
  14. chrome浏览器主页被劫持为hao123
  15. 从全球顶级数据库大会 SIGMOD 看数据库发展趋势
  16. 模电学习心得(转载)_史蒂文森sun_新浪博客
  17. Geospatial-地理空间
  18. C语言:计算油费.2021-07-13
  19. 工具 · 移动端调试工具:weinre
  20. 使用for循环遍历1900-2090年的闰年有哪些

热门文章

  1. ESP8266 下 OTA 更新 Firmware 和FileSystem
  2. 微信小程序 录音之获取、保存、读取
  3. 学计算机的人c语言修仙评价,评《C语言修仙》 非渊静者 评《C语言修仙》 时间:2019-05-04 11:55:19...
  4. pmp各种比较容易混淆的图
  5. 确定十二星座的日期范围
  6. 超爆笑:《无极》漫画版
  7. 片上偏差模式OCV,AOCV,SOCV
  8. 利用存儲過程進行簡繁體轉換
  9. 设置表头QHeaderView
  10. 计算机毕业设计springboot基于疫情背景下的新型点餐送餐系统bpe1s源码+系统+程序+lw文档+部署