永发信息网

求用matlab生成16位信息位的crc校验码,尽量简单点,怕看不懂

答案:1  悬赏:40  手机版
解决时间 2021-03-24 11:01
  • 提问者网友:杀手的诗
  • 2021-03-23 12:19
求用matlab生成16位信息位的crc校验码,尽量简单点,怕看不懂
最佳答案
  • 五星知识达人网友:山有枢
  • 2021-03-23 13:37
data=randi(2,1,16)-1; %随机16位0,1数据
g=[1 0 0 1 1];%生成多项式g(x)=x4+x+1,crc-4这个最简单会产生4位冗余码
R=length(g)-1; %冗余码长为生成多项式长度减1
[q,r] = deconv([data zeros(1,R)],g);
%为数据右边补K个0,然后用deconv计算数据多项式除以生成多项式
%商是q(长度16),余数是r(长度16+R)
r=mod(r(end-R+1:end),2); %取余数的最后R位mod2运算
code=[data r]; %编码是原来的16位数据后加上R位校验冗余码
%发送的信号就是这16+R位二进制编码


%验证:将接收到的16+R位编码和生成多项式相除
[q,r] = deconv(code,g); 
r=mod(r(end-R+1:end),2);
disp(r)    %如果正确,R位余数全是0

errorcode=code;
errorcode(2)=1-errorcode(2); %假设第二位错了
[q,r] = deconv(errorcode,g);
r=mod(r(end-R+1:end),2);
disp(r)    %R位余数全为0

检验结果
     0     0     0     0
     1     0     0     0


表示结果第一次正确
第二次有误
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