• matlab中CRC的函数使用


    先学习一下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 ',encoded(cnt));

      end

    fclose(fid;)

  • 相关阅读:
    Java Web开发 之VO、PO、DTO等收集
    Hive的安装与使用
    各种默认回车提交表单
    A/B Problem
    A+B Problem II
    A+B Problem IV
    关于521
    劝你别做
    无主之地1
    A+B Problem(V)
  • 原文地址:https://www.cnblogs.com/ylsm-kb/p/10554645.html
Copyright © 2020-2023  润新知