The CRC syndrome detector outputs the received message frame and a checksum
error vector according to the specified generator polynomial and number of checksums per
frame.

The checksum bits are removed from each subframe, so that the resulting
the output frame length is *n* - *k* ×
*r*, where *n* is the size of the received codeword,
*k* is the number of checksums per frame, and *r* is
the degree of the generator polynomial. The input frame must be evenly divisible by
*k*.

For a specific initial state of the internal shift register:

The received codeword is divided into *k* equal sized
subframes.

The CRC is removed from each of the *k* subframes and compared to
the checksum calculated on the received codeword subframes.

The output frame is assembled by concatenating the subframe bits of the
*k* subframes and then output as a column vector.

The checksum error is output as a binary column vector of length
*k*. An element value of 0 indicates an error-free received
subframe, and an element value of 1 indicates an error occurred in the received
subframe.

For the scenario shown here, a 16-bit codeword is received, a third degree generator
polynomial computes the CRC checksum, the initial state is 0, and the number of checksums
per frame is 2.

Since the number of checksums per frame is 2 and the generator polynomial degree is 3, the
received codeword is split in half and two checksums of size 3 are computed, one for each
half of the received codeword. The initial states are not shown, because an initial state of
`[0]`

does not affect the output of the CRC algorithm. The output frame
contains the concatenation of the two halves of the received codeword as a single vector of
size 10. The checksum error signal output contains a 2-by-1 binary frame vector whose
entries depend on whether the computed checksums are zero. As shown in the figure, the first
checksum is nonzero and the second checksum is zero, indicating an error occurred in
reception of the first half of the codeword.