• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

matlab中CRC的函数使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

先学习一下matlab中CRC函数。

       语法如下:

       h = crc.generator(‘Polynomial\', polynomial, ‘param1\', val1, etc.)

       再看一个例子就比较好容易理解,

      

% Construct a CRC generator with a polynomial defined
% by x^3+x+1, with zero initial states,
% and with an all-ones final XOR value:
h = crc.generator(\'Polynomial\', [1 0 1 1], ...
                   \'InitialState\', [0 0 0], ...
                   \'FinalXOR\', [1 1 1])

 


 


       Polynomial指的是CRC的生成多项式,上面的是二进制表示,同样可以用十六进制表示\'0xb\',和上面是等效的,InitialState指的是CRC的初始值,FinalXOR指的是最后的输出需不需要做异或,如果为全零其实就是保持原来的值,全1表示为把结果取反。

       这里还有几个参数也按我的理解说一下。ReflectInput这是个布尔变量,当它为true时,进入移位寄存器是按byte进去的,所以要求多项式的长度必须是8的倍数。它的default值是false。

 

       我项目中需要的一个例子如下:

h = crc_generator(\'Polynomial\',[1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1],\'InitialState\',[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0],\'FinalXOR\',[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]);

%这个多项式为x^16+x^15+x^2+1,注意后面\'InitialState\'和\'FinalXOR\'的值都是16个0.

crc_din = 3;%这里是十进制,而且可以用load一个文件后面的几行就是为了load一个文件而处理的

crc_din_bi = de2bi(crc_din,2);%转换成2位的二进制,后面的2指的是2位

crc_din_trans = transpose(crc_din_bi);%这个函数的意思就是把crc_din_bi这个矩阵翻转,比如原来crc_din_bi是一个1x2的矩阵,翻转后变成2x1,前面是行数,后面是列数

crc_din_trans_reshape = reshape(crc_din_trans,[],1);%中间是一个方括号。reshaple的意思是把一个矩阵串起来,按照一列串起来

encoded = generate(h,crc_din_trans_reshape);%执行CRC

 

这个程序运行的结果是

1%原数据

1%原数据

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

后面16位就是输出的CRC值,其实就是0xa

如果要输出一个文件

fid = fopen(\'crc_out.txt\',\'w+\');

  for cnt = 1 : size(encoded,1)

     fprintf(fid,\'%-d\n\',encoded(cnt));

  end

fclose(fid;)


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap