【考研·计算机组成原理】校验码 小结

news2024/11/20 23:32:10

本篇目录

前言

一、校验码

1.校验码

2.码距

3.检错与纠错

二、奇偶校验码

三、海明码

1.海明校验码的原理

2.校验位的计算方法

四、CRC码(循环冗余校验)

总结


前言

跟着王道的考研复习指导,学习了三种校验码,做一个小结。


一、校验码

1.校验码

信息传输过程可能出现一些错误,于是发送端与接收端就会约定一种规则,发送端根据这种规则以及要发送的有效信息,来计算得出几位校验码。发送端在发送时,通过在有效信息位外再附加这些校验码,使接收端能够通过这些校验码得知接收的数据是否有误,甚至能判断错误的数据位置。这就是校验码的作用。

2.码距

一种信息编码,它的编码方式决定了任意两个码字之间的最小距离,即码距。如果一种编码,它的合法码字之间的距离是1,这意味着假如有一个合法码字在传输过程中有一位出错了,它会变成另外一个合法码字。由于变化的结果仍然是合法的码字,接收端就无法判断接收的码字是否是正确的。比如发送端与接收端约定使用三位来表示数字0-7,这样的编码的码距就是1,即便传输过程中有一位出错,接收端也无法得知传输有错,因为接收到的仍然是合法的码字。但是假如发送端与接收端约定,使用001、010、100来表示数字1 、2、4,(这种编码的码距为3)那么接收端如果收到了011这样的结果,就知道这是一个不合法的码字,接收端就能知道其中一定出错了。

要计算两个合法码字之间的码距,就将这两个合法码字进行异或运算,看得到的结果中有几个1,码距就是几。或者也可以理解为比较这两个合法码字,看有几位翻转了,码距就是几。

3.检错与纠错

如果一种编码的码距为1,那么就无法进行校验。因此想要有校验能力,一种编码的码距至少要是2。码距越大,检错、纠错(指出出错的位置)能力越强。L-1=D+C,且D≥C,L即最小码距,D即检错能力,C即纠错能力。


二、奇偶校验码

奇偶校验码是在有效信息位前边加上一位校验码,码距为2,可以检测一位错误(或奇数位错误),不能确定出错的位置。

奇校验码:整个校验码(校验位和有效信息位)中“1”的个数为奇数;

偶校验码:整个校验码(校验位和有效信息位)中“1”的个数为偶数;

收发端约定采用的是奇校验还是偶校验,然后接收端对接收的数据进行校验。比如,1011是奇校验码,0011是偶校验码。


三、海明码

海明码的实质还是奇偶校验码,只不过它利用多重奇偶校验,就不仅可以检错,还能指出一位错误的位置。因为海明码能纠错1位,那么至少就能检错1位,因此码距至少为3 。

1.海明校验码的原理

如果给整个校验码设置角标,从1开始,从最后侧开始,那么海明码的校验位设置在角标为2^n (n从0开始,到哪儿结束这取决于有效信息的长度)的位置上,其它位置就是有效信息位。也就是说,校验位是穿插在有效信息位中的。每个有效信息位的角标,总是可以表示成某些校验位的角标之和,比如角标6就可以表示成(2+4),角标7可以表示成(1+2+4),这是使用海明校验码的基础。由此可以知道,有效信息位数n 与校验位的位数k 存在这样的关系:整个校验码的长度(n+k) ≤ 2^k-1 即k个校验位能表示的最大角标。

2.校验位的计算方法

1.根据上述公式,依据有效信息的长度,确定校验位的个数。比如4位有效信息需要3位校验位。

2.用符号表示出整个校验码。

 角标 7  6  5  4  3  2  1 
  值 D4 D3 D2 P3 D1 P2 P1
校验位         -     -  -

3.列表法表示出每个有效信息位的角标由哪几位校验位的角标组成

P1(角标1)P2(角标2)P3(角标4)
H1角标312
H2角标514
H3角标624
H4角标7124

4.计算每一个校验位的值,计算方法就是将表中对应的有效信息位的值进行异或。比如上表中P1校验位的值 = H1⊕H2⊕H4。 这样校验码就完成了。例如,1010对应的海明码为1010010 。

5.接收端根据收到的有效信息位,以同样的方法计算出每一个校验位,如果与收到的校验位一致,那么收到的信息正确。若不一致,则可以根据不一致的校验位来确定是哪一位出错了。


