[软考网规考点笔记]-数据通信基础之差错控制编码技术

目录

  • 一、引言
  • 二、奇偶校验码
    • [1. 原理](#1. 原理)
    • [2. 类型](#2. 类型)
    • [3. 检错能力与局限性](#3. 检错能力与局限性)
    • [4. 应用](#4. 应用)
  • [三、海明码(Hamming Code)](#三、海明码(Hamming Code))
    • [1. 功能](#1. 功能)
    • [2. 校验位位数确定](#2. 校验位位数确定)
    • [3. 编码规则](#3. 编码规则)
    • [4. 示例:计算海明码](#4. 示例:计算海明码)
    • [5. 纠错过程](#5. 纠错过程)
    • [6. 特点](#6. 特点)
  • 四、循环冗余校验码(CRC)
    • [1. 原理](#1. 原理)
    • [2. 生成多项式](#2. 生成多项式)
    • [3. 编码计算步骤](#3. 编码计算步骤)
    • [4. 示例](#4. 示例)
    • 5、校验过程
    • [6. 检错能力](#6. 检错能力)
    • [7. 特点](#7. 特点)
  • 五、三种差错控制编码的对比
  • 六、网规历年真题

一、引言

在数据通信中,由于信道噪声、干扰等因素,传输的信号可能会发生错误。为了保证数据的可靠性,需要采用差错控制编码。差错控制编码通过在原始数据中添加冗余信息(校验位),使接收方能够检测甚至纠正传输过程中产生的错误。常用的差错控制编码包括奇偶校验码、海明码和循环冗余校验码(CRC)。本文带你了解以上三种编码的基础知识。

二、奇偶校验码

1. 原理

  • 奇偶校验码是最简单的检错码,它通过在原始数据后附加一个校验位,使得整个码字(数据位+校验位)中"1"的个数满足特定条件。

2. 类型

  • 偶校验:使码字中"1"的个数为偶数。
  • 奇校验:使码字中"1"的个数为奇数。
  • 编码示例
    • 假设要发送的数据为 1011010(共7位)
      • 采用偶校验: 数据中"1"的个数为4(偶数),则校验位应置为 0,使总"1"数保持偶数。发送码字为 10110100。

      • 若采用奇校验,则校验位应置为 1,使总"1"数为奇数,发送码字为 10110101。

3. 检错能力与局限性

  • 只能检测奇数个比特错误:

    • 例如,若传输过程中某一位翻转,使"1"的个数变为奇数,偶校验接收方计算后发现"1"的个数为奇数,即可检测到错误。
  • 无法检测偶数个错误:

    • 若两位同时翻转,"1"的个数奇偶性不变,错误无法被检出。
  • 无法纠错:

    • 仅能告知有错,但不知道错误位置。

4. 应用

  • 常用于简单的串行通信(如UART)、内存条上的简单校验等。

三、海明码(Hamming Code)

1. 功能

  • 海明码是一种既能检测又能自动纠正一位错误的编码(通过增加足够的冗余位,也可以检测多位错误)。其基本思想是在数据位中插入多个校验位,每个校验位负责监督一组特定的数据位,通过校验方程确定错误的位置。

2. 校验位位数确定

  • 假设信息位数为 m,校验位数为 k,则必须满足:m + k + 1 ≤ 2k

  • 其中 m+k 为编码后的总位数,+1 是为了能表示"无错误"的状态。

    • 例如:当 m=4 时,k=3(因为 4+3+1= 8 ≤ 2 3= 8)。^^
    • 例如:当 m=8 时,k=4(因为 8+4+1= 13 ≤ 16)。
    • 例如:当 m=10 时,k=4(因为 10+4+1= 15 ≤ 16)。

3. 编码规则

  • 校验位被放置在2的幂次位置上(即第1、2、4、8、16......位),其余位置按顺序放置数据位。

  • 每个校验位负责监督一组特定的位,这些位的位置编号的二进制表示中,对应校验位的位置位为1。

    • 例如:
      校验位 P1(位置1)监督所有位置二进制的最低位为1的位:1, 3, 5, 7, 9, 11,...。
      校验位 P2(位置2)监督所有位置二进制的次低位为1的位:2, 3, 6, 7, 10, 11, ...。
      校验位 P4(位置4)监督所有位置二进制的第三位为1的位:4, 5, 6, 7, 12, 13, ...。
  • 每个校验位的取值采用偶校验(或奇校验)原则:使被监督的所有位(包括校验位自身)中"1"的个数为偶数(偶校验)或奇数(奇校验)。通常考试中多采用偶校验。

4. 示例:计算海明码

  • 假设信息码为 101101100(9位),求采用偶校验的海明码。

    • 第一步:确定校验位位数

      • m=9,寻找最小的 k 使 9+k+1≤2k
      • 尝试 k=4: 9 + 4 + 1 = 14, 24 = 16,
      • 满足条件。所以需要4位校验位,总码长为 9+4=13 位。
    • 第二步:确定校验位位置

      13位的位号从1到13。2的幂次位置:1, 2, 4, 8。将数据位依次填入非2的幂次位置:3,5,6,7,9,10,11,12,13。

      假设原始信息位为(从左到右按顺序填入):

      位3:信息位1(假设)

      位5:信息位0

      位6:信息位1

      位7:信息位1

      位9:信息位0

      位10:信息位1

      位11:信息位1

      位12:信息位0

      位13:信息位0

      (注意:实际应明确信息位顺序,此处仅为示意。为方便计算,我们假设信息位序列为 B9B8...B1

      ,但海明码中数据位是按顺序填充的。通常考试中会直接给出信息位在各位置的赋值。)

    • 第三步:计算校验位

      使用偶校验,即每个校验位与它所监督的所有位进行异或(⊕)运算,结果为0。

      校验位 P1(位1):监督位1、3、5、7、9、11、13。

      设 P1与这些位满足偶校验:P1⊕P3⊕P5⊕P7⊕P9⊕P11⊕P13= 0。

      代入已知值:P1⊕1⊕0⊕1⊕0⊕1⊕0=P1⊕(1+0+1+0+1+0)= P1⊕1=0 ⇒ P1 = 1 。

      校验位 P2(位2):监督位2、3、6、7、10、11。

      设 P2 与这些位满足偶校验:P2 ⊕ B3 ⊕ B6 ⊕ B7 ⊕ B10 ⊕ B11 = 0。

      代入已知值:P2 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 ⊕ 1 = P2 ⊕ (1+1+1+1+1) = P2 ⊕ 1 = 0 ⇒ P2 = 1。

      校验位 P4(位4):监督位4、5、6、7、12、13。

      设 P4 与这些位满足偶校验:P4 ⊕ B5 ⊕ B6 ⊕ B7 ⊕ B12 ⊕ B13 = 0。

      代入已知值:P4 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 0 = P4 ⊕ 0 = 0 ⇒ P4 = 0。

      校验位 P8(位8):监督位8、9、10、11、12、13。

      设 P8 与这些位满足偶校验:P8 ⊕ B9 ⊕ B10 ⊕ B11 ⊕ B12 ⊕ B13 = 0。

      代入已知值:P8 ⊕ 0 ⊕ 1 ⊕ 1 ⊕ 0 ⊕ 0 = P8 ⊕ 0 = 0 ⇒ P8 = 0。

    • 第四步:组装海明码

      将计算出的校验位填入对应位置,数据位保持不变,得到13位海明码:

      位号:1 2 3 4 5 6 7 8 9 10 11 12 13

      码值:1 1 1 0 0 1 1 0 0 1 1 0 0

5. 纠错过程

  • 接收方收到码字后,同样用偶校验规则重新计算每个校验位的监督结果。若所有结果均为0,则无错;否则,将各校验位的监督结果按二进制组合成一个数,该数就是出错的位置。
  • 例如,若接收到的码字中某一位翻转,则对应的校验位监督结果会为1。将 P8、P4、P2、P1 的结果组成二进制数(P8
    为最高位),得到的值即为错误位号。

6. 特点

  • 能够纠正一位错误(若发生多位错,可能误纠,但通过增加冗余位可以检测多位错)。
  • 常用于内存ECC(Error-Correcting Code)、无线通信等对可靠性要求较高的场景。

四、循环冗余校验码(CRC)

1. 原理

CRC是一种检错能力极强的编码,它通过多项式除法产生校验码。发送方在数据末尾添加冗余码,使整个码字能被一个预先选定的生成多项式整除;接收方用同样的生成多项式去除,若余数为0,则认为传输无误,否则有错。

2. 生成多项式

  • 生成多项式是一个 r 次多项式,记为 G(x)。它的二进制表示是多项式的系数序列(最高次项对应最高位)。
  • 例如:
    G(x) = x4 + x3 + x + 1 对应二进制 11011。
    常见的生成多项式有国际标准,如 CRC-16、CRC-32 等。

3. 编码计算步骤

  • 假设原始数据为 M(x)(二进制序列),生成多项式为 G(x)(r+1 位,最高次幂为 r)。计算校验码的

  • 步骤如下:

    在原始数据后面添加 r 个0,得到 M'(x)(相当于乘以 xr)。

    用 M'(x) 除以 G(x),采用模2除法(即异或运算),得到 r 位余数,这就是CRC校验码。

    用余数替换掉刚才添加的 r 个0,得到最终的发送码字。

    模2除法规则:与普通除法类似,但减法用异或代替(无进位借位)。

4. 示例

  • 原始数据:11001010101,生成多项式 G(x)=x4+x3+x+1(即 11011)。

  • 最高次幂 r=4,所以在数据后加4个0,得到被除数:110010101010000。

  • 进行模2除法:

    复制代码
             _______________
     11011 ) 110010101010000
             11011          (异或)
             -------------
             0010010        (下移一位)
               11011
             -------------
               011001       (下移一位)
                11011
             -------------
                001110      (下移一位)
                  11011
             -------------
                  001010     (下移一位)
                    11011
             -------------
                    00110    (余数,不足4位,高位补0得0011)
  • 余数为 0011,这就是CRC校验码。

  • 将余数添加到原始数据后面,得到发送码字:11001010101 + 0011 = 110010101010011。

5、校验过程

  • 接收方用收到的码字除以相同的生成多项式 11011。若余数为0,则判定传输无误;否则有错。

6. 检错能力

CRC的检错能力非常强,具体表现为:

能检测出所有奇数个错误。

能检测出所有突发长度 ≤ r 的突发错误(r 为校验码位数)。

对于突发长度等于 r+1 的错误,漏检率为 1/2r-1;对于更长的突发错误,漏检率很低。

7. 特点

只能检错,不能纠错(通常通过自动重传请求ARQ机制处理错误)。

广泛应用于数据链路层(如以太网帧尾部使用CRC-32)、存储介质、压缩文件等。

五、三种差错控制编码的对比

  • 在差错控制编码中,奇偶校验码、海明码和CRC在检错能力、纠错能力、冗余位数量以及典型应用方面各有不同,具体对比如下:
  • 奇偶校验码的检错能力较弱,只能检测出奇数个比特错误,对于偶数个错误则无法检出。它不具备纠错能力,仅需1位冗余位。由于其简单性,常被用于串口通信或简单内存校验等对错误容忍度较低的场景。
  • 海明码的检错能力较强,通过增加多个校验位可以检测多位错误,并且能够纠正一位错误(若设计得当,也可检测多位错)。所需的冗余位数量 k
    需满足公式 m + k + 1 ≤ 2k,其中 m
    为信息位长度。海明码通常用于内存ECC(纠错码)和无线通信等对可靠性要求较高的场合。
  • CRC的检错能力极强,能够检测出所有奇数个错误、所有突发长度不超过校验位长度 r
    的突发错误,且对于更长的突发错误也有极低的漏检率。但CRC本身不具备纠错能力,一般需要配合重传机制使用。其冗余位数量等于生成多项式的最高次幂
    r。CRC被广泛应用于数据链路层(如以太网帧校验)、存储介质和压缩文件等场景。

六、网规历年真题

  • 2021年下半年第34题(单选题)

若循环冗余校验码CRC的生成器为10111,则对于数据10100010000计算的校验码应为( )。该CRC校验码能够检测出的突发长度不超过( )。

问题1选项

A. 1101

B. 11011

C. 1001

D. 10011

问题2选项

A. 3

B. 4

C. 5

D. 6

【正确答案】

第1空:A

第2空:B

【试题解析】

数据10100010000后添加4个0(生成多项式最高次幂为4),得到被除数101000100000000,用生成多项式10111进行模2除法,余数为1101,即CRC校验码。CRC校验码的位数r=4,因此能检测出所有突发长度≤4的突发错误。

  • 2021年下半年第35题(单选题)

若循环冗余校验码CRC的生成器为10111,则对于数据10100010000计算的校验码应为( )。该CRC校验码能够检测出的突发长度不超过( )。

【正确答案】

B

  • 2023年下半年第23题(单选题)

使用海明码进行纠错,7位码长(x1 x2 x3 x4 x5 x6 x7),其中4位数据位,3位校验位,其监督关系式为:

C0 = x1 + x3 + x5 + x7

C1 = x2 + x3 + x6 + x7

C2 = x4 + x5 + x6 + x7

如果收到的码字为1000101,则纠错后的码字是( )。

选项

A. 1001101

B. 1000101

C. 1000001

D. 1010101

【正确答案】

D

【试题解析】

将接收码字各位代入监督关系式(按位异或):

C0 = 1⊕0⊕1⊕1 = 1(因为1+0+1+1=1,异或结果为1)

C1 = 0⊕0⊕0⊕1 = 1

C2 = 0⊕1⊕0⊕1 = 0

得到C2C1C0 = 011(二进制),即3,表示第3位出错。将第3位取反,原码字1000101的第3位是0,取反后为1,得到1010101。

  • 2023年下半年第37题(单选题)

利用长度为r+1比特的生成多项式,生成总长为n比特的循环冗余校验码(CRC)码字,可检出不超过( )比特的突发错误。

选项

A. r+n

B. r+1

C. n

D. r

【正确答案】

D

【试题解析】

CRC校验码的检错能力:能检测出所有突发长度不超过校验码位数r的突发错误(即生成多项式最高次幂的数值)。这里r为校验码的位数,等于生成多项式的次数。

  • 2014年下半年第14题(单选题)

海明码是一种纠错编码,一对有效码字之间的海明距离是( )。

选项

A. 两个码字的比特数之和

B. 两个码字的比特数之差

C. 两个码字之间相同的比特数

D. 两个码字之间不同的比特数

【正确答案】

D

【试题解析】

海明距离定义为两个码字之间对应位不同的位数,即两个码字逐位比较后,不同位的个数。例如,码字1001和1101,第2位不同,海明距离为1。因此,正确答案是D。

  • 2018年下半年第10题(单选题)

若信息码字为111000110,生成多项式G(x) =x5+x3+x+1,则计算出的CRC校验码为( )。

选项

A. 01101

B. 11001

C. 001101

D. 011001

【正确答案】

A

【试题解析】

生成多项式x5+x3+x+1 对应的二进制数为 101011

(系数从x 5 到x 0:1,0,1,0,1,1)。

信息码字为 111000110,在末尾添加5个0(因为生成多项式最高次幂为5),得到被除数 11100011000000。

进行模2除法(异或运算)求余数:


101011 ) 11100011000000

101011


100111

101011


011001

000000


110010

101011


110010

101011


110010

101011


110010 (最后得到余数?实际需仔细计算)

相关推荐
坚定的共产主义生产设备永不宕机2 小时前
网络层协议(IPV4报头)
运维·服务器·网络
左左右右左右摇晃2 小时前
Java List集合
笔记
OxyTheCrack2 小时前
【C++】详细拆解std::mutex的底层原理
linux·开发语言·c++·笔记
左左右右左右摇晃2 小时前
红黑树笔记整理
笔记
LuDvei3 小时前
linux TCP/UDP
linux·tcp/ip·udp
王燕龙(大卫)3 小时前
通过文心快码,2小时完成一周的工作量
服务器·网络·tcp/ip
yuyuzururu3 小时前
计算机网络实验作业-IP分组分片和ARP实验
网络·tcp/ip·计算机网络
生活很暖很治愈3 小时前
Linux——TCP通信
linux·运维·tcp/ip
wWYy.3 小时前
详解socket网络编程
网络