奇偶校验(Parity Check)
是一种简单的错误检测方法,用于在数据传输过程中检测是否发生了位错误。奇偶校验主要用于单个比特错误检测,并通过增加一个额外的校验位来实现。
奇偶校验的基本概念
在使用奇偶校验时,数据的每一个字节或比特序列都会附加一个额外的比特,这个比特称为校验位 。根据校验位的值,数据传输可以采用奇校验 或偶校验。
-
奇校验 (Odd Parity):确保数据中
1
的个数是奇数 。如果数据中1
的个数是偶数,则校验位设置为1
,使得数据中的1
的个数变为奇数;如果数据中1
的个数本来就是奇数,则校验位设置为0
,保持奇数个1
。 -
偶校验 (Even Parity):确保数据中
1
的个数是偶数 。如果数据中1
的个数是奇数,则校验位设置为1
,使得数据中的1
的个数变为偶数;如果数据中1
的个数本来就是偶数,则校验位设置为0
,保持偶数个1
。
奇偶校验的步骤
-
发送方:
-
计算数据中的
1
的个数。 -
根据选择的校验类型(奇校验或偶校验),为数据生成一个校验位。
-
将数据和校验位一起发送给接收方。
-
-
接收方:
-
接收数据并检查校验位。
-
计算接收到的数据中
1
的个数(包括校验位)。 -
如果数据满足奇校验或偶校验的要求,则认为数据没有错误;如果不满足,则认为数据可能存在错误。
-
举个例子
假设我们使用偶校验 ,并且要传输的数据是一个字节:1011001
。
-
这个字节中有4个
1
(偶数个),因此,校验位应为0
,保持数据中1
的个数是偶数。 -
发送的数据将是:
10110010
(最后一个0
是校验位)。
如果数据传输过程中发生了错误,接收方会接收到一个数据,比如:10110011
。
-
这个数据中有5个
1
(奇数个),不符合偶校验的要求。 -
因此,接收方会检测到错误,通常会请求重新传输数据。
奇偶校验的优缺点
优点:
-
简单:奇偶校验非常简单,计算和实现容易。
-
低成本:不需要额外的硬件支持,容易在现有的通信系统中实现。
-
实时检测:能在数据传输过程中实时检测单比特错误。
缺点:
-
只能检测单比特错误:奇偶校验只能检测出单个比特错误,无法检测到多个比特错误。
-
不能纠正错误:它只能检测错误,但不能自动纠正错误。一旦发现错误,必须重新传输数据。
-
有限的错误检测能力:如果数据发生多个错误,可能无法检测到。
CRC(循环冗余校验,Cyclic Redundancy Check)


我们有待发送的信息 101001
和生成多项式 G(x) = x^3 + x^2 + 1
。这个生成多项式可以用二进制表示为 1101
(即 x^3 + x^2 + 1
对应的多项式的系数)。
接下来,我们可以按照以下步骤使用 CRC 来生成校验码。
步骤 1:将数据和生成多项式准备好
-
待发送数据 :
101001
。 -
生成多项式 :
1101
(对应1*x^3 +
1*x^2 +
0*x^1 +
1*x^0
)。
首先,将数据 101001
后面加上生成多项式的位数减去1的零。因为生成多项式 1101
是4位,因此我们要在数据后面加上3个零。
- 添加零后的数据 :
101001000
。
步骤 2:执行CRC除法
接下来,我们使用异或运算(即多项式除法)来计算CRC校验码。
-
数据 :
101001000
(即101001
+ 3个零) -
生成多项式 :
1101
。
我们从数据的最左边开始,用生成多项式对数据进行异或运算。

步骤 3:发送的数据
将原始数据和CRC校验码连接在一起,得到最终要发送的数据
发送码字 :原数据 + 余数 → 101001001
