首页 > 其他分享 >【计算机网络-数据链路层】差错控制(检错编码、纠错编码)

【计算机网络-数据链路层】差错控制(检错编码、纠错编码)

时间:2023-01-04 21:35:59浏览次数:57  
标签:编码 0110 校验位 错误 差错控制 校验 校验码 序号 检错

目录

1 检错编码——奇偶校验码

1.1 奇偶校验码

奇偶校验码是一种最为简单的校验码,它用来检测数据传输过程中是否发生错误。奇偶校验码的组成:

n-1 位信息位 + 1 位校验位

有两种校验方法:奇校验和偶校验。

  • 奇校验码:添上校验位后,使得 n-1 位信息位和 1 位校验位总共有奇数个“1”
    • 若 n-1 位信息位一共有偶数个“1”,则校验位为 1
    • 若 n-1 位信息位一共有奇数个“1”,则校验位为 0
  • 偶校验码:添上校验位后,使得 n-1 位信息位和 1 位校验位总共有偶数个“1”
    • 若 n-1 位信息位一共有偶数个“1”,则校验位为 0
    • 若 n-1 位信息位一共有奇数个“1”,则校验位为 1

特点:只能检查出奇数个比特错误,检错能力为 50%。

1.2 相关例题

【例 1】原始数据:0110 1100。

【解】0110 1100 有偶数个“1”,则:

  • 奇校验码:0110 1100 1
  • 偶校验码:0110 1100 0

【注】校验位也可以加到数据的前面。

【例 2】原始数据:0100 1100。

【解】0100 1100 有奇数个“1”,则:

  • 奇校验码:0100 1100 0
  • 偶校验码:0100 1100 1

【例 3】原始数据:0110 1100,采用奇校验方式。

(1)若没有出错,校验位是多少?

(2)现若错误一位:0110 1101,能否检测出错误?

(3)现若错误两位:0110 1111,能否检测出错误?

(4)现若错误三位:0111 1111,能否检测出错误?

【解】(1)原始数据有偶数个“1”,所以为 0110 1100 1

(2)0110 1101 1,一共 6 个“1”,检测出错误

(3)0110 1111 1,一共 7 个“1”,检测不出错误

(4)0111 1111 1,一共 8 个“1”,检测出错误

【结论】采用奇校验方式,若原始数据出现奇数位错误时,将检测出错误;若原始数据出现偶数位错误时,将检测不出错误。

【例 4】原始数据:0110 1100,采用偶校验方式。

(1)若没有出错,校验位是多少?

(2)现若错误一位:0110 1101,能否检测出错误?

(3)现若错误两位:0110 1111,能否检测出错误?

(4)现若错误三位:0111 1111,能否检测出错误?

【解】(1)原始数据有偶数个“1”,所以为 0110 1100 0

(2)0110 1101 0,一共 5 个“1”,检测出错误

(3)0110 1111 0,一共 6 个“1”,检测不出错误

(4)0111 1111 0,一共 7 个“1”,检测出错误

【结论】采用偶校验方式,若原始数据出现奇数位错误时,将检测出错误;若原始数据出现偶数位错误时,将检测不出错误。

【例 5】字符 S 的 ASCII 码编码从低到高依次为 1100101。采用奇校验在下述收到的传输后的字符中,错误不能被检验出来的是( )

A. 11000011

B. 11001010

C. 11001100

D. 11010011

【解】原始数据:1100101,采用奇校验后:1100101 0

  • A 项:11000011 0,偶数个“1”,能检测出错误;
  • B 项:11001010 0,偶数个“1”,能检测出错误;
  • C 项:11001100 0,偶数个“1”,能检测出错误;
  • D 项:11010011 0,奇数个“1”,不能检测出错误。本题选 D。

2 检错编码——循环冗余码(CRC)

2.1 发送端——生成冗余码

循环冗余码(CRC)的组成:

数据部分 + 附加冗余码(FCS)

假设数据有 m 位,多项式为 G(x),计算附加冗余码(FCS)的步骤:

  • 加 0:假设 G(x) 的阶为 r,则在数据的低位添上 r 个 0;
  • 模 2 除:将上面得到的数据串去除以 G(x),得到的余数即为冗余码(共 r 位,前面的 0 不可省略)。

【注 1】有时候模 2 除法算出来的冗余码位数小于 r,此时要在附加冗余码前补 0 来满足位数。

