1.概述
CRC(Cyclic Redundancy Check)循环冗余校验码是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定。在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,对通信的可靠性检查就需要‘校验’,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。
2.CRC校验的基本原理:
CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果信息位为n位,检验位为k位,就称为(n+k,n)码。
假设,待编码的有效信息以多项式M(x)表示,将它左移若干位后,用另一个约定的多项式G(x)去除,所产生的余数R(x)就是校验位,有效信息与校验位拼接就构成了CRC码。
当整个CRC码被接收后,仍用约定的多项式G(x)去除,余数为0表明该代码是正确的,若余数不为零表明某一位出错,再进一步由余数值(出错模式)确定出错位置以更正。
3.校验码的编码规则:
1)首先将原信息码(n bit)左移k位,右侧补零;
2)运用一个k+1位的生成多项式G(x)用模2除上面的式子,得到的余数就是校验码;
3)将校验码续接到信息码的尾部,形成CRC码。
4.关于模2运算
模2运算就是加法不考虑进位,减法不考虑借位,
1)加法运算:
0+0=0 0+1=1 1+0=1 1+1=0
2)减法运算:
0-0=0 0-1=1 1-0=1 1-1=0
3)乘法运算
0×0=0 0×1=0 1×0=0 1×1=1
4)除法运算:
0÷1=0 1÷1=1
5.CRC码的计算
掌握了上面的运算规则,您可以尝试计算CRC码了,例如:M(x)=1100, G(x)=1011, (7,4)码
1)M(x)=1100//取信息码
2)M(x)=1100 000//左移位
3)G(x)=1011//取生成多项式
4)R(x)=|M(x)/G(x)|=010//模2除求余数
5)CRC=M(x)+R(x)=1100 010//续接相加
6.CRC码的校验与纠错
(7,4)码出错模式( G(x)=1011 )
如果某一位出错,则余数不为0,对此余数补0后,当做被除数再除下去,余数将按上表的顺序循环。
CRC(Cyclic Redundancy Check)循环冗余校验码是一种数字通信中的常用信道编码技术。其特征是信息段和校验字段的长度可以任意选定。在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,对通信的可靠性检查就需要‘校验’,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。
2.CRC校验的基本原理:
CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果信息位为n位,检验位为k位,就称为(n+k,n)码。
信息位 | 校验位 |
N位 | K位 |
当整个CRC码被接收后,仍用约定的多项式G(x)去除,余数为0表明该代码是正确的,若余数不为零表明某一位出错,再进一步由余数值(出错模式)确定出错位置以更正。
3.校验码的编码规则:
1)首先将原信息码(n bit)左移k位,右侧补零;
2)运用一个k+1位的生成多项式G(x)用模2除上面的式子,得到的余数就是校验码;
3)将校验码续接到信息码的尾部,形成CRC码。
4.关于模2运算
模2运算就是加法不考虑进位,减法不考虑借位,
1)加法运算:
0+0=0 0+1=1 1+0=1 1+1=0
2)减法运算:
0-0=0 0-1=1 1-0=1 1-1=0
3)乘法运算
0×0=0 0×1=0 1×0=0 1×1=1
4)除法运算:
0÷1=0 1÷1=1
5.CRC码的计算
掌握了上面的运算规则,您可以尝试计算CRC码了,例如:M(x)=1100, G(x)=1011, (7,4)码
1)M(x)=1100//取信息码
2)M(x)=1100 000//左移位
3)G(x)=1011//取生成多项式
4)R(x)=|M(x)/G(x)|=010//模2除求余数
5)CRC=M(x)+R(x)=1100 010//续接相加
6.CRC码的校验与纠错
(7,4)码出错模式( G(x)=1011 )
(7,4)码 | A1 | A2 | A3 | A4 | A5 | A6 | A7 | 余数 | 出错位 |
正确码 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 000 | 无 |
错误码 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 001 | 7 |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 010 | 6 | |
1 | 1 | 0 | 0 | 1 | 1 | 0 | 100 | 5 | |
1 | 1 | 0 | 1 | 0 | 1 | 0 | 011 | 4 | |
1 | 1 | 1 | 0 | 0 | 1 | 0 | 110 | 3 | |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 111 | 2 | |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 101 | 1 |