编码和校验码

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

校验背景

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

一些基本概念

码字:指我们通过一系列二进制代码表示的信息,通常是人为定义的(如令 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,则正确

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

相关推荐
suhan18 天前
【计算机组成原理】七、输入/输出系统:1.I/O基本概念、I/O设备(外部设备)
计算机组成原理
suhan19 天前
【计算机组成原理】汇总五、中央处理器
计算机组成原理
suhan19 天前
【计算机组成原理】五、中央处理器:2.数据通路、控制器(单总线结构、专用数据通路、硬布线控制器、微程序控制器)
计算机组成原理
suhan19 天前
【计算机组成原理】五、中央处理器:3.指令流水线(互斥、同步)
计算机组成原理
八解毒剂25 天前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
啦啦啦啦啦zzzz25 天前
乘法器和除法器
计算机组成原理
我叫黑大帅1 个月前
为了知道计算机为什么选择了二进制,我做了这些……
面试·程序员·计算机组成原理
suhan1 个月前
【计算机组成原理】汇总二、数据的表示和运算
计算机组成原理
free-elcmacom1 个月前
计算机组成原理<1>计算机的基本组成
计算机组成原理
孙克旭_2 个月前
计算机系统:硬件与软件
计算机组成原理