CRC 计算和验证步骤 | AI生成和翻译

Home 2026.03

问题: 在向信息比特串追加 4 个零(使用 generator polynomial 11001)后,如何进行 CRC 计算并在接收端验证?

答案:


完整的 CRC 工作流程:计算与验证

我们全程使用一个具体示例:


步骤 1 — 向消息追加 r 个零

由于 G 的次数为 4,因此向 D 追加 4 个零

原始消息:     10110110
追加后:       101101100000   ← 这是 D × 2^r

步骤 2 — 执行模 2 除法(XOR 长除法)

模 2 二进制除法过程类似于熟悉的长除法,只不过每步使用 XOR 而非减法。

规则:

被除数:101101100000
除数:  11001

逐步 XOR 长除法:

  101101100000
  11001
  ---------
   10111           ← XOR 结果(舍弃前导 0)
   
  101110           ← 取下下一位
  11001
  ---------
   10111           ← XOR 结果

  101110           ← 取下下一位
  11001
  ---------
   10111

  101110           ← 取下下一位
  11001
  ---------
   10111

  101110           ← 取下下一位
  11001
  ---------
   10111

  ...继续直到没有剩余位...

最终余数 (R) = 1110   ← 4 位(= G 的次数)

注意: 余数始终正好有 r 位(此处为 4 位)。如果原始余数少于 r 位,则补前导零。


步骤 3 — 形成发送帧

CRC 位(余数 R)追加到原始数据末尾,形成发送帧,使完整帧正好能被生成多项式 G 整除。

发送帧 T = 原始消息 + CRC 位
T = 10110110 + 1110
T = 101101101110

步骤 4 — 接收端验证

可以通过再次执行相同除法来验证接收消息的有效性,这次使用追加的 CRC 校验值(而非零)。如果没有可检测错误,余数将为零。

在接收端,将整个接收帧 T 除以 G:

接收帧:  101101101110
除数:    11001

执行模 2 除法...

最终余数 = 0000  ✅  ← 未检测到错误

如果发生位错误,例如帧变为 111101101110

接收帧:  111101101110
除数:    11001

最终余数 = 某个非零值 ❌ ← 检测到错误!

如果余数为零,则假设数据单元完整并被接受。非零余数表示发生了错误。


总结表格

步骤 操作 示例
1 向消息追加 r 个零 10110110101101100000
2 使用 XOR(模 2)除以 G 101101100000 ÷ 11001
3 余数 R = CRC 位 R = 1110
4 发送:消息 + R 101101101110
5 (接收端) 将接收帧除以 G 余数 = 0000 → 无错误

关键特性

参考资料:


Back Donate