雷达 · 通信 · 电子战 / 基础精学 034
前向纠错尝试恢复错误数据,而 CRC 只判断数据是否满足代数约束。它计算简单、漏检概率低,常用于帧完整性检查和自动重传系统。
CRC 结果依赖生成多项式、初值、输入位序、是否反射和最终异或。只写 CRC 八而不写这些参数不足以复现实验。
M(x):消息多项式(GF2 多项式)
g(x):次数为 r 的生成多项式(GF2 多项式)
R(x):次数小于 r 的余数(GF2 多项式)
C(x):发送码字(GF2 多项式)
r:CRC 校验位数(比特)
B:突发错误长度(比特)
加法和减法都由异或完成。发送余数定义为
码字为
因此 C(x) mod g(x)=0。
接收多项式为 C(x)+E(x),检查余数等于 E(x) mod g(x)。只有错误多项式恰好是 g(x) 的倍数时才会漏检。次数为 r 的生成多项式可检测所有长度不超过 r 的非零突发错误。
对 g(x)=x8+x2+x+1,去掉最高项后的十六进制多项式为 07。按最高位优先输入时,每个比特与寄存器最高位异或形成反馈,再左移并按反馈异或低阶抽头。处理消息后继续输入八个零得到发送余数。
CRC 把整帧映射为少量校验位。它不是密码学哈希,不能防止主动伪造;其价值在于对随机和突发传输错误提供明确的代数检测能力。多项式选择决定对特定错误模式的保证。
验证对固定字节序列计算 CRC 八余数,再把余数附加到消息并检查零综合值。程序枚举所有长度一至八的连续突发位置和非零内部模式,确认全部被检测,并对更长随机错误统计经验漏检率。
| 量 | 数值 |
|---|---|
| polynomial hex | 07 |
| initial value hex | 00 |
| test message ascii | 123456789 |
| computed crc hex | F4 |
| codeword syndrome hex | 00 |
| burst patterns checked length 1 to 8 | 9471 |
| burst patterns detected | 9471 |
| random long burst trials | 80000 |
| random long burst undetected | 313 |
图 1 CRC 八多项式除法 已知向量 突发错误保证与随机漏检统计
图表保留原报告的独立双精度参考结果。本次补充运行同参数 MATLAB 脚本并通过数值断言;随机算例比较统计关系,参考程序与 MATLAB 的随机样本不作逐点相同的假设。
模块 crc8_serial.sv 按最高位优先约定在每个有效周期更新八位余数寄存器,并提供同步初始化。testbench 对字符串测试向量逐位输入,核对已知余数、追加余数后的零综合值以及单比特翻转检测。
RTL 只实现本课中可明确量化的确定性数据通路或控制功能。概率分布拟合、浮点函数求值和图形生成留在 MATLAB 参考程序中,防止把软件统计功能误认为可综合硬件。
CRC 用于数据链路帧、存储块、配置寄存器和协议数据单元的错误检测。接口文件必须明确多项式、初值、反射、最终异或和字节传输顺序。
CRC 不能抵抗能够重新计算校验值的主动篡改。
不同位序和反射约定会产生不同数值余数。
有限帧长度下的最小距离还取决于消息长度和具体多项式。
接收机失去帧边界时,CRC 不能替代同步机制。
CRC 通过 GF(2) 多项式除法生成余数,使合法码字可被生成多项式整除。CRC 八可保证检测不超过八位的非零突发错误,但其参数约定必须完整记录。
内容依据:每日精学第 34 课《CRC 循环冗余校验与突发错误检测》。图表沿用原课固定参数数值结果,属于数值验证,不代表设备实测。