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