CRC校验 1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。 3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得 V(x)=A(x)g(x)=xRm(x)+r(x); 其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式: g(x)=g0+g1x+ g2x2++g(R-1)x(R-1)+gRxR 发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。 4、CRC校验码软件生成方法: 借助于多项式除法,其余数为校验字段。 例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1 假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001 x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000; 采用多项式除法: 得余数为: 1111 (即校验字段为:1111) 发送方:发出的传输字段为: 1 0 1 1 0 0 1 1111 信息字段 校验字段 接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法) 如果能够除尽,则正确, 给出余数(1111)的计算步骤: 除法没有数学上的含义,而是采用计算机的模二除法,即,除数和被除数做异或运算 1011001 1100100 =111101 111101 110010 = 1111
function x=mycrc(data,divisor,type)
if ((type==1)||(type==2)) n=length(divisor)
appender=[0 0 0 0]
dividend=[data]
if ((type==1))
dividend=[data,appender]
end
dividendA=dividend(1:5)
dividendB=dividend(6:length(dividend))
result=dividendA
while((n-1)~=length(result))
result=bitxor(result,divisor)
while(result(1)==0 && ((n-1)~=length(result)))
result=result(2:length(result))
if ((length(result)<length(divisor)) && (length(dividendB)~=0))
result=[result,dividendB(1)]
dividendB=dividendB(2:length(dividendB))
end
end
end
x=result
if (type==2 & result==zeros(size(result)))
x=[1];
disp('check successful,data uncorrupted')
elseif (type==2)
x=[0]
disp('check failed data is corrupted')
end
else
disp('invalid type entered in 3rd parameter it should either be 1 or 2')
end
x=mycrc(data,divisor,type)
x : 输出
data : 输入
divisor: 8 或者 16
type : 1 或者 2
已知生成多项式生成多项G(X)=X4+X+1,则对诮的代码为10011,冗余位为4位,则被除数为11010110110000,除数为10011,进行模2除法求余式。
110000101
10011 11010110110000
10011
10011
10011
10110
10011
10100
10011
1110
求得校验字段1110
以上就是关于简述循环冗余码CRC 校验方法全部的内容,包括:简述循环冗余码CRC 校验方法、求一个用matlab生成的16位二进制信号的crc校验码的代码、向高手求助,关于校验字段及CRC码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)