CRC 校验码的基本思想是利用线性编码理论, 在发送端根据要传送的 k 位二进制码序
列,以一定的规则产生一个校验用的监督码(既 CRC 码)r 位,并附在信息后边,构成一个
新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和 CRC 码之间所
遵循的规则进行检验,以确定传送中是否出错。
CRC 的本质是模-2 除法的余数,采用的除数不同,CRC 的类型也就不一样。通常,CRC
的除数用生成多项式来表示。最常用的 CRC 码的生成多项式有 CRC16,CRC32.
CRC 校验码的编码方法是用待发送的二进制数据 t(x)除以生成多项式 g(x),将
最后的余数作为 CRC 校验码。其实现步骤如下:
设 待 发 送 的 数 据 块 是 m 位 的 二 进 制 多 项 式 t ( x ) , 生 成 多 项 式 为 r 阶 的
g(x)。在数据块的末尾添加 r 个 0,数据块的长度增加到 m+r 位。用生成多项式
g(x)去除 ,求得余数为阶数为 r-1 的二进制多项式 y(x)。此二进制多项式
y(x)就是 t(x)经过生成多项式 g(x)编码的 CRC 校验码。在数据末尾加上求得
y(x)得到二进制多项式 。 就是包含了 CRC 校验码的待发送字符串。从 CRC 的编
码规则可以看出,CRC 编码实际上是将代发送的 m 位二进制多项式 t(x)转换成了
可以被 g(x)除尽的 m+r 位二进制多项式,所以解码时可以用接受到的数据去除
g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程
中肯定存在错误。
CRC 码生成程序结果
CRC 码校验结果
附录 1:
CRC 校验码产生程序代码
funcon [ crc ] = generate_CRC( varargin )
%CRC 校验码产生程序
% 输入:data:传输码
% gen:多项式
% 输出:CRC 冗余校验码
% 举例:generate_CRC([1010],[1011]);