网上大部分的程序都是采用字节方式实现的,在我的程序中用起来不方便,所以打算采用python中的list数据结构自己实现按照比特运算的方式实现一下。
《GB/T 7496-1987》中关于CRC校验的描述:
AIS采用的CRC-16校验方法为CRC-16 CCITT(0xFFFF)标准。
MATLAB的实现代码为:
list_in=[1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0,
0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0,
0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0];
L=length(list_in);
CRC=[1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1,];
poly_list=[0,0,0,1, 0,0,0,0, 0,0,1,0, 0,0,0,1];
for index=1:L
CRC=[CRC,0];
if bitxor(list_in(index), CRC(1)) == 1
CRC=CRC(2:17);
CRC=bitxor(CRC,poly_l