【软考学习7】数据校验——海明校验码、循环校验码、奇偶校验码

article/2025/10/31 19:42:03

在这里插入图片描述


一、检错、纠错和码距

1.1 检错

从接收的报文中,检查出错误


1.2 纠错

从接收的报文中检查出错误,并改正错误

一般通过加冗余信息(增大码距)来实现。


1.3 码距

码距是整个编码系统中任意两个码字的最小距离。

也就是说,一个编码 A到和 A 任意不一样的编码 B,最少需要变更的位数。

如果从一个合法编码 A 编导另外一个合法编码 B,最少要变动两位,则码距就是 2。

在这里插入图片描述

码距越大,排错能力越好


1.4 例题

举个例子,若采用 1 位长度的二进制编码,设 A = 0,B = 1,那么 A、B 之间的码距是 1,因为从 0 变到 1 最少需要变 1 位。

如果张三给李四发送了一串编码 0,但李四接收到的编码是 1,那么李四无法识别接收到的编码是否正确,因为张三发送的 0 和李四接收到的 1,都是合法的编码。


若采用 2 位长度的二进制编码,设 A = 00,B = 11,那么 A、B 之间的码距是 2,因为从 00 变到 11 最少需要变 2 位。

如果张三给李四发送了一串编码 00,但李四接收到的编码是 01,那么李四可以确定接受的编码错了,因为只有 0011 是合法的字符,而 01 不合法,但李四无法确定张三发送的到底是 00 还是 11 ,所以只知道错误,但不能纠错


若采用 3 位长度的二进制编码,设 A = 000,B = 111,那么 A、B 之间的码距是 3,因为从 000 变到 111 最少需要变 3 位。

如果张三给李四发送了一串编码 000,但李四接收到的编码是 001,那么李四可以确定接受的编码错了,因为只有 000111 是合法的字符,而 001 不合法,但李四可以认为接收到的编码就是 000 ,因为李四潜移默化的认为计算机出错概率很小,所以这种情况下知道错误,也能纠错


二、CRC 循环校验码

CRC 循环校验码是一个只能检错但不能纠错的校验码。

2.1 基本原理

在进行信息编码时,在数据尾部添加一串校验位,让编码后的数据和生成多项式相除且余数为零。

如果接收方校验时,发现余数不为零,则代表传输过程中出现了错误。

CRC 在计算中采用模二除法,即为异或除法。

在这里插入图片描述

2.2 例题

原始报文为 11001010101,生成多项式为 X^4+x^3+x+1,对原始报文的编码结果为什么?

首先由生成多项式得出,除数为 11011,其中由于 X 的 2次方没有 1,别的次方位都有 1,所以得出这个结果。

接下来对原始报文的编码进行计算,如下图所示。

在这里插入图片描述


三、海明校验码【重点】

3.1 编码规则

海明校验码的编码规则:
下标为 2 的次方的,为校验位,其余位置为数值位,如下表所示。

10987654321位数
I6I5I4I3I2I1信息位
r3r2r1r0校验位

首先整理下 10 以内的二进制表示。


