循环冗余校验(cyclicredundancy check,CRC)对传输序列进行一次规定的除法操作,将除法操作的余数附加在传输信息的后面。在接收端,也对收到的数据做相同的除法。如果接收端除法得到的结果其余数不是零,就表明发生了错误。

循环冗余校验是将要发送的数据位序列当作一个多项式f(x)的系数,f(x)的系数只有1与0两种形式。在发送方用收发双方预定的约定的生成多项式G(x)去除,求得一个余数多项式。将余数多项式加到数据多项式之后发送到发送端。这里的除法是错位不减的模2减法,相当于异或运算。接收端采用同样的生成多项式G(x)去除接收到的数据多项式f'(x),如果传输无差错,则接收端除法运算f'(x)/G(x)的结果,其余数为零。否则就认为出现了差错。

基于除法的循环冗余校验,其计算量大于奇偶与求和校验,其差错检测的有效性也比较高,它能够检测出大约99.95%的错误。

程序流程图

MATLAB程序

本文程序以CRC-16 (X^16+X^15+X^2+1)为例

%输入想要转化的数据
data1=input('Please input the num U want to transform:');

%将十进制数转化成二进制数输出
dec=[];
i=1;
while(data1)
    if mod(data1,2)
     dec=[1,dec];
    else
     dec=[0,dec];
    end
    data1=(data1-mod(data1,2))./2;
end
disp('The below is your num in binary system')
display(num2str(dec))

% 校验多项式CRC-16
polynomial = [1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1]; 

%进行异或运算
lpol= length(polynomial);
data_dec=dec;
lnum=length(data_dec);
data=[data_dec,zeros(1,lpol-1)];
lpol= length(polynomial);
n=find(data==1,1);
while n<=lnum
for i=1:lpol
    if polynomial(i)==data(n+i-1)
        data(n+i-1)=0;
    else
        data(n+i-1)=1;
    end
end
n=find(data==1,1);
end

%拼接计算结果并显示
result=[data_dec,data(lnum+1:end)];
disp('The polynomial used to CRC is X^16+X^15+X^2+1')
disp('The transform result is')
disp(num2str(result))

%进行结果校验
result2=result;
n=find(result2==1,1);
while n<lnum+lpol-1
for i=1:lpol
    if polynomial(i)==result2(n+i-1)
        result2(n+i-1)=0;
    else
        result2(n+i-1)=1;
    end
end
n=find(result2==1,1);
end
disp('The CRC result is')
disp(num2str(result2))

代码运行效果

Please input the num U want to transform:20201503113

The below num is your num in binary system

1 0 0 1 0 1 1 0 1 0 0 0 0 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1

The polynomial used to CRC is X^16+X^15+X^2+1

The transform result is

1 0 0 1 0 1 1 0 1 0 0 0 0 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 1 0 1 0 0 1 0 1 1 0 1

The CRC result is

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


版权声明:本文为yshln原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/yshln/article/details/128568959