Engee 文档

通用 CRC 生成器

根据生成多项式的 CRC 码位生成器。

类型: GeneralCRCGenerator

图书馆中的路径:

/Communication Systems/Error Detection And Correction/CRC/General CRC Generator

说明

通用 CRC 生成器 块为每个输入数据帧生成循环冗余校验(CCS)位,并将其附加到数据帧中。

端口

输入

# IN_1 — 输入信号
二进制列向量

Details

以二进制列向量形式指定的输入信号。输入帧的长度必须是 *每帧校验和 * 参数值的倍数。

数据类型

Float64|Boolean.

复数支持

输出

# OUT_1 — 输出码元帧
二进制列向量

Details

以二进制列向量形式返回的编码词输出帧,继承了输入信号的数据类型。输出是输入数据帧,并附加 CRC 位序列。

输出帧的长度为 ,其中 是输入帧的大小, 是帧中校验和的个数, 是生成多项式的阶数。

数据类型

Float64 | Boolean.

复数支持

参数

参数

# 发生器多项式 — 生成多项式
String

Details

CRC 算法的生成多项式,以下列方式之一指定:

  • 多项式的符号表示。例如z^3 + z^2 + 1`。

  • 二进制向量,其元素按幂次排列,指定生成多项式的系数。该向量的长度为 ( ),其中 是生成多项式的阶数。例如`[1 1 0 1 1]` 表示多项式

  • 一个整数向量,按降序包含多项式非零项的度数 。例如`[3 2 0 0]` 表示多项式

默认使用 CRC-16-CCITT 生成多项式。

下表列出了一些常用的生成多项式。

CRC 算法名称

生成多项式 CRC-31

CRC-32

z^32 + z^26 + z^23 + z^22 + z^16 + z^12 + z^11 + z^10 + z^8 + z^7 + z^5 + z^4 + z^2 + z + 1

CRC-24

z^24 + z^23 + z^14 + z^12 + z^8 + 1.

CRC-16

z^16 + z^15 + z^2 + 1

CRC-16-CCITT

z^16 + z^12 + z^5 + 1

反向 CRC-16

z^16 + z^14 + z + 1

CRC-8

z^8 + z^7 + z^6 + z^4 + z^2 + 1

CRC-4

z^4 + z^3 + z^2 + z + 1

示例:z^7 + z^2 + 1'[1 0 0 0 0 0 0 1 0 1 0 1][7 2 0 0] 表示同一个多项式,

默认值

z^16 + z^12 + z^5 + 1

程序使用名称

GeneratorPolynomial

可调谐

可计算

# 初始状态 — 内部移位寄存器的初始状态

Details

内部移位寄存器的初始状态,指定为二进制标量或二进制向量字符串,长度等于生成多项式的阶数。

标量值将扩展为长度等于生成多项式阶数的矢量字符串。

默认值

0

程序使用名称

InitialStates

可调谐

可计算

# 直接法 — 采用直接算法计算校验和
Logical

Details

选择该复选框可使用直接算法计算 CRC 校验和。如果不选中,设备将使用间接算法计算 CRC 校验和。

默认值

false (关掉)

程序使用名称

DirectMethod

可调谐

可计算

# 反映输入字节数 — 启用输入字节反射
Logical

Details

选择该复选框可在将数据输入移位寄存器前逐个字节翻转输入数据。

  • 如果选中*反映输入字节*复选框,则输入帧长度除以*每帧校验和*值必须是`8`的整数倍。

  • 如果未选中*反映输入字节*参数,程序块不会翻转输入数据。

默认值

false (关掉)

程序使用名称

ReflectInputBytes

可调谐

可计算

# 在最终 XOR 之前反映校验和 — 在最后一次 XOR 操作前启用校验和反射
Logical

Details

选择该复选框可在输入数据完全通过移位寄存器后,围绕其中心翻转 CRC 校验和。

  • 如果取消选中 在最终 XOR 之前反映校验和,则程序块不会翻转 CRC 校验和。

默认值

false (关掉)

程序使用名称

ReflectChecksums

可调谐

可计算

# 最终 XOR — 最后一次 XOR 运算

Details

指定为二进制标量或二进制字符串向量的最后一次 XOR 运算,其长度等于生成多项式的阶数。

XOR 操作是使用 Final XOR 参数值与计算出的 CRC 校验位进行的,然后再将其添加到输入数据中。标量值将扩展为长度等于生成多项式阶数的字符串矢量。

  • Final XOR 参数的 0 值等同于无 XOR 操作。

默认值

0

程序使用名称

FinalXOR

可调谐

可计算

# 每帧校验和 — 为每个帧计算的校验和数
Int64 integer

Details

为每个帧计算的校验和的个数,以正整数表示。

默认值

1

程序使用名称

ChecksumsPerFrame

可调谐

可计算

算法

直接和间接 CRC 算法

通用 CRC 生成器 设备支持使用间接或直接 CRC 算法生成 CRC 校验和。

间接 CRC 算法

间接 CRC 算法采用与多项式 相对应的二进制数据向量,并添加与多项式 相对应的 位校验和。

输入向量和校验和的级联对应于多项式 ,因为乘以 相当于将输入向量 向左移动几个比特。算法选择校验和 ,使 是一个度数为 的预定多项式 的倍数,该多项式称为_生成多项式_。

算法将 除以 ,并将校验和设置为与余数对应的二进制向量。也就是说,如果 ,其中 是一个度数小于 的多项式,那么校验和就是与 对应的二进制向量。如有必要,算法会在校验和中添加零,使其长度为

CRC 生成函数实现了 CRC 算法的传输阶段,其功能如下:

  1. 将输入数据矢量向左移动 位,并将得到的多项式除以

  2. 将校验和设置为长度为 的二进制向量,相当于步骤 1 的余数。

  3. 将校验和与输入向量相加。结果就是输出向量。

如上所述,CRC 检测功能计算整个输入向量的校验和。

CRC 算法使用二进制矢量来表示二进制多项式,按强度从大到小的顺序排列。例如,向量 [1 1 0 1 1] 表示多项式

general crc generator 1

比特按照从最低比特到最高比特的顺序进入线性反馈移位寄存器(线性反馈移位寄存器,LFSR)。输入信息比特序列表示信息多项式系数的幂次降序。 是生成多项式的阶数,信息矢量用 0 进行扩充,以冲出 LFSR。如果左寄存器级 d(1) 的输出为 1,则对移位寄存器的位与生成多项式的系数进行 XOR 运算。当增强信息序列完全通过 LFSR 时,寄存器中将保留一个校验和 [d(1) d(2) …​ d(r)]。这是二进制长除法的实现,其中信息序列是被除数(分子),多项式是除数(分母)。CRC 校验和是除法运算的余数。

直接 CRC 算法

框图显示了直接 CRC 算法。

general crc generator 2 cn

这里_信息块输入_是 ,_代码字输出_是

直接 CRC 编码的初始阶段发生在三个开关处于 的位置时。算法向编码器输入信息位 。这些比特是输出编码字的第一个 比特。同时,算法将 位发送到线性反馈移位寄存器(LFSR)。当系统将信息的所有 位完全传输到线性反馈移位寄存器后,开关移动到 。在这里,LFSR 包含多项式除法的数学余数。这些比特将从 LFSR 中移出,成为码字输出端的剩余比特(校验和)。

CRC 发生器的操作

CRC 发生器根据指定的生成多项式和每帧校验和的数量,将 CRC 校验和添加到输入帧中。

对于给定的内部移位寄存器初始状态和 每个输入帧的校验和:

  1. 输入信号被分为大小相等的 子帧。

  2. 每个 子帧对应初始状态向量中的一个前缀。

  3. CRC 算法应用于每个子帧。

  4. 得到的校验和被添加到每个子帧的末尾。

  5. 子帧合并后作为矢量列输出。在这里显示的情况下,输入 10 位帧,生成多项式 计算 CRC 校验和,初始状态为 "0",每帧的校验和数量为 "2"。

general crc generator 3 cn

输入帧被分为两个大小为 5 的子帧,计算出大小为 3 的校验和并添加到每个子帧中。初始状态没有显示,因为初始状态"[0]"不会影响 CRC 算法的结果。传输码字的输出帧为 5 + 3 + 5 + 5 + 3 = 16 比特。

文献

  1. Sklar, Bernard."数字通信:基础与应用》。Englewood Cliffs, N.J.: Prentice-Hall, 1988.

  2. Wicker, Stephen B. "Error Control Systems for Digital Communication and Storage." Upper Saddle River, N.J.: Prentice Hall, 1995.