计算机系列之校验码

6、校验码

1、码距

码距:就单个编码 A: 00 而言,其码距为 1,因为其只需要改变一位就变成另一个编码。**在两个编码中,从 A 码到 B 码转换所需要改变的位数成为码距,**如 A: 00 要转换为 B: 11,码距为2。一般来说,码距越大,越利于纠错和检错。

2、奇偶校验码

奇偶校验码:在编码中**增加1位校验位来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为2。**例如:

奇校验:编码中,含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,是偶数个,则有误。

偶校验同理,只是编码中有偶数个1,由上述,奇偶校验只能检1位错,并且无法纠错。

比如:101110, 有 4 个 1

编码 A:101110,现在有 4 个 1

那么,编码 A 使用 奇校验,因为现在编码 A 有偶数个1,所以需要加个 1 =》 1011101,这样就是奇数个1了。

编码A使用偶校验,因为现在编码 A 有偶数个 1,所以只需要加个 0 =》 1011100,这样就还是偶数个1了。

####3、CRC 校验码

CRC只能检错,不能纠错。使用 CRC 编码,需要先约定一个生成多项式G(x)。生成多项式的最高位和最低位必须是1。假设原始信息由 m 位,则对应多项式 M(x)。生成校验码思想就是在原始信息位后追加若干个校验位,使得追加的信息能被G(x)整除。接收方接收到带校验位的信息,然后用 G(x)整除。余数为0,则没有错误,反之则发生错误。

例:假设原始信息串为 10110,CRC 的生成多项式为 G(x) = x4 + x + 1,求 CRC 校验码。

(1)**在原始信息位后面添0,假设生成多项式的阶为 r,则在原始信息位后添加 r 个 0,**本题中,G(x) 阶为 4,则在原始信息串后添加 4 个 0,得到的新串为 101100000,作为被除数。

(2)**由多项式得到除数,多项中x 的幂指数存在的位置1,不存在的位置0。**本题中,x的幂指数为0,1,4的变量都存在,而幂指数为2,3的不存在,因此得到串10011。

G(x) = x4 + x + 1 可以写成:G(x) = 1 * x4 + 0 * x3 + 0 * x2 + 1 * x1 + 1 * x0

所以:幂指数0,1,4 存在,2,3 不存在

即将 G(x) = 1 * x4 + 0 * x3 + 0 * x2 + 1 * x1 + 1 * x0 多项式中的 1、0 按序组合起来即可:10011

幂指数是数学中幂运算的一个组成部分,指的是乘方的次数。如 23中,2是底数,3是指数,意味着 3 个 2 相乘的结果是 8。

(3)生成CRC校验码,将前两步得出的被除数和除数进行模2除法运算(即不进位也不借位的除法运算)。除法过程如下图所示:模2运算,即异或运算,即 同 0 非 1,即两个数 位 相同 则为 0,不相同则为 1.

除数 10011

被除数 101100000

求余数:

在这里插入图片描述

得到余数 1111

注意:余数不足 r,则余数左边用若干个0补齐。如求得余数为11,r = 4,则补 2个0得到 0011。

(4)**生成最终发送信息串,将余数添加到原始信息后。**上例中,原始信息位 10110,添加余数 1111 后,结果为 10110 1111。发送方将此数据发送给接收方。

(5)**接收方进行校验。**接收方的 CRC 校验过程与生成过程类似,**接收方接收了带校验和的帧后,用多项式 G(x)来除(即用得到的结果 10110 1111 除以 10011)。**余数为0(因为第(4)部已经将余数加上去了,所以为0),则表示信息无错;否则要求发送方进行重传。

注意:收发信息双方需使用相同的生成多项式。

总结:

1、根据多项式的最高阶数 n(如xn),则在原始信息后补上 n 个 0,如原始信息位 1100,n为3,则被除数为 1100 000

2、根据多项式 G(x) = x3 + x + 1得到除数 如 1011

3、相除并进行模2运算 1100 0000 % 1011 = 10,得到的余数必须是 n 位,不够的在左侧补0,直至是 n 位,这里 余数是 10,只有两位,补0后,余数为 010.

