编码和校验码

本文包含奇偶,海明,循环冗余校验码

校验背景

当两台设备在通信的时候,由于许多不可控因素,接收方收到的信息不一定是发送方发出的信息,即传输过程中信息发生了改变。那么我们就需要添加一些校验的方法来帮助我们确定收到的信息是否正确。这便是校验发生的背景。

一些基本概念

码字:指我们通过一系列二进制代码表示的信息,通常是人为定义的(如令 A为011 )

码距:两个合法码字对应位上数字的不同位的个数(如001和010的码距为2)

奇偶校验

奇校验

定义:在开头添加一位数保证一段数据中出现奇数个1

如:

010 -> 0010

011 -> 1011

偶校验

定义:在开头添加一位数保证数据中出现偶数个1

如:

001 -> 1001

011 -> 0011

但是不管是奇校验还是偶校验,他们都不能完全保证数据的正确性,如果一次性跳变两位,他们还是无法检测出数据是否正确。同时他们也不能定位跳变的位置。

海明校验码

海明码设计思路:通过分组校验和多个校验位来标注出错位置

假设我们的校验位为k位,信息位为n位。我们的校验位可以表示种状态。

如果要表示所有状态,那么我们就需要保证

以下是n和k的对应关系

海明码求解方法

以1010为例

1.确定海明码位数

可知,我们的,所以海明码的位数为7位

2.确定校验位的分布

校验位应当放在的位置上,所以三位校验位应该放在1,2,4三个位置上

然后信息位按顺序放在其余位置(如果你想反过来放也可以,计算出来的结果也是对应下表的)

3.计算校验位

校验位由信息位计算得出:

因为信息位分别放在7,6,5,3几个位置上(其他位置被校验位占了),所以对这些数进行异或运算来计算出校验位。如下图,D是信息位

所以我们得到的海明码就是1010010

校验过程

校验就是将校验位和接受到的信息位进行异或运算

假设我们接受到1010010,即数据没有变化,那么我们计算出来的S1 = S2 = S3 = 0,即我们的数据是正确的

如果接收到1010000,我们的S1 = 0 , S2 = 1 , S3 = 0,所以第二位出错

循环冗余校验码(CRC码)

一般来说,求解CRC码时,会提供生成多项式和信息码。

CRC码的结构一般是K位信息位加上R位校验位

如何根据生成多项式得到对应的二进制码

当生成多项式为

其对应的二进制码就为10111

求解CRC码

先根据生成多项式得到二进制码

将信息码左移R位,低位补0

我们将得到的二进制码对位移后的信息码进行模2除法,产生的余数即为校验码

假设我们的信息码为101001,二进制码为1101,计算步骤如下:

于是我们的CRC码就为101001 001

纠错

接收方将收到的CRC码用二进制码(生成多项式的)进行模2除法

如果余数为0,则正确

反之余数指向的位出错(这个要看生成多项式给的合不合理)

相关推荐
八解毒剂2 天前
计算机层次结构
计算机组成原理
LiamTuc11 天前
计组ROM 家族分类笔记
计算机组成原理
裁冰剪雪12 天前
软硬件联通的“最后一公里”:从C代码到CPU取指的完整交接链
计算机组成原理
MarkXu12 天前
localhost 背后:一趟没有出门的网络旅行
计算机组成原理
-To be number.wan1 个月前
计算机组组成原理 | AT&T格式 和 Intel格式
学习·计算机组成原理
轻刀快马1 个月前
跨越软硬件的共鸣(二):从 Cache 写策略看 Redis 与 DB 的一致性博弈
java·开发语言·redis·计算机组成原理
雪度娃娃1 个月前
IO设备——总线系统
计算机组成原理
anew___1 个月前
计算机组成原理:深入理解运算方法与运算器设计
计算机组成原理·运算器
-To be number.wan1 个月前
计算机组成原理 | 指令格式全解析
学习·计算机组成原理