10 = 2^3 + 2^1
9 = 2^3 + 2^0
8 = 2^3 (校验位 37 = 2^2 + 2^1 + 2^0
6 = 2^2 + 2^1
5 = 2^2 + 2^0
4 = 2^2(校验位 23 = 2^1 + 2^0
2 = 2^1(校验位 11 = 2^0(校验位 0

整理发现,包含 2 的 3 次方的非校验位数字有 10、9
包含 2 的 2 次方的非校验位数字有 7、6、5
包含 2 的 1 次方的非校验位数字有 10、7、6、3
包含 2 的 0 次方的非校验位数字有 9、7、5、3


所以 r3 = 表格中下标为 10、9 的数字的异或,即 I6 异或 I5
所以 r2 = 表格中下标为 7、6、5 的数字的异或,即 I4 异或 I3 异或 I2
所以 r1 = 表格中下标为 10、7、6、3 的数字的异或,即 I6 异或 I5 异或 I3 异或 I1
所以 r0 = 表格中下标为 9、7、5、3 的数字的异或,即 I5 异或 I4 异或 I2 异或 I1


3.2 例题1

若原始报文为 1011,则对原始报文的海明校验编码结果为?

原始报文为 4 位,首先根据公式 4+k+1<2^k ,即 k=3校验位为3位),完整码字为7位

7654321位数
1011信息位
r2r1r0校验位

根据二进制拆分可得,包含 2 的 2 次方的非校验位数字有 7、6、5

所以 R2 = 1 异或 0 异或 1 = 0

同理,包含 2 的 1 次方的非校验位数字有 7、6、3

所以 R1 = 1 异或 0 异或 1 = 0

同理,包含 2 的 0 次方的非校验位数字有 7、5、3

所以 R1 = 1 异或 1 异或 1 = 1

所以可得:

7654321位数
1011信息位
001校验位

所以原始报文的海明校验编码结果为 1010101


3.3 例题2

如果接收方收到的数据为 1011101,即第四位校验位接收错误,如何纠错呢?

7654321位数
1011信息位
101校验位

分别计算校验位和对应匹配的数据位的异或值即可。

和 R2 匹配的数据位是 7 6 5,所以计算 1 异或 1 异或 0 异或 1 = 1。

和 R1 匹配的数据位是 7 6 3,所以计算 0 异或 1 异或 0 异或 1 = 0。

和 R0 匹配的数据位是 7 5 3,所以计算 1 异或 1 异或 1 异或 1 = 0。

只要有一个校验位不为 0,则说明接收数据错误,如果当且仅当只有一个校验位不为 0,说明只是校验位接收错误,数据位正确,无需更改。

因为 R2 = 1,且 R1 和 R0 都为 0,所以可得 R2 位接收错误,直接取反即可,可得正确数据为 1010101


3.4 例题 3

如果接收方收到的数据为 1010001,即第五位数据位接收错误,如何纠错呢?

7654321位数
1010信息位
001校验位

和 R2 匹配的数据位是 7 6 5,所以计算 0 异或 1 异或 0 异或 1 = 0。

和 R1 匹配的数据位是 7 6 3,所以计算 0 异或 1 异或 0 异或 0 = 1。

和 R0 匹配的数据位是 7 5 3,所以计算 1 异或 1 异或 1 异或 0 = 1。

只要有一个校验位不为 0,则说明接收数据错误,如果当且仅当只有一个校验位不为 0,说明只是校验位接收错误,数据位正确,无需更改。

因为 R2 = 0,且 R1 和 R0 都为 1,所以可得上表中下标为 3 的地方接收错误,直接取反即可,可得正确数据为 1010101

提示:下标 3 的计算方式:2^1 + 2^0 = 310 代表 R1 和 R0。

四、奇偶校验码

奇偶校验码可分为奇校验码偶校验码

简单来说在原始报文的尾部(或头部)加一位校验位,奇校验码的校验位等于原始报文中 1 个数对 2 取余,偶校验码 的校验位等于原始报文中 0 个数对 2 取余,如下图所示。

在这里插入图片描述
如果原始报文为 011001,那么对于奇校验码,校验位就是 1,因为 原始报文中 1 的个数为 3,3 是奇数,所以校验位是1。

对于偶校验码,校验位是 0,因为 原始报文中 1 的个数为 3,不是偶数,所以校验位是0。

还是举个例子:

原始报文奇校验(奇数个 1)偶校验(偶数个 1)
11110101111010 11111010
10110101111010 01111011
10110001111010 11111010
00110001111010 01111011

相信聪明的小伙伴已经明白了。


五、总结

本文学习了计算机数据校验的流程,学习了常见的校验方法,比如海明校验码、循环校验码、奇偶校验码,其中海明校验码不但可以检错,还可以纠错,另外两种只能检错不能纠错。


http://chatgpt.dhexx.cn/article/1X0I1lmA.shtml

相关文章

超详细的海明校验码方法解读

海明校验码原理&#xff1a;在有效的信息为中加入几个校验位形成海明码&#xff0c;使码距[rjazgj1] 比较均匀地拉大&#xff0c;并把海明码的每个二进制位分配到几个奇偶校验组[rjazgj2] 中。当某一位出错后&#xff0c;就会引起有关的几个校验位的值发生变化&#xff0c;这不…

海明校验码原理以及作用机制的介绍

什么是海明校验码&#xff1f; 由Richard Hamming于1950年提出、还被广泛采用的一种很有效的校验方法&#xff0c;是只要增加少数几个校验位&#xff0c;就能检测出二位同时出错、亦能检测出一位出错并能自动恢复该出错位的正确值的有效手段&#xff0c;后者被称为自动纠错。 它…

海明校验码的计算及检验

海明校验码的计算及检验 目录 海明校验码的计算及检验知识背景计算海明校验码步骤一&#xff1a;计算校验码位数步骤二&#xff1a;确定校验组步骤三&#xff1a;计算校验码的值得出海明校验码 利用海明校验码校验数据其他 总结 最近和兄弟探讨一个海明校验码的题目&#xff0c…

海明校验码举例

海明校验码举例&#xff1a; 编制ASCII字符M的海明校验码。 解&#xff1a;M的ASCII码为A6A5A4A3A2A1A01001101 M为7位那么海明码最少需要2i&#xff0c;也就是说需要&#xff0c;才能表示出来&#xff0c;&#xff08;238&#xff09; 用哪些信息位分别被哪些校验位效验如…

计算机底层:海明校验码。

计算机底层&#xff1a;海明校验码。 海明校验码是由奇偶校验码中的偶校验延申出来的&#xff1a; 计算机底层&#xff1a;奇偶校验码_srhqwe的博客-CSDN博客 了解海明校验码之前需要先了解奇偶校验码。 海明校验码设计思路&#xff1a; 需要知道&#xff1a;多个校验位就能携…

海明校验码

1. 海明码的特点&#xff1a; 其中m表示数据位的位数&#xff0c;k表示海明校验码的位数 k位海明校验码一共可以表示种校验信息结果&#xff0c;其中有一种要用来表示没有出错的情况&#xff0c;则其余还剩-1种结果&#xff0c;为了使校验结果可以指出任一位出错的位置&#x…

计算机组成原理学习笔记:海明校验码

概述 海明校验码又可以称为汉明校验码, 这只是一个音译的问题, 作者是 Richard Hamming海明校验码对于信息纠错这个领域的贡献十分巨大&#xff0c;Richard Hamming 获得了1968年的图灵奖内容主要包括&#xff1a;海明校验码的思想、如何构建海明校验码、如何使用海明校验码 …

海明码校验【简单详细】

海明码 1.什么是海明码: 一个名叫Richard Hanming老爷爷在1950年提出的检验纠错方法&#xff0c;它具有一位纠错能力。 2.海明码的计算方法: 设欲检测的二进制代码为n位,K为检测位(提供纠错),总共nk位代码 当中检测位满足的关系: 2 k 2^{k} 2k>(nk1) 此关系也是求不同代码长…

一文看懂海明校验码及其计算方法(详细总结)

网上看了好几篇文章后终于算是捋明白了&#xff0c;但是看到的这些资源要么说得云里雾里&#xff0c;要么干脆说得有问题&#xff08;然后还被点了好多赞。。。&#xff09;&#xff0c;无论如何这些都容易误导小白。作为C站多年老潜水员&#xff0c;我还是把海明校验码的要点总…

ResNets

ResNets 背景&#xff1a; 非常非常深的神经网络是很难训练的&#xff0c;因为存在梯度消失和梯度爆炸问题。 《转载更改》 https://blog.csdn.net/qq_29893385/article/details/81207203 ResNets是由残差块&#xff08;Residual block&#xff09;构建的 首先解释一下什么是…

正确定位混淆后Crash代码行数

Android--定位混淆后Crash代码行数 一、需求背景二、前期准备三、对混淆日志进行还原四、示例 一、需求背景 打包时需要对代码进行混淆&#xff0c;目的是增加安全性&#xff0c;防⽌反编译。但这会导致App崩溃时&#xff0c;抓到的日志堆栈中显示的代码行数对应不上&#xff…

repalce

1、replace基本用法 <script>/*要求将字符串中所有的a全部用A代替*/var str "javascript is great script language!";//只会将第一个匹配到的a替换成Aconsole.log(str.replace("a", "A")); // > jAvascript is great script language…

Android studio 4.2新特性及升级异常

Android studio 版本及特性系列目录 Android 12 终于来了&#xff0c;你准备好了吗&#xff1f;Android studio 4.2新特性Android studio 4.1新特性Android Studio 4.0新特性及升级异常Android Studio3.6. 插件搜索不到终极解决方案 Android studio 4.2新特性 前言升级异常Gra…

强化学习的学习之路(五十一)2021-02-20 Retrace

作为一个新手&#xff0c;写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程&#xff0c;希望对大家能有所帮助。这个系列后面会不断更新&#xff0c;希望自己在2021年能保证平均每日一更的更新速度&#xff0c;主要是介绍强化学习的基础知识&#xff…

RecId

我记得好像AX最初版本RecId是所有表都唯一的。但是这样有一个坏处就是限制了数据库可存储的数据的条数。D365FO中RecId 不再全局唯一&#xff0c;但是表唯一。 每个表都有一个Sequences生成表的RecId,格式是&#xff1a;SEQ_TableId 右键Sequences可以看下当前RecId的值&#…

ResNet过程

#ResNet 因为网络传播的层次太深&#xff0c;后面的很难传播到前面&#xff0c;所以增加了一个短接层&#xff0c;深层次网络可以退化成一个浅层次网络 #filter_num 卷积核数量 #stride 步长 class BasicBlock(layers.Layer):def __init__(self,filter_num,stride1):super(Bas…

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志

Android Stuido Proguard Retrace Unscrambler直接reProguard反混淆retrace日志 &#xff08;1&#xff09;如果Android Studio里面没有安装下列插件之一的&#xff0c;在Settings的Plugins里面安装其中一个&#xff1a; &#xff08;2&#xff09;菜单栏中的code里面找到反混…

android还原代码混淆proguard日志的工具--retrace和SmartRetrace

介绍 代码混淆时android反编译的常用方法&#xff0c;android SDK提供了Proguard工具&#xff0c;路径是 ANDROID_SDK_HOME/tools/proguard 命令行在ANDROID_SDK_HOME/tools/proguard/bin下&#xff0c;而实际的执行代码路径为ANDROID_SDK_HOME/tools/proguard/lib apk经过混…

with recursive用法

with recursive 则是一个递归的查询子句&#xff0c;他会把查询出来的结果再次代入到查询子句中继续查询。 with recursive d(n, fact) as ( values (1,2) union all #合并 select n1, (n1)*fact from d where n < 5) SELECT * from d;递归过程如下&#xff1a; n1 fact2 n…

python实验之绘制南丁格尔玫瑰图

一、实验目的 了解玫瑰图的前世今生&#xff1b;了解 matplotlib 标准库中的 pyplot 模块&#xff1b;了解在极坐标 系中绘制柱状图。 二、实验基本原理及步骤&#xff08;或方案设计及理论计算&#xff09; 实验步骤&#xff1a; 查阅文档&#xff0c;了解南丁格尔玫瑰图的原…