当前位置:首页 > 技术分析 > 正文内容

8 校验码

ruisui881个月前 (03-26)技术分析17

计算机只能识别二进制数,在信息传输过程中,都是以电信号/光信号的形式进行传输。由于传输距离远,可能会导致信号衰减产生误差,在信息使用前需要进行相应的检验,以便判别信息是否正确,这种用于检查的信息,称为校验码。

校验码是在信息中额外增加的一些数据,来帮助校验。

最常用的校验码有3种:

  1. 奇偶校验:能检错,不能纠错。
  2. CRC循环冗余校验:能检错,不能纠错。
  3. 海明校验:能检错,能纠错。

考试考点:

  1. 3者的比对;
  2. CRC循环冗余校验的计算过程 或 编码过程。

奇偶校验

奇偶校验码的编码方法:由若干位有效信息的头部或尾部,再加上一个二进制位(校验位)组成校验码。实际包括两种校验:

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

如:有效信息为:1011,则:

  • 奇校验位为 0,校验码为 10110;
  • 偶校验位为1,校验码为 10111。

如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码,但不能纠错。

如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(也称漏码)。

例:给出编码 1001101 的奇校验码和偶校验码( )。

A)10011011,10011010 B)10011011,10011011

C)10011010,10011010 D)10011010,10011011

解:由于奇偶校验位一定是互斥的,因此B、C校验码相同的情况可以排除。奇校验需要确保校验码“1”总数为奇数,偶校验需要确保校验码“1”总数为偶数。因此选:A

CRC循环冗余校验

CRC循环冗余校验的预备知识:

1 异或

0 ⊕ 0 = 0

0 ⊕ 1 = 1

1 ⊕ 0 = 1

1 ⊕ 1 = 0

2 模2运算

  1. 被除数首位是几商几;
  2. 异或运算;
  3. 异或后首位一定是0舍弃掉这个0首位(去首位补末位);
  4. 补末位(落数),再上商。

例:1011 0010 000 模二除 11001

解:商1101010,余数1010。

3 CRC校验码

CRC校验码:通信领域最常用的差错校验码。有两个部分:

  • 左侧信息位:待发送数据;
  • 右侧差错检测码:基于待发送数据与生成多项式的差错检测码,也称冗余码。

冗余位数越多,校验能力越强。

具体过程:

  1. 收发双方约定好生成多项式G(x);
  2. 发送方基于待发送数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;
  3. 接收方通过生成多项式来计算收到的数据是否产生了误码。

【注】算法要求:生成多项式必须包含最低此项,即x的0次项。

设:

完整形式:

因此生成多项式的bit形式为:10111。

在计算时,信息进行补零后形成被除数,生成多项式串是除数,最终的校验检测码是模2运算的余数。

例1:待发信息位101001,生成多项式为

计算编码后的信息。

解题的步骤如下:

  1. 构造被除数:待发送信息后添加生成多项式最高次数个0;
  2. 构造除数:生成多项式各项系数构成的比特串;
  3. 做模二除法运算;
  4. 检查余数:余数的位数应与生成多项式最高次数相同,如果位数不够,则在余数前补0来凑足位数。

解:

  1. 由生成多项式最高次项为3次,待发信息补3个0,除数101001000;
  2. 生成多项式1101;
  3. 进行模二除法:
  1. 冗余校验码为001,因此编码后的信息为:101001001。

例2:接收到的信息为101101001,生成多项式为:

判断传输是否有误码。

解题的步骤如下:

  1. 构造被除数:接收到的信息就是被除数;
  2. 构造函数:生成多项式各项系数沟通的比特串;
  3. 做模二除法运算;
  4. 检查余数:余数为0,传输过程无误码;余数不为0,传输过程产生误码。

解:

  1. 除数:101101001;
  2. 构造除数:1101;
  3. 做模二除法:
  1. 由于余数不为0,所以该信息为误码。

另外,如果是例1编码后的值101101001,模二除后,余数为0。

例3:在( )校验方法中,采用模二运算来构造检验位。(2019年上半年考题)

A)水平奇偶 B)垂直奇偶 C)海明码 D)循环冗余

答案:D

海明码校验

利用奇偶性来检错纠错的方法。在数据中增加冗余位来进行检错纠错的方法,以提高传输、存储的准确性。

海明码的原理

将原始数据分成若干个数据块,每一块数据中又开辟若干位校验位,用于检出错误后,利用校验位进行纠错,最终得到正确的数据。

