Accelerating the pace of engineering and science

# comm.CRCGenerator System object

Package: comm

Generate CRC code bits and append to input data

## Description

The CRCGenerator object generates cyclic redundancy code (CRC) bits for each input data frame and appends them to the frame. The input must be a binary column vector.

To generate cyclic redundancy code bits and append them to the input data:

1. Define and set up your CRC generator object. See Construction.

2. Call step to generate cyclic redundancy code (CRC) bits for each input data frame according to the properties of comm.CRCDetector. The behavior of step is specific to each object in the toolbox.

## Construction

H = comm.CRCGenerator creates a cyclic redundancy code (CRC) generator System object™, H. This object generates CRC bits according to a specified generator polynomial and appends them to the input data.

H = comm.CRCGenerator(Name,Value) creates a CRC generator object, H, with each specified property set to the specified value. You can specify additional name-value pair arguments in any order as (Name1,Value1,...,NameN,ValueN).

H = comm.CRCGenerator(POLY,Name,Value) creates a CRC generator object, H. This object has the Polynomial property set to POLY, and the other specified properties set to the specified values.

## Properties

Polynomial

Generator polynomial

Specify the generator polynomial as a binary or integer row vector, with coefficients in descending order of powers. The default is [1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1], which is equivalent to vector [16 12 5 0]. If you set this property to a binary vector, its length must equal the degree of the polynomial plus 1. If you set this property to an integer vector, its value must contain the powers of the nonzero terms of the polynomial. For example, [1 0 0 0 0 0 1 0 1] and [8 2 0] represent the same polynomial, $g\left(z\right)={z}^{8}+{z}^{2}+1$. The following table lists commonly used generator polynomials.

CRC methodGenerator polynomial
CRC-32[32 26 23 22 16 12 11 10 8 7 5 4 2 1 0]
CRC-24 [24 23 14 12 8 0]
CRC-16 [16 15 2 0]
Reversed CRC-16[16 14 1 0]
CRC-8[8 7 6 4 2 0]
CRC-4 [4 3 2 1 0]

InitialConditions

Initial conditions of shift register

Specify the initial conditions of the shift register as a scalar or vector with a binary, double- or single-precision data type. The default is 0. The vector length must equal the degree of the generator polynomial that you specify in the Polynomial property. When you specify initial conditions as a scalar, the object expands the value to a row vector of length equal to the degree of the generator polynomial.

DirectMethod

Direct method (logical)

When you set this property to true, the object uses the direct algorithm for CRC checksum calculations. When you set this property to false, the object uses the non-direct algorithm for CRC checksum calculations. The default value for this property is false.

Refer to the Communications System Toolbox -> System Design -> Error Detection and Correction -> Cyclic Redundancy Check Coding -> CRC Algorithm section to learn more about the direct and non-direct algorithms.

ReflectInputBytes

Reflect input bytes

Set this property to true to flip the input data on a bytewise basis prior to entering the data into the shift register. When you set this property to true, the input frame length divided by the ChecksumsPerFrame property value must be an integer multiple of 8. The default value of this property is false.

ReflectChecksums

Reflect checksums before final XOR

When you set this property to true, the object flips the CRC checksums around their centers after the input data are completely through the shift register. The default value of this property is false.

FinalXOR

Final XOR value

Specify the value with which the CRC checksum is to be XORed as a binary scalar or vector. The object applies the XOR operation just prior to appending the input data. The vector length is the degree of the generator polynomial that you specify in the Polynomial property. When you specify the final XOR value as a scalar, the object expands the value to a row vector with a length equal to the degree of the generator polynomial. The default value of this property is 0, which is equivalent to no XOR operation.

ChecksumsPerFrame

Number of checksums per input frame

Specify the number of checksums that the object calculates for each input frame as a positive integer. The default is 1. The integer must divide the length of each input frame evenly. The object performs the following actions:

1. Divides each input frame into ChecksumsPerFrame subframes of equal size.

2. Prefixes the initial conditions vector to each of the subframes.

3. Applies the CRC algorithm to each augmented subframe.

4. Appends the resulting checksums at the end of each subframe.

5. Outputs concatenated subframes.

For example, you can set an input frame size to 10, the degree of the generator polynomial to 3, InitialConditions property set to 0, and the ChecksumsPerFrame property set to 2. When you do so, the object divides each input frame into two subframes of size 5 and appends a checksum of size 3 to each subframe. In this example, the output frame has a size $10+2×3=16$.

## Methods

 clone Create CRC generator object with same property values getNumInputs Number of expected inputs to step method getNumOutputs Number of outputs from step method isLocked Locked status for input attributes and nontunable properties release Allow property value and input characteristics changes reset Reset states of CRC generator object step Generate CRC code bits and append to input data

## Examples

Encode a signal and then detect the errors.

```    % Transmit two message words of length 6
x = logical([1 0 1 1 0 1 0 1 1 1 0 1]');

% Encode the message words using a CRC generator
hGen = comm.CRCGenerator([1 0 0 1], 'ChecksumsPerFrame',2);
codeword = step(hGen, x);

% Add one bit error to each codeword
errorPattern = randerr(2,9,1).';
codewordWithError = xor(codeword, errorPattern(:));

% Decode messages with and without errors using a CRC decoder
hDetect = comm.CRCDetector([1 0 0 1], 'ChecksumsPerFrame',2);
[tx, err] = step(hDetect, codeword);
[tx1, err1] = step(hDetect, codewordWithError);
disp(err) % err is [0;0], no errors in transmitted message words
disp(err1) % err1 is [1;1], errors in both transmitted message words
```

## Algorithms

This object implements the algorithm, inputs, and outputs described on the CRC-N Generator block reference page. The object properties correspond to the block parameters.