四、CRC码(循环冗余校验)

CRC码利用的是除法。

任何一个二进制编码可以用一个系数仅为1或0的多项式来表示,多项式的最高次用R表示,那么这个二进制编码就有R+1位。收发端约定一个多项式作为规则。如果让这个二进制编码作为除数,然后用有效信息作为被除数,去做除法,那么余数一定可以用R位二进制表示(最多有R位)。由此,就让有效信息位先左移R位,即在有效信息位的右边先填补R个零(作为校验位) 。然后以左移之后的有效信息作为被除数,与多项式对应的二进制编码作为除数,进行除法运算,最终能够得到一个R位的余数。这个余数就是校验位。这样,整个校验码就应该能够被除数所整除了。发出端就将这个校验码发出。

接收端只要检查一下,校验码是否能够被约定的多项式所对应的二进制编码(也就是除数)所整除,就可以了。如果能,那接收的信息正确。如果不能,那么可以根据余数来判断发生错误的位置。

做除法运算时,从被除数的最左边的R位开始,每一次异或运算后,就向后取一位,每次都是R位参与运算。运算时,若被除数最高位为1,则商为1;若被除数最高位为0,则商为0 。直到被除数的位数用完,算出R位余数。


总结

本文总结了三种常见的校验码(奇偶校验码、海明码、循环冗余校验(CRC)码)。

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

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

相关文章

MATLAB应用1——MATLAB傅里叶变换函数封装

主程序: % eximportdata(data3.txt); tx regexp(ex{1}, \s, split);%按照空格分隔字符串,成为单个cell yxstr2double(tx); plot(yx); wwyx(2500:9000)-2055; Fyz_fft(ww,1000); 傅里叶封装函数: function Fyz_fft(y,Fs) % Demon: % Fs 128; …

web前端大作业:诗人文化网页主题网站【唐代诗人】纯HTML+CSS制作

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

五分钟学会各种环形进度条

本文将会通过svg实现圆形进度条和矩形进度条以及三角形进度条&#xff0c;先放效果图 圆环进度条 首先我们需要两个画两个圆&#xff0c;一个是底色圆&#xff0c;一个是进度圆。 <svg width"200" height"200"><circle fill"none" cx…

Web 3.0顶级干货教学:区块链概述

Web 3.0顶级干货教学&#x1f525;&#xff1a;区块链定义&#xff1f; 尊重原创&#xff0c;本人致力于打造高质量博客&#xff0c;编写不易 &#xff0c;帮忙点赞关注一下~转载小伙伴请注明出处&#xff01;谢谢 区块链是什么&#xff1f; 最早使用历史 1991年采用 时间戳 追…

【大数据入门核心技术-Spark】(一)Spark介绍

​目录 ​一、Spark概述 二、为什么要学习Spark 三、Spark 四大特性 1、速度快 2、易用性 3、通用性 4、兼容性 一、Spark概述 Apache Spark™ is a unified analytics engine for large-scale data processing. spark是基于内存计算的大数据处理框架&#xff0c;由于基…

葡聚糖/聚己内酯两亲嵌段聚合物(Dextran-PCL)|5-氟尿嘧啶-右旋糖酐偶联物(DEX-5-Fu)

葡聚糖/聚己内酯两亲嵌段聚合物(Dextran-PCL)|5-氟尿嘧啶-右旋糖酐偶联物(DEX-5-Fu) 中文名称&#xff1a;葡聚糖/聚己内酯两亲嵌段聚合物 产品描述&#xff1a; 一种葡聚糖/聚己内酯两亲嵌段聚合物,它是由胺端基葡聚糖和醛端基聚己内酯通过偶联反应生成,其中葡聚糖链段的数均…

SSM框架学习记录-Spring_day03

1.AOP简介 代码参考Spring_17_aop_demo 什么是AOP&#xff1f; AOP(Aspect Oriented Programming)即面向切面编程&#xff0c;一种编程范式&#xff0c;指导开发者如何组织程序结构 AOP作用 在BookDaoImpl.java中&#xff0c;执行save方法显然可以计算程序执行时间&#xff0c;…

Redis框架(三):大众点评项目 基于Session的短信登录

大众点评项目 基于Session的短信登录需求&#xff1a;基于Session实现短信验证登录基于Session的短信登录发送手机验证码实现登录 &#xff08;注意MyBatisP的接口使用&#xff09;新的问题SpringCloud章节复习已经过去&#xff0c;新的章节Redis开始了&#xff0c;这个章节中将…