数据之间的特定位上,加入K个校验位,通过扩大码距从而实现检错、纠错。

海明码实现方法

设数据位是n位,校验位是k位,则 n 和 k 必须满足以下关系:

【注】2^k 之所以减1,是因为数据所有可能情况中有一种情况位正确,因此要减1。

海明码的编码规则如下:

设k个校验位为:

n 个数位为:

对应的海明码为:

  1. 校验码Pi要放在2^(i-1)的位置;
  2. 海明码中的任何一位都是由若干个校验位来检验的;
  3. 被校验的海明位的下标等于所有参与校验该位的校验位的小标之和,而校验位由自身校验。

例:待传送信息为1010,若采用海明码校验,则奇校验规则下的海明码是( )。

A)0110010 B)0110011 C)1110010 D)1110011

解:

根据:

n = 4,

可以将 k = 1, 2, 3, ... 带入不等式,得到最小的 k = 3。

则H位数为:3 + 4 = 7 (位)

校验位分别为:

则校验位 Pi 与 数据 Dk的排列如下:

位数

1

2

3

4

5

6

7

Pi

P1

P2

D1

P3

D2

D3

D4

Dk



1


0

1

0

建立海明码对应表:

校验码的位数

1

2

4

方法

海明码

P1

P2

P3


H1(P1)



P1自己

H2(P2)



P2自己

H3(D1)


第3位:1+2(P1、P2代表的位数相加等于第3位)

H4(P3)



P3自己

H5(D2)


第5位:1+4(P1、P3代表的位数相加等于第5位)

H6(D3)


第6位:2+4(P2、P3代表的位数相加等于第6位)

H7(D4)

第7位:1+2+4(P1、P2、P3代表的位数相加等于第7位)

将表逐列向下看:

P1校验:D1、D2、D4 → 1 0 0 → P1 = 0;

P2校验:D1、D3、D4 → 1 1 0 → P2 = 1;

P3校验:D2、D3、D4 → 0 1 0 → P3 = 0。


1

2

3

4

5

6

7

Pi

P1

P2

D1

P3

D2

D3

D4

Dk



1


0

1

0

H

0

1

1

0

0

1

0

则海明码为:0110010,选A

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3051.html

标签: java crc校验
分享给朋友:

“8 校验码” 的相关文章

Git分布式系统---Gitlab多人工作流程

前言在上一次推文中,我们已经很清楚的讲解了如何创建本地仓库、提交(push)项目到远程仓库以及从远程仓库clone(克隆)项目到本地的相关操作。大家可以先去看前面的推文(快速掌握Git分布式系统操作)点击查看目前无论你是否步入社会还是在校学生,都会使用Gitlab来进行团队的代码管理。(可以这样说:...

java调用API操作GitLab

最近需要在一个WEB项目中集成GitLab,用到了GitLab的API操作,在网上找了很久都是说直接调用GitLab的Http接口,而且API官方只有javadoc没有其它说明文档,特别记录下,以备查询。这里采用Token的认证方式,因此需要先登陆GitLab新建一个Token,创建方式如下:创建完...

gitlab简单搭建与应用

一、gitlab1、简介GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。与Github类似,GitLab能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历...

「干货」FPGA设计中深度约束技巧及调试经验总结

今天跟大家分享的内容很重要,也是我们调试FPGA经验的总结。随着FPGA对时序和性能的要求越来越高,高频率、大位宽的设计越来越多。在调试这些FPGA样机时,需要从写代码时就要小心谨慎,否则写出来的代码可能无法满足时序要求。另外,最近跟网友聊天时,有谈到公众号寿命的问题,我觉得网络交换FPGA公众号应...

Python中的11 种数组算法

1. 创建数组 创建数组意味着留出一个连续的内存块来存储相同类型的元素。在大多数语言中,您可以在创建数组时指定数组的大小。假设您正在书架上整理一组书籍,并且您需要为正好 10 本书预留空间。功能架上的每个空间都对应于数组中的一个索引。# Example in Python arr = [1, 2,...

Vue2的16种传参通信方式

前言先直入主题列出有哪些传参方式,下面再通过事例一一讲解。props(父传子)$emit与v-on (子传父)EventBus (兄弟传参).sync与update: (父子双向)v-model (父子双向)ref$children与$parent$attrs与$listeners (爷孙双向)pr...