gusucode.com > wlan工具箱matlab源码程序 > wlan/wlan/+wlan/+internal/dsssCRCGenerate.m

    function CRC = dsssCRCGenerate(in)
%dsssCRCGenerate DSSS CRC generation
%
%   Note: This is an internal undocumented function and its API and/or
%   functionality may change in subsequent releases.
%
%   CRC = dsssCRCGenerate(IN)
%

%   Copyright 2015-2016 The MathWorks, Inc.

%#codegen
    
    genPoly  =  uint16(4129); % x^16 + x^12 + x^5 + 1
    numBits  =      int8(16); % 16-bit CRC
    shiftReg = uint16(65535); % all ones
    finalXOR = uint16(65535); % all ones

    for i = 1:length(in)
        regOut = bitand(bitshift(shiftReg, 1 - numBits), uint16(1));
        regIn  = bitxor(regOut, uint16(in(i)));

        if regIn
            shiftReg = bitshift(bitxor(bitshift(genPoly, -1), shiftReg), 1);
            shiftReg = shiftReg + 1;
        else
            shiftReg = bitshift(shiftReg, 1);
        end
    end

    shiftReg = bitxor(shiftReg, finalXOR);

    CRC = coder.nullcopy(zeros(numBits, 1, 'int8'));
    for i = 1:numBits
        CRC(i) = bitand(bitshift(shiftReg, -(numBits - i)), 1);
    end

end

% [EOF]