📄 crc_table_decode.m
字号:
% Author:lidongshi
% CRC-CCITT decode in table
% 07.11.30
function [original_sequence,err] = crc_table_decode(crc_coded_sequence,crc_ccitt)
%%%%%%%%%%%%%%%%%%%%%%%%% table of CRC-CCITT %%%%%%%%%%%%%%%%%%%%%%%%%%
table_hex = [ '0000';'8000';'2042';'C000';'4084';'A042';'60C6';'E000';
'8108';'C084';'A14A';'E042';'C18C';'E0C6';'E1CE';'F000';
'8108';'0210';'C084';'2252';'A14A';'4294';'E042';'62D6';
'C18C';'8318';'E0C6';'A35A';'E1CE';'C39C';'F000';'E3DE';
'2462';'C108';'0420';'8210';'64E6';'E084';'44A4';'A252';
'A56A';'E14A';'8528';'C294';'E5EE';'F042';'C5AC';'E2D6';
'C18C';'2672';'8318';'0630';'E0C6';'66F6';'A35A';'46B4';
'E1CE';'A77A';'C39C';'8738';'F000';'E7FE';'E3DE';'C7BC';
'48C4';'A462';'6886';'E108';'0840';'8420';'2802';'C210';
'C9CC';'E4E6';'E98E';'F084';'8948';'C4A4';'A90A';'E252';
'A56A';'4AD4';'E14A';'6A96';'8528';'0A50';'C294';'2A12';
'E5EE';'CBDC';'F042';'EB9E';'C5AC';'8B58';'E2D6';'AB1A';
'6CA6';'E18C';'4CE4';'A672';'2C22';'C318';'0C60';'8630';
'EDAE';'F0C6';'CDEC';'E6F6';'AD2A';'E35A';'8D68';'C6B4';
'E1CE';'6EB6';'A77A';'4EF4';'C39C';'2E32';'8738';'0E70';
'F000';'EFBE';'E7FE';'CFFC';'E3DE';'AF3A';'C7BC';'8F78';
'9188';'C8C4';'B1CA';'E462';'D10C';'E886';'F14E';'F108';
'1080';'8840';'30C2';'C420';'5004';'A802';'7046';'E210';
'C9CC';'9398';'E4E6';'B3DA';'E98E';'D31C';'F084';'F35E';
'8948';'1290';'C4A4';'32D2';'A90A';'5214';'E252';'7256';
'B5EA';'E56A';'95A8';'CAD4';'F56E';'F14A';'D52C';'EA96';
'34E2';'C528';'14A0';'8A50';'7466';'E294';'5424';'AA12';
'E5EE';'B7FA';'CBDC';'97B8';'F042';'F77E';'EB9E';'D73C';
'C5AC';'36F2';'8B58';'16B0';'E2D6';'7676';'AB1A';'5634';
'D94C';'ECA6';'F90E';'F18C';'99C8';'CCE4';'B98A';'E672';
'5844';'AC22';'7806';'E318';'18C0';'8C60';'3882';'C630';
'EDAE';'DB5C';'F0C6';'FB1E';'CDEC';'9BD8';'E6F6';'BB9A';
'AD2A';'5A54';'E35A';'7A16';'8D68';'1AD0';'C6B4';'3A92';
'FD2E';'F1CE';'DD6C';'EEB6';'BDAA';'E77A';'9DE8';'CEF4';
'7C26';'E39C';'5C64';'AE32';'3CA2';'C738';'1CE0';'8E70';
'0000';'FF3E';'EFBE';'DF7C';'E7FE';'BFBA';'CFFC';'9FF8';
'E3DE';'7E36';'AF3A';'5E74';'C7BC';'3EB2';'8F78';'1EF0'
];
crctable = hex2dec(table_hex);
%%%%%%%%%%%%%%%%%%%%%%%% CRC decode %%%%%%%%%%%%%%%%%%%%%%%%%%%
crc_coded_sequence = [0 1 0 1 0 0 1 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 0]; % input bits,just for test
% make input bits into bytes, MSB first
len_tmp = size(crc_coded_sequence);
len = len_tmp(2);
len = len/8;
crc_coded_sequence_byte = zeros(1,len); % make bits into bytes
for i = 1:len
for j = 8:-1:1
crc_coded_sequence_byte(i) = crc_coded_sequence_byte(i) + crc_coded_sequence((i-1)*8+(8-j)+1) * 2^(j-1);
end
end
crc_reg = 0;
num = 1;
len = len - 2;
% CRC decode
while len > 0
len = len - 1;
crc_reg_tmp1 = bitxor(crc_reg,crc_coded_sequence_byte(num));
num = num + 1;
crc_reg_tmp1 = uint16(crc_reg_tmp1);
crc_reg_tmp1 = bitand(crc_reg_tmp1,hex2dec('ff'));
crc_reg_tmp1 = double(crc_reg_tmp1);
crc_reg_tmp1 = crc_reg_tmp1 + 1;
crc_reg = bitshift(crc_reg,-8);
crc_reg = bitxor(crc_reg,crctable(crc_reg_tmp1));
end
% check error
if crc_reg == hex2dec('6a96')
% output bits
original_sequence = crc_coded_sequence(1:(len_tmp(2)-16));
err = 0;
else
err = 1;
end
breakpoint = 1;% just for test, set breakpoint
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -