www.pudn.com > crc16_MATLAB.rar > crc.m
function crc( msg ) % function for row by row encoding of msg if nargin == 0 msg = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 ]; %randint(1,1024); % 产生1024个点的信息序列 end % generator polynomial % generator = [1 1 0 0 1 1 0 1 1]; % 8bit CRC 生成多项式D8+D7+D4+D3+D+1 generator = [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1]; % 16bit CRC 生成多项式D16+D12+D5+1 c = [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]; % x^k multip = conv(c,msg); % 对序列乘以x^16,表示左移16个0 [divid, remainder]=deconv(multip,generator); % 对多项式的除,就等于做反卷积 remainder=mod(remainder(end-15:end),2); % 对除法的余数做模二运算 code=[msg,remainder]; % 只是在原序列后面加上CRC码 deCRC16(code,generator); function deCRC16(code,generator) [divid, remainder]=deconv(code,generator); % 对多项式的除,就等于做反卷积 remainder=mod(remainder(end-15:end),2); % 对除法的余数做模二运算 if isequal(remainder,[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]); msgbox(['CRC[',num2str(code(end-16:end)),']校验正确!']); else msgbox(['CRC校验错误:[',num2str(remainder),']']); end