赞
踩
CRC(Cyclic Redundancy Check,循环冗余校验),是一种数字编码技术,广泛应用于数字通信的传输差错检测,或数字存储的数据完整性检测,最早由W. Wesley Peterson于1961年发表的论文《Cyclic Codes for Error Detection》中提出(以下简称论文)。论文主体分为三个部分:
CRC校验码的基本数学原理、编/解码规则;
CRC校验码检错性能的8条定理及其证明;
CRC校验的两种编码电路。
本文是个人学习W. Wesley Peterson教授的论文的一些整理,如果您喜欢原汁原味,请点击原文链接。当然,本文也包含了原论文之外的一些内容。
重要提示:文中公式如果显示不全,请刷新页面重试。
CRC校验的编码是一种线性分组码的编码方法,将待编码的
求出余式
对于
可以看到,CRC校验编码完成的码字有两个显著特点:
信息位原样不变的出现在编码后码字的高
要检错,我们首先需要搞清楚编码后的二进制序列在传输或存储过程中会出什么错?二进制序列嘛,就其比特而言,两种错:0→1或1→0。如果我们专业一点,用一个
当我们知道错误是如何描述时,那又如何识别错误呢?还记得发送编码时所有的
结果很明显嘛,原来的
不能被
能被
至此我们知道,CRC校验的编码和检错译码将采用完全相同的方法:
但事实却是CRC校验的编/译码电路仅由一个 r 位的串行移位寄存器阵列 + 不多于 r 个的异或门构成,其实现难度(或成本)比相同位宽的“校验和”电路还低。
CRC校验码在工程实际中主要用于“对数字信息(二进制序列)在传输或存储过程中的差错进行检测”。
检错性能(指标)在量化描述时通常称为“检错率”,是一个百分比数值,是一个“样本”与“总和”的比值,但这是一种易混淆的称呼,依据“样本”与“总和”描述的维度,这个“率”将分别表示“比率”与“概率”:
检出比例(
漏检概率(
事实上,对于差错检测而言,几乎不太可能做到检出所有(100%)的错误,意即检测手段给出“无错”结论时,这一结论本身很难做到100%的置信度。因此,人们评价一种检错手段的性能时,通常真正关心的是“未能检出已发生错误”的概率,显然,这个概率越小越好!有鉴于此,本文将对CRC校验码检出比例的分析称为“定性分析”,而将对漏检概率的分析称为“定量分析”。
校验码是一个多项式除以
最简单的 G(x) = x + 1 ,校验位宽度为1,称为CRC-1,等同奇偶校验:
当CRC-1的余数寄存器初值规定为1时,等同奇校验;
当CRC-1的余数寄存器初值规定为0时,等同偶校验。
CRC校验码是典型的二进制线性分组码,当生成多项式选定后,校验位长度
经编码后的消息码在传输或存储过程中,任意位的任意组合都可能发生错误,错误图样(码字)的长度同为
当某个错误图样(码字)位于本CRC校验编码的
包括CRC校验码在内的二进制线性分组码,记为
不可检出比例,
可检出比例,
看到这里,初学者容易产生一个错觉(误解):“CRC校验码的检错性能就是由校验位长度决定的嘛,生成多项式随便选一个就可以了…,还整啥子多项式嘛,还整啥子除法嘛,干脆每个校验位都是前面位的奇偶校验也可以嘛…”。你要只从错误检出比例的角度来看这个问题,还真就是这样的!
IEEE 802.3暨以太网的32位CRC校验是讨论(研究)得比较广泛的一个CRC校验,其码字长度范围512 ~ 12144比特
如果我告诉你:“某次12144比特的传输,这12144比特都是错的,但是CRC校验没检测出这个错误!”
你大概率会说:“你豁我哦,不可能!”,我知道,你说的是那12144比特不可能都是错的。
如果我告诉你:“某次12144比特的传输,其中有1个比特是错的,但是CRC校验没检测出这个错误!”
你大概率会说:“你豁我哦,不可能!”,我知道,你说的是CRC校验肯定能检测出单比特的错误。
所以,其实都知道,虽然都是在
CRC校验定位的目标应用场景是低误码率的数字通信系统,错误比特数量越少的发生概率越大,因此,CRC校验生成多项式的选择原则很单一:就是让经该多项式编码的
[*4.1*]:
随机错误指某个比特是否出错是随机的,独立的,与其它比特是否出错或怎样出错无关。随机错误的检测是纠(检)错编码的主要研究对象。
性能 :CRC校验可检测出所有单个比特的错误。本性能不受码长限制。
条件 :生成多项式
备注1:对应论文的定理1。
备注2:基于CRC校验编码规则生成的线性分组码,其最小汉明距离大于等于2。
以CRC-4/ITU的
以CRC-4/ITU的
以CRC-4/SAE J2716的
对于
以CRC-4/ITU的
以CRC-4/SAE J2716的
如下图所示的 11 种错误图样均不能检出错误(16-bits码长,共计
本条性能是前述检错性能及条件的综合:
综上,形如
突发错误(Burst-Error),指一段(块)连续的错误,通常由通信的外部干扰或存储的介质损坏导致。突发错误以首、末两个错误位界定,不关心此两位之间的比特是否错误,如下图所示:
突发错误所覆盖的全部(含首、末错误位)比特数量,称为突发长度
单比特错误(
任何满足“首1尾1”这一最低要求的CRC校验码生成多项式
一个基于CRC校验原理编码的码字,其长度(含校验位)为
以长度为
形如
其中:1)为双比特错误图样,见前文5.3;2)、3)为奇数个比特错误图样,见前文5.2;4)可写为
一个基于CRC校验原理编码的码字,其长度(含校验位)为
两个突发错误的长度分别为
关于“( c + 1 )应不小于两个突发长度之和”的条件,笔者认为并无理解上的偏差,下图为论文原文:
但前文已证明
讨论:按说“定理8”应是“定理7”的一般化,但似乎有点儿不对?正如W. Wesley Peterson教授所言,定理8的证明很长,我也确实没看明白。
[1]、Dunia Prieto. Study of Undetected Error Probability of IEEE 802.3 CRC-32 code for MTTFPA analysis.
[2]、Philip Koopman. 32-Bit Cyclic Redundancy Codes for Internet Applications.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。