⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc_table_decode.m

📁 用MATLAB编写的crc校验查表法解码程序
💻 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 + -