4、原始信息位 1100 和 余数 010 组合:1100010 即为其 CRC 编码。

3、海明码

海明码:本质也是利用奇偶性来检错和纠错的校验方法,构成方法是在数据位之间的确定位置上插入 k 个校验位,通过扩大码距实现检错和纠错。设数据位是n位,校验位是k位,则 n 和 k 必须满足以下关系:2k-1 >= n + k

例:求信息 1011 的海明码。

1、校验位的位数和具体的数据位的位数之间的关系

**所有位都是编号,从最低位编号,从1开始递增,校验位处于2的n(n = 0,1,2…)次方中,即处于1,2,4,8,16,32,…位上,**其余位才能填充真正的数据位,若信息数据位1011,则可知,第1,2,4位为校验位,3,5,6,7位为数据位,用来从低位开始存放1011,得出信息为何校验位分布如下:

7654321位数
I4I3I2I1信息位
r2r1r0校验位

1011 为 4 位,校验位处于 1,2,4,8,16,32,…

则只需要 4 + 3(3个校验位),即第1位、第2位、第4位,不需要到第8位,因为 4 + 3 满足 小于 8了,即总共7位就够了。

同理 10位数,需要4位校验位,即第1位,第2位,第4位,第8位,不需要到第16位,因为 10 + 4 已经小于16了,即总共14位就够了。

2、计算校验码

将**所有信息位的编号都拆分成二进制表示,**如下图所示:

在这里插入图片描述

上图中,7=4+2+1,表示7由第4位校验位(r2)和第2位校验位(r1)和第1位校验位(r0)共同校验,同理,第6位数据位6=4+2,第5位数据位5=4+1,第3位数据位3=2+1,前面知道,这些2的n次方都是校验位,可知,第4位校验位校验第7 6 5 三位数据位,因此,第4位校验位r2等于这三位数据位的值异或,第2位和第1位校验位计算原理同上。

7654321位数
I4I3I2I1信息位
r2r1r0校验位

计算出三个校验位后,可知最终要发送的海明校验码为1010101

原数据为1011,因为

第7位 为数据位 I4

7 = 22 + 21 + 20

第6位 为数据位 I3

6 = 22 + 21

第5位 为数据位 I2

5 = 22 + 20

第3位 为数据位 I1

3 = 21 + 20

第4位 为校验位r2

因此只要 第7、6、5、3 数据位的位数包含 4 的 ,则 r2 就校验这些位。

可以看到 7、6、5 都包含 22 即 4,所以 r2 校验位用来校验第7、6、5 的数据位,即 r2 用来校验 I4、I3、I2

同理,第2位校验位为 r1,则包含 2 的 有:7、6、3,因为 7、6、3 都有 21,即 r1用来校验 I4、 I3、 I1

同理,第1位校验位为 r0,则包含 0的有:7、5、3,因为7、5、3都有20,即 r0 用来校验 I4、 I2、 I1

已知数据位I4、 I3、 I2、 I1(1011),已知校验位校验的数据位,则只需要根据对应的数据位进行 异或运算即可,即:

异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1)

r2 = I4⊕I3⊕I2 = 1⊕0⊕1 = 0

r1 = I4⊕I3⊕I1 = 1⊕0⊕1 = 0

r0 = I4⊕I2⊕I1 = 1⊕1⊕1 = 1

所以海明校验码为:I4I3 I2r2I1r1r0 = 1010101

3、检错和纠错原理

接收方收到海明码之后,会将每一位校验位与其校验的位数分别异或,即做如下三组运算:

在这里插入图片描述

如果是偶校验,那么运算得到的结果应该全为0,如果是奇校验,应该全为1,才是正确。假设是偶校验,且接收到的数据为1011101(第四位出错),此时,运算的结果为:

在这里插入图片描述

这里不全位0,表明传输过程有误,并且按照r2r1r0排列为二进制100,这里指出的就是错误的位数,表示第100,即第4位出错,找到了出错位,纠错方法就是将该位逆转。

