每日精学 034|CRC 循环冗余校验与突发错误检测

2026-09-25

← 技术专题 · 每日精学目录

雷达 · 通信 · 电子战 / 基础精学 034

前向纠错尝试恢复错误数据,而 CRC 只判断数据是否满足代数约束。它计算简单、漏检概率低,常用于帧完整性检查和自动重传系统。

CRC 结果依赖生成多项式、初值、输入位序、是否反射和最终异或。只写 CRC 八而不写这些参数不足以复现实验。

01
模型与符号

M(x):消息多项式(GF2 多项式)

g(x):次数为 r 的生成多项式(GF2 多项式)

R(x):次数小于 r 的余数(GF2 多项式)

C(x):发送码字(GF2 多项式)

r:CRC 校验位数(比特)

B:突发错误长度(比特)

02
模二多项式除法

加法和减法都由异或完成。发送余数定义为

R(x)=x^rM(x)\bmod g(x),

码字为

C(x)=x^rM(x)+R(x),

因此 C(x) mod  g(x)=0。

03
错误检测条件

接收多项式为 C(x)+E(x),检查余数等于 E(x) mod  g(x)。只有错误多项式恰好是 g(x) 的倍数时才会漏检。次数为 r 的生成多项式可检测所有长度不超过 r 的非零突发错误。

04
CRC 八串行更新

对 g(x)=x8+x2+x+1,去掉最高项后的十六进制多项式为 07。按最高位优先输入时,每个比特与寄存器最高位异或形成反馈,再左移并按反馈异或低阶抽头。处理消息后继续输入八个零得到发送余数。

05
物理含义

CRC 把整帧映射为少量校验位。它不是密码学哈希,不能防止主动伪造;其价值在于对随机和突发传输错误提供明确的代数检测能力。多项式选择决定对特定错误模式的保证。

06
固定参数算例

验证对固定字节序列计算 CRC 八余数,再把余数附加到消息并检查零综合值。程序枚举所有长度一至八的连续突发位置和非零内部模式,确认全部被检测,并对更长随机错误统计经验漏检率。

独立双精度参考计算结果
量数值
polynomial hex07
initial value hex00
test message ascii123456789
computed crc hexF4
codeword syndrome hex00
burst patterns checked length 1 to 89471
burst patterns detected9471
random long burst trials80000
random long burst undetected313
图 1:CRC 八多项式除法 已知向量 突发错误保证与随机漏检统计(子图 1)图 1:CRC 八多项式除法 已知向量 突发错误保证与随机漏检统计(子图 2)图 1:CRC 八多项式除法 已知向量 突发错误保证与随机漏检统计(子图 3)图 1:CRC 八多项式除法 已知向量 突发错误保证与随机漏检统计(子图 4)

图 1 CRC 八多项式除法 已知向量 突发错误保证与随机漏检统计

图表保留原报告的独立双精度参考结果。本次补充运行同参数 MATLAB 脚本并通过数值断言;随机算例比较统计关系,参考程序与 MATLAB 的随机样本不作逐点相同的假设。

07
数字实现的边界

模块 crc8_serial.sv 按最高位优先约定在每个有效周期更新八位余数寄存器,并提供同步初始化。testbench 对字符串测试向量逐位输入,核对已知余数、追加余数后的零综合值以及单比特翻转检测。

RTL 只实现本课中可明确量化的确定性数据通路或控制功能。概率分布拟合、浮点函数求值和图形生成留在 MATLAB 参考程序中,防止把软件统计功能误认为可综合硬件。

08
适用范围

CRC 用于数据链路帧、存储块、配置寄存器和协议数据单元的错误检测。接口文件必须明确多项式、初值、反射、最终异或和字节传输顺序。

09
工程上需要注意

  • CRC 不能抵抗能够重新计算校验值的主动篡改。

  • 不同位序和反射约定会产生不同数值余数。

  • 有限帧长度下的最小距离还取决于消息长度和具体多项式。

  • 接收机失去帧边界时,CRC 不能替代同步机制。

CRC 通过 GF(2) 多项式除法生成余数,使合法码字可被生成多项式整除。CRC 八可保证检测不超过八位的非零突发错误,但其参数约定必须完整记录。

内容依据:每日精学第 34 课《CRC 循环冗余校验与突发错误检测》。图表沿用原课固定参数数值结果,属于数值验证,不代表设备实测。

阅读7
分享
写评论...