CRC二进制除法的一些总结

CRC二进制除法的一些总结使用Matlab生成一个〖0~2〗^60-1的随机数,用2048个12位的多项式对其做除法运算,查看其余数的重复情况。 用足够多的随机数(〖0~2〗^60-1)做第一问的除法运算,观察总体的重复的概率分布。

使用Matlab生成一个 60位的随机数,用2048个12位的多项式对其做除法运算,查看其余数的重复情况。
用足够多的随机数60位随机数做第一问的除法运算,观察总体的重复的概率分布。

第一次用matlab编程。
查找了crc循环冗余的资料,就跟着crc求余数的思路。

Crc方法:把12位多项式当做除数,把多项式系数变成二进制01编码,最高次1, 于是12位多项式相
然后,把生成的随机数也变成二进制,在其后面补R=(多项式长度-1)个0,
再除以多项式,二进制除法就相当于异或计算,不进位。余数的取最后的R位。(做到这里就达到题目的要求了)再将随机数的后R位用余数替换,除以二进制多项式,若余数为0,则正确,不为0,错误。

1.十进制转二进制dec2bin
转化后的二进制格式,要转变成向量矩阵,才能进行矩阵合并,进而补0
oba=dec2bin(a) ;
d=[];
for l=1:length(oba)
d=[d str2num(oba(l))];
end
d;
2.设置一个空矩阵x[],最后填充时,格式要对,还要把向量转成十进制
r=num2str(r)
r=bin2dec (r

  1. 1XXXXXXXXXXX共2048个12位多项式,十进制时2048到4095
    后一位确定为1,所以都不能被2整除所以可以作为判断条件。
  2. [q,v]=deconv()相当于多项式除法,结果可能为负数
    Mod2,模2取余法,求得余数。
    5.用二进制计算要注意之前各种数据格式的转化!!格式不对,会报错。而且有时回报2^53的错
    在这里插入图片描述
    这是crc,运行100次的概率图
    在这里插入图片描述
    这是用十进制直接除100次的概率图在这里插入图片描述
    十进制运行1W次的概率。
    用crc算法,matlab运行太慢,里面有太多的for循环。其核心是多项式除法,即异或除法,所以和10进制除法不一样。

附加crc代码:
x=[];
i=0;
a=unidrnd(2^60-1)
oba=dec2bin(a) ;
d=[];
for l=1:length(oba)
d=[d str2num(oba(l))];
end
d;

for m=2048:4095

     obj=dec2bin(m) ;
     c=[];
    for j=1:length(obj)
        c=[c str2num(obj(j))];
    end
       c;

R=length(c)-1;
[q,r] = deconv([d zeros(1,R)],c);

r=mod(r(end-R+1:end),2);
r=num2str(r);
r=bin2dec®;
i=i+1;
x(i)=r;
end
end
fprintf(‘x=%dx[]’)


第二问
假设用2000个随机数分别求第一个多项式…第2048个多项式,看哪个余数的重复最少。即验证2048个crc多项式哪个最优。
只用把除数的循环提前,再加一个2000次循环就可以了。

把数据导入excel中操作比较方便,筛选出余数个数最多的多项式。111001010011在这里插入图片描述

今天的文章CRC二进制除法的一些总结分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/12975.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注