CRC二进制除法的一些总结

使用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在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值