校验码

169 阅读6分钟

奇偶校验码

奇偶校验码是一种简单的错误检测机制,用于确保数据在传输或存储过程中没有发生错误。它通过在数据中添加一个额外的位(称为校验位)来实现。根据数据的奇偶性质,校验位可以帮助检测到单个比特错误。 奇偶校验码的类型:

  1. 奇校验(Odd Parity) :如果数据中1的数量是偶数,则校验位设置为1,使得总的1的数量变为奇数;如果数据中1的数量是奇数,则校验位设置为0,使得总的1的数量仍然为奇数。
  2. 偶校验(Even Parity) :如果数据中1的数量是奇数,则校验位设置为1,使得总的1的数量变为偶数;如果数据中1的数量是偶数,则校验位设置为0,使得总的1的数量仍然为偶数。

奇偶校验码的原理

奇偶校验码的原理基于对数据中二进制位(bit)数量的奇偶性(Parity)进行检测和比较。具体步骤如下:

  1. 数据准备:将要发送或存储的二进制数据准备好,例如,数据为1011001

  2. 计算校验位

    • 奇校验(Odd Parity) :计算数据中1的数量。如果数量为偶数,则校验位设为1;如果数量为奇数,则校验位设为0。这样,总的1的数量保持为奇数。例如,对于数据1011001,1的数量是4(偶数),所以校验位设为1,使总的1的数量变为5(奇数)。
    • 偶校验(Even Parity) :计算数据中1的数量。如果数量为奇数,则校验位设为1;如果数量为偶数,则校验位设为0。这样,总的1的数量保持为偶数。例如,对于数据1011001,1的数量是4(偶数),所以校验位设为0,使总的1的数量保持为4(偶数)。
  3. 数据传输或存储:将原数据和计算好的校验位一起传输或存储。例如,数据1011001(奇校验)会变成10110011,数据1011001(偶校验)会变成10110010

  4. 接收端校验

    • 接收端收到数据和校验位后,再次计算数据中1的数量,并根据奇偶校验的规则检查计算出的结果与接收到的校验位是否匹配。
    • 如果匹配,说明数据传输或存储过程中没有发生单比特错误;如果不匹配,说明数据中发生了单比特错误。

例子

假设我们要传输数据1101010,我们采用奇校验:

  1. 计算校验位:原数据中有4个1(偶数),所以校验位设为1。传输的数据变为11010101

  2. 数据传输:传输11010101

  3. 接收端校验

    • 接收到数据11010101
    • 计算数据中1的数量:5个1(奇数)。
    • 校验位是1,总数是奇数,符合奇校验规则,数据无误。

如果数据在传输过程中发生单比特错误,例如变为11010100

  1. 接收端校验

    • 接收到数据11010100
    • 计算数据中1的数量:4个1(偶数)。
    • 校验位是1,总数是偶数,不符合奇校验规则,检测到错误。

通过这种方式,奇偶校验码可以有效地检测到单比特错误,但无法检测到多比特错误或纠正任何错误。

码距

码距(Hamming Distance)是用于量化两个等长字符串或二进制码之间差异的度量方式。具体来说,码距是两个码字(或字符串)中相应位置上不同的符号(或比特)的数量。

码距的计算

假设我们有两个二进制码字 A 和 B,它们的码距 d(A,B) 定义为:

截屏2024-07-16 16.06.46.png

其中:

  • ∑ 表示求和。
  • i 从 1 到 n 遍历,n 是码字的长度。
  • Ai​ 和 Bi​ 分别表示码字 A 和 B 的第 i 个比特。
  • ⊕ 表示异或操作(XOR)。
计算步骤

假设我们有两个二进制码字 A=1011101 和 B=1001001,我们要计算它们的码距:

  1. 将两个码字按位对齐
A: 1011101
B: 1001001
  1. 逐位进行异或运算
1 ⊕ 1 = 0
0 ⊕ 0 = 0
1 ⊕ 0 = 1
1 ⊕ 1 = 0
1 ⊕ 0 = 1
0 ⊕ 0 = 0
1 ⊕ 1 = 0
  1. 记录异或结果
结果: 0010100
  1. 统计结果中1的数量
0010100 中有 2 个 1

所以,码字 A=1011101 和 B=1001001 之间的码距 d(1011101,1001001)=2。

码距的意义

码距可以帮助我们理解编码系统的错误检测和纠正能力。更大的码距意味着编码系统能检测和纠正更多的错误。

循环冗余校验码

CRC的编码方式是:在k位信息位之后拼接r位校验码

  1. 发送方把k位信息位生成多项式G(X)经过循环模二除法得到r位校验位。此时k+r位的校验码对生成多项式G(X)经过循环模二除法,结果为0。
  2. 接收方拿到校验码后,对生成多项式G(X)经过循环模二除法,结果为0则数据无误。否则,只要有任意个数据位错误,结果都不为0
  3. 不同位置的数据出错,结果可能相同,所以无法纠错。

海明校验码

海明码校验位的数量公式:2ʳ≧ m+r+1。r是校验位数量,m是信息位数量。 例:求信息1011的海明码。

(1)2ʳ=4+r+1,确定校验码为3位:2³≧ 4+3+1

(2)列出校验位公示。

先列出数据位下标的二进制凑权公式:7=+2¹+2⁰,6=+2¹,5=+2⁰,3=2¹+2⁰; 再列出校验位值的计算公式:r₂=I₄⊕I₃⊕I₂;r₁=I₄⊕I₃⊕I₁;r₀=I₄⊕I₂⊕I₁;

(3)根据公式得r₂=0,r₁=0,r₀=1

(4)将数据加入表格,如表所示。

7654321位数
I₄I₃I₂r₂I₁r₁r₀信息位
1010101校验位