先學習一下matlab中CRC函數。函數
語法以下:學習
h = crc.generator(‘Polynomial', polynomial, ‘param1', val1, etc.)spa
再看一個例子就比較好容易理解,code
% 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表示爲把結果取反。generator
這裏還有幾個參數也按個人理解說一下。ReflectInput這是個布爾變量,當它爲true時,進入移位寄存器是按byte進去的,因此要求多項式的長度必須是8的倍數。它的default值是false。it
我項目中須要的一個例子以下:class
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;)