【注 2】模 2 除法里的减法是异或操作(同 0 异 1)。

2.2 接收端——检错

对循环冗余码(CRC)除以多项式 G(x):

  • 若余数为 0,则判定这个数据没有出错,接收;
  • 若余数不为 0,则判定这个数据有出错,丢弃。

2.3 相关例题

【例 1】要发送的数据 1101011011,采用 CRC 校验,多项式是 10011,那么最终发送的数据是?

【解】计算附加冗余码(FCS)的步骤:

  • 添 0:多项式是 10011,则对应的多项式 G(x) = x4+x1+x0,r = 4,所以在数据的低位添 4 个 0,即 1101011011 0000
  • 模 2 除:将 1101011011 0000 除以 10011,得到的余数即为冗余码(共 r 位,前面的 0 不可省略):

image

所以,最终发送的数据为:1101011011 1110

【例 2】在数据传输过程中,若接收方收到的二进制比特序列为 10110011010,CRC 校验生成多项式为 G(x)=x4+x3+1。

(1)二进制比特序列在传输中是否出现了差错?

(2)若无差错,则发送方发送的二进制比特序列和 CRC 校验码的比特序列分别是什么?若有差错,则指出发送方发送的二进制比特序列和 CRC 校验码的比特序列分别为多少位。

【解】多项式 G(x) = 11001,进行模 2 除法:10110011010 除以 11001,所得余数为 0,说明二进制比特序列在传输中没有出现差错。

因为 G(x) 的 r = 4,所以发送数据的比特序列为 1011001,CRC 校验码为 1010。

3 纠错编码——海明码

以发送数据 D = 1100 为例,说明海明码的工作流程。

3.1 确定海明码的位数

海明不等式:m + r ≤ 2r - 1

  • 数据/信息为 m 位
  • 冗余码/校验码为 r 位

以 D = 1100 为例,数据位 m = 4,满足海明不等式的 rmin = 3,所以 D 的海明码有 4 + 3 = 7 位,数据位(用 Di 表示)为 4 位,校验码(用 Xi 表示)为 3 位。

3.2 确定校验位的分布

将校验码放在序号为 2n 的位置上:

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
D7 D6 D5 X4 D3 X2 X1

然后将数据放在剩余位置上:

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
1 1 0 X4 0 X2 X1

3.3 对校验码进行分组

  • 4 号校验码 X4:负责二进制序号为 1** 的校验,即序号为 4,5,6,7 的校验
  • 2 号校验码 X2:负责二进制序号为 *1* 的校验,即序号为 2,3,6,7 的校验
  • 1 号校验码 X1:负责二进制序号为 **1 的校验,即序号为 1,3,5,7 的校验

3.4 求出校验码的值(偶校验)

校验码自己是不需要被校验的,所以需要把自己的序号去掉,然后对自己负责的数据进行异或运算(相当于偶校验),得出校验值。

  • 4 号校验码 X4:负责序号为 5,6,7 的校验,X4 = D7 ⊕ D6 ⊕ D5 = 1 ⊕ 1 ⊕ 0 = 0
  • 2 号校验码 X2:负责序号为 3,6,7 的校验,X2 = D7 ⊕ D6 ⊕ D3 = 1 ⊕ 1 ⊕ 0 = 0
  • 1 号校验码 X1:负责序号为 3,5,7 的校验,X1 = D7 ⊕ D5 ⊕ D3 = 1 ⊕ 0 ⊕ 0 = 1

得出完整海明码:

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
1 1 0 0 0 0 1

3.5 检错和纠错

3.5.1 纠错方法一

假设接收方接收到错误的数据为:1110001(序号 5 出错),则先把接受到数据的校验码的值重新算一遍,与正确的对比。

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
1 1 1 0 0 0 1
  • 4 号校验码 X4:负责序号为 5,6,7 的校验,X4 = D7 ⊕ D6 ⊕ D5 = 1 ⊕ 1 ⊕ 1 = 1(与接收到的不一样)
  • 2 号校验码 X2:负责序号为 3,6,7 的校验,X2 = D7 ⊕ D6 ⊕ D3 = 1 ⊕ 1 ⊕ 0 = 0
  • 1 号校验码 X1:负责序号为 3,5,7 的校验,X1 = D7 ⊕ D5 ⊕ D3 = 1 ⊕ 1 ⊕ 0 = 0(与接收到的不一样)

由以上结果可知:

  • 序号 3,5,7 和序号 5,6,7 中发生出错,取交集为 5,7;
  • 序号 3,6,7 没有发生出错,与以上集合再取一次差集,得到序号 5 出错。

3.5.2 纠错方法二

假设接收方接收到错误的数据为:1110001(序号 5 出错),则把校验组内的校验码和数据再进行一次异或运算(偶校验)。

序号 7 6 5 4 3 2 1
二进制序号 111 110 101 100 011 010 001
1 1 1 0 0 0 1
  • 4 号校验码组:负责序号为 5,6,7 的校验,S4 = X4 ⊕ D7 ⊕ D6 ⊕ D5 = 0 ⊕ 1 ⊕ 1 ⊕ 1 = 1
  • 2 号校验码组:负责序号为 3,6,7 的校验,S2 = X2 ⊕ D7 ⊕ D6 ⊕ D3 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 0
  • 1 号校验码组:负责序号为 3,5,7 的校验,S1 = X1 ⊕ D7 ⊕ D5 ⊕ D3 = 0 ⊕ 1 ⊕ 1 ⊕ 0 = 1

得到:S4S2S1 = 101,转换成十进制,即说明序号 5 出错了。

标签:编码,0110,校验位,错误,差错控制,校验,校验码,序号,检错
From: https://www.cnblogs.com/Mount256/p/17026044.html

相关文章

  • 关于HTTP GET请求的url中文参数编码
    场景:前端用JS构造了一个GET请求,携带了一个中文的参数,通过SpringMVC传到后台以后解析中文是乱码。1.发送请求,从浏览器中捕获到http的请求内容如下:1RemoteAddress:[::......
  • Java 中文字符串编码之GBK转UTF-8
    写过两篇关于编码的文章了,以为自己比较了解编码了呢?!结果今天又结结实实的上了一课。以前转来转去解决的问题终归还是简单的情形。即iso-8859-1转utf-8,或者iso-8859-1转gb......
  • 如何编码实现Windows下的ping功能
    一、数据结构首先根据IP数据包格式(图下图)定义IP数据包头的数据结构typedefstructtagIPHDR//IP数据包头部{u_charVIHL;//版本号(4)+头长度(4)u_charT......
  • 变分自编码器 - VAE: Variational Auto-Encoder
    总之,VAE本身是一个生成模型,我们假设观测的某个变量\(\mathbf{x}\)(比如数字0~9的各种图像)受到隐变量\(\mathbf{z}\)的影响,那么在得到分布后,只需要采样得到一个\(\mat......
  • Unicode 与 UTF-8 编码的转换
     注意:下面这两段是代理区。即第1——16平面的间接表示,四个字节的汉字就在这里表示D800-DBFF:High-halfzoneofUTF-16DC00-DFFF:Low-halfzoneofUTF-16本篇中包含了所有......
  • m基于matlab的协作mimo分布式空时编码技术的仿真
    1.算法描述基于matlab的协作mimo分布式空时编码技术的仿真,包括规则LDPC级联D-STBC,ML,ZF,DFE均衡,Fincke-Pohst-MAP算法检测。将规则LDPC加入这个协作MIMO的D-STBC里,......
  • NASA关于MSL(火星科学实验室,好奇号)的UML状态图自动编码讲座
    NASA关于MSL(火星科学实验室,好奇号)的UML状态图自动编码讲座火星科学实验室(MarsScienceLaboratory,MSL)好奇号(Curiosity)是美国国家航空航天局(NASA)的探测车计划,探测器已......
  • base64编码和解码
    引言:最近做爬虫的时候,解析对方网站中自定义字体时遇到的base64解码问题,对这个一直不理解,今天学习一下,总结一下。base64Base64是一种任意二进制到文本字符串的编码方法,基于64......
  • VLQ & Base64 VLQ 编码方式的原理及代码实现
    VLQ&Base64VLQ编码方式的原理及代码实现  目录VLQBase64VLQ VLQVLQ (Variable-lengthquantity)是一种通用的,使用任意位数的二进制来表示一个任意......
  • 202209-1 如此编码
    题意:第一行给定n和m,表示有n个题目,m表示依据这n个题目的答案计算的结果。第二行给定n个数A1,A2,……An,表示n个题目各自的选项个数。开辟A,B,C三个大小均为n+1的数组。Ci =......