C#语言实例源码系列-实现无损压缩图片

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

微电网两阶段鲁棒优化问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Redis之相关介绍、远程docker部署以及相关shell命令

Redis相关shell命令一、概述1、介绍2、作用3、特性4、官方网址二、远程服务Docker上Redis相关测试及命令1、Redis安装及挂载1.1 查找所有关于Redis1.2 拉取最高版本的Redis1.3 通过xftp连接到远程服务器1.4 挂载1.5 开启远程服务器的端口1.6 修改配置文件2、开始使用Redis2.1 开…

autoconf-archive源码安装

0. 源码地址 autoconf-archive源码下载地址经由https://savannah.gnu.org搜索"autoconf-archive"到GNU Autoconf Archive - Summary [Savannah] 再在其中点击上图中箭头位置&#xff0c;转到GitHub - autoconf-archive/autoconf-archive: A mirror of the GNU Autoc…

数据分析软件-FineReport内置SQl提交

1. 概述 1.1 版本 报表服务器版本 功能变动 11.0.2 填报配置表时支持从数据库中模糊搜索表&#xff0c;详情见 2.2 节。 1.3 功能介绍 设计好填报表格&#xff0c;添加填报控件之后&#xff0c;如下图所示&#xff1a; 需要将填报数据的单元格与数据库表字段进行绑定&#…

【微服务】2、一篇文章详解 Ribbon 负载均衡

Ribbon 负载均衡一、负载均衡原理&#xff08;debug 源码&#xff09;(1) 基本介绍(2) 打断点① LoadBalancerInterceptor.java - intercept()② RibbonLoadBalancerClient.java - execute()③ RibbonLoadBalancerClient.java - execute()④ RibbonLoadBalancerClient.java - g…

【STM32】详解RTC实时时钟的概念和配置示例代码

一、什么是RTC RTC(Real-time Clock)&#xff1a;实时时钟&#xff0c;本质上是一个支持BCD编码的定时器/计数器。主电源断电后能够由电池供电&#xff0c;使其时钟跳转依然正常。 二、STM32F4芯片内的RTC功能 ①日历时钟&#xff08;时分秒、年月日、星期&#xff09; ②两个闹…

六、排序算法介绍3

4、希尔排序 4.1 简单插入排序问题 简单的插入排序可能存在的问题&#xff0c;数组 arr { 2, 3, 4, 5, 6, 1 } 这时需要插入的数 1(最小)&#xff0c;简单插入排序的过程如下&#xff1a; {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5,6} {1,2,3,4,…

CCIA技术沙龙 | “数据安全风险评估及安全服务实践” 沙龙成功举办

2022年12月8日&#xff0c;由中国网络安全产业联盟&#xff08;CCIA&#xff09;主办、CCIA数据安全工作委员会支持、杭州美创科技股份有限公司承办的“数据安全风险评估及数据安全服务实践”主题技术沙龙成功举办。 当前&#xff0c;我国数字经济快速发展、数字化转型持续深入…

Java对象深拷贝详解(List深拷贝)

1、Java中拷贝的概念 在Java语言中&#xff0c;拷贝一个对象时&#xff0c;有浅拷贝与深拷贝两种 浅拷贝&#xff1a;只拷贝源对象的地址&#xff0c;所以新对象与老对象共用一个地址&#xff0c;当该地址变化时&#xff0c;两个对象也会随之改变。 深拷贝&#xff1a;拷贝对…

一起学习用Verilog在FPGA上实现CNN----(一)总体概述

1 总体概述 为避免闭门造车&#xff0c;找一个不错的开源项目&#xff0c;学习在FPGA上实现CNN&#xff0c;为后续的开发奠定基础 1.1 项目链接 大佬的开源项目链接&#xff1a; CNN-FPGA 链接跳转界面如下&#xff1a; 大佬的该项目已经发表论文&#xff0c;而且开源工程结…

Qt5.6.1移植海思Hi3521d(一)

系列文章目录 文章目录系列文章目录前言一、开发环境二、搭建环境1.准备2.海思SDK和交叉编译器安装2.测试交叉编译器一下3.安装tftp总结前言 上半年做个一个Qt移植海思芯片的程序&#xff0c;感觉差不多快忘记了&#xff0c;赶紧记录一下 一、开发环境 系统&#xff1a;Ubunt…