考点在于:设数据位是n位,校验位是k位,则 n 和 k 必须满足以下关系:2k-1 >= n + k

在这里插入图片描述

32 + 6 (1,2,4,8,16,32) = 38,到不了第7位校验位(64),因为38 < 64.

所以32为至少主要6个校验位

D5 第10位,10 = 23 + 21 = 8 + 2,所以 D5 由P4P2校验。

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

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

相关文章

WIFI信号状态信息 CSI 特征提取篇之活动片段提取上(五)

在之前的数据处理环节中&#xff0c;用CSI Tool收集到的原始数据信号&#xff0c;经历了数据解析、降噪、插值的处理步骤&#xff0c;变成了干净、完整的信号片段&#xff0c;这是后续做更进一步分析的基础。 在开始阅读本篇博客前&#xff0c;需要说明两个重要的点&#xff1…

使用ClickHouse、Grafana和WarpStream规模化的解决可预测成本的日志留存

本文字数&#xff1a;13234&#xff1b;估计阅读时间&#xff1a;34 分钟 作者&#xff1a;Dale McDiarmid & Ryadh Dahimene 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 简介 在生产环境中操作任何复杂的技术堆栈而没有适当…

2024年低碳技术与污染控制技术国际学术会议(ICLCTPCT 2024)

2024年低碳技术与污染控制技术国际学术会议(ICLCTPCT 2024) 2024 International Conference on Low carbon technology and pollution control technology 一、【会议简介】 2024年低碳技术与污染控制技术国际学术会议&#xff0c;是交流科研成果的绝佳平台。 这次会议将汇集世…

如何利用美国站群服务器实现有效的SEO优化策略?

如何利用美国站群服务器实现有效的SEO优化策略? 在当今数字化时代&#xff0c;SEO优化对于网站的可见性和吸引力至关重要。站群服务器作为一种有效的SEO策略&#xff0c;可以通过多个相关联的网站在不同服务器上的部署&#xff0c;增强网站的权威性和链接多样性。尤其是在利用…

vector的使用(部分接口)

1.vector的使用 1.1vector的定义 (constructor)构造函数声明接口说明vector()无参构造vector (const vector& x)拷贝构造 1.2vector iterator 的使用 iterator的使用接口说明begin end获取第一个数据位置的iterator/const_iterator&#xff0c; 获取最后一个数据的下一个位…

【做算法学数据结构】二叉树的层序遍历【二叉树】

文章目录 题目二叉树二叉树描述二叉树的java描述和前序遍历、后序遍历、中序遍历 题解总结以及二叉树应用场景 题目 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历…

力扣HOT100 - 98. 验证二叉搜索树

解题思路&#xff1a; class Solution {public boolean isValidBST(TreeNode root) {return recur(root,Long.MIN_VALUE,Long.MAX_VALUE);}public boolean recur(TreeNode root,long lower,long upper){if(rootnull) return true;if(root.val<lower||root.val>upper) re…

python爬虫之爬取携程景点评价(5)

一、景点部分评价爬取 【携程攻略】携程旅游攻略,自助游,自驾游,出游,自由行攻略指南 (ctrip.com) import requests from bs4 import BeautifulSoupif __name__ __main__:url https://m.ctrip.com/webapp/you/commentWeb/commentList?seo0&businessId22176&busines…

爬虫零基础学习,第一天,安装环境,requests库常用命令的讲解

Python爬虫 爬虫学习思路 URL内容获取&#xff0c;requests的基本常用语法 import requests # 先向目标网站发送请求 url "http://www.baidu.com" r requests.get(url) # 可以用看一下访问码返回值是不是200&#xff0c;若是200则表示访问成功 print(r.status_…

Web3与物联网:探索区块链如何驱动智能设备的未来

引言 在数字化快速发展的时代&#xff0c;Web3技术和物联网&#xff08;IoT&#xff09;都成为了前沿技术的代表。两者的结合正逐渐展现出无限的可能性&#xff0c;尤其是在智能设备和数据安全方面。本文将深入探讨Web3如何与物联网相结合&#xff0c;以及这种结合对未来智能设…

现货白银价格走势分析别走弯路!

参与现货白银投资离不开对其价格走势的分析&#xff0c;虽然相关的分析方法有很多种&#xff0c;但说到直观高效的方法&#xff0c;技术分析就是很多专业投资者所钟爱的选择。投资者可以通过平台交易软件所自带的技术指标和画线工具&#xff0c;来辅助自己的分析&#xff0c;实…

UltraScale+的10G/25G Ethernet Subsystem IP核使用

文章目录 前言一、设计框图1.1、xxv_ethernet_01.2、xxv_ethernet_0_sharedlogic_wrapper1.3、xxv_ethernet_0_clocking_wrapper1.4、xxv_ethernet_0_common_wrapper 二、IP核配置三、仿真四、上板测速五、总结 前言 前面我们学习了很多基于XILINX 7系列的高速接口使用&#x…

【SpringBoot整合系列】SpringBoot配置多数据源

目录 背景技术选型配置多数据源思路(以两个为例)代码实现1.导入依赖2.各自的配置 3.各自的dataSourcenews数据库的smbms数据库的注意&#xff1a;Primary注解 4.各自的SqlSessionFactory等news数据库的smbms数据库的 5.去掉启动类头上的MapperScan6.各自的mapper接口7.各自的ma…

力扣HOT100 - 230. 二叉搜索树中第K小的元素

解题思路&#xff1a; class Solution {List<Integer> list new ArrayList<>();public int kthSmallest(TreeNode root, int k) {dfs(root);return list.get(k - 1);}public void dfs(TreeNode root) {if (root null) return;dfs(root.left);list.add(root.val)…

【Netty框架问题总结】

文章目录 Netty初步认识Netty简单介绍为什么jdk已经实现了NIO还要用netty框架&#xff1a; Reactor 线程模型Reactor 单线程模型Netty线程模型 Netty 简单实现EchoClient端实现&#xff1a;ClientHandler实现EchoServer实现ServerHandler实现&#xff1a; Netty初步认识 Netty…

【VSCode调试技巧】Pytorch分布式训练调试

最近遇到个头疼的问题&#xff0c;对于单机多卡的训练脚本&#xff0c;不知道如何使用VSCode进行Debug。 解决方案&#xff1a; 1、找到控制分布式训练的启动脚本&#xff0c;在自己的虚拟环境的/lib/python3.9/site-packages/torch/distributed/launch.py中 2、配置launch.…

检查*.bib参考文献是否重复

安装bibtexparser pip install bibtexparser 代码 import bibtexparser from difflib import SequenceMatcherdef parse_bib_file(filename):with open(filename, r, encodingutf-8) as bibfile:bib_database bibtexparser.load(bibfile)return bib_database.entriesdef fi…

Python构建学生信息管理系统:构建RESTful API - 学生信息管理系统的后端逻辑

在之前的博客里&#xff0c;我们已经完成了项目初始化&#xff0c;在本篇博客中&#xff0c;我们将深入探讨如何使用Flask框架实现学生信息管理系统的后端逻辑&#xff0c;特别是通过RESTful API来实现学生信息的增删改查&#xff08;CRUD&#xff09;操作。 Flask RESTful AP…

【Java】HOT100 回溯

目录 理论基础 一、组合问题 LeetCode77&#xff1a;组合 LeetCode17&#xff1a;电话号码的字母组合 LeetCode39&#xff1a;组合总和 LeetCode216&#xff1a;组合总和ii LeetCode216&#xff1a;组合总和iii 二、分割问题 LeetCode131&#xff1a;分割回文串 Leet…

单片机通讯协议

参考&#xff1a;江科大单片机教程 STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili IIC通讯协议SPI通信协议UARTCANUSB速度100k-400khz4Mhz-线数2 CLK,DATA4CLK,ENB,IO,OI额外设备一主多从一主多从 一般不用自己写&#xff0c;都有相应的库或官方提供相应的&#…