General CRC Generator
根据生成多项式的 CRC 码位生成器。
类型: GeneralCRCGenerator
图书馆中的路径:
|
参数
参数
#
Generator polynomial —
生成多项式
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 |
|
CRC-24 |
|
CRC-16 |
|
CRC-16-CCITT |
|
反向 CRC-16 |
|
CRC-8 |
|
CRC-4 |
|
示例:z^7 + z^2 + 1'
、[1 0 0 0 0 0 0 1 0 1 0 1]
和 [7 2 0 0]
表示同一个多项式, 。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
# Initial states — 内部移位寄存器的初始状态
Details
内部移位寄存器的初始状态,指定为二进制标量或二进制向量字符串,长度等于生成多项式的阶数。
标量值将扩展为长度等于生成多项式阶数的矢量字符串。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
#
Direct method —
采用直接算法计算校验和
Logical
Details
选择该复选框可使用直接算法计算 CRC 校验和。如果不选中,设备将使用间接算法计算 CRC 校验和。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
Reflect input bytes —
启用输入字节反射
Logical
Details
选择该复选框可在将数据输入移位寄存器前逐个字节翻转输入数据。
-
如果选中*反映输入字节*复选框,则输入帧长度除以*每帧校验和*值必须是`8`的整数倍。
-
如果未选中*反映输入字节*参数,程序块不会翻转输入数据。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
Reflect checksums before final XOR —
在最后一次 XOR 操作前启用校验和反射
Logical
Details
选择该复选框可在输入数据完全通过移位寄存器后,围绕其中心翻转 CRC 校验和。
-
如果取消选中 在最终 XOR 之前反映校验和,则程序块不会翻转 CRC 校验和。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
# Final XOR — 最后一次 XOR 运算
Details
指定为二进制标量或二进制字符串向量的最后一次 XOR 运算,其长度等于生成多项式的阶数。
XOR 操作是使用 Final XOR 参数值与计算出的 CRC 校验位进行的,然后再将其添加到输入数据中。标量值将扩展为长度等于生成多项式阶数的字符串矢量。
-
Final XOR 参数的
0
值等同于无 XOR 操作。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
#
Checksums per frame —
为每个帧计算的校验和数
Int64 integer
Details
为每个帧计算的校验和的个数,以正整数表示。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
算法
直接和间接 CRC 算法
General CRC Generator 设备支持使用间接或直接 CRC 算法生成 CRC 校验和。
间接 CRC 算法
间接 CRC 算法采用与多项式 相对应的二进制数据向量,并添加与多项式 相对应的 位校验和。
输入向量和校验和的级联对应于多项式 ,因为乘以 相当于将输入向量 向左移动几个比特。算法选择校验和 ,使 是一个度数为 的预定多项式 的倍数,该多项式称为_生成多项式_。
算法将 除以 ,并将校验和设置为与余数对应的二进制向量。也就是说,如果 ,其中 是一个度数小于 的多项式,那么校验和就是与 对应的二进制向量。如有必要,算法会在校验和中添加零,使其长度为 。
CRC 生成函数实现了 CRC 算法的传输阶段,其功能如下:
-
将输入数据矢量向左移动 位,并将得到的多项式除以 。
-
将校验和设置为长度为 的二进制向量,相当于步骤 1 的余数。
-
将校验和与输入向量相加。结果就是输出向量。
如上所述,CRC 检测功能计算整个输入向量的校验和。
CRC 算法使用二进制矢量来表示二进制多项式,按强度从大到小的顺序排列。例如,向量 [1 1 0 1 1]
表示多项式 。
比特按照从最低比特到最高比特的顺序进入线性反馈移位寄存器(线性反馈移位寄存器,LFSR)。输入信息比特序列表示信息多项式系数的幂次降序。 是生成多项式的阶数,信息矢量用 0 进行扩充,以冲出 LFSR。如果左寄存器级 d(1) 的输出为 1,则对移位寄存器的位与生成多项式的系数进行 XOR 运算。当增强信息序列完全通过 LFSR 时,寄存器中将保留一个校验和 [d(1) d(2) … d(r)]。这是二进制长除法的实现,其中信息序列是被除数(分子),多项式是除数(分母)。CRC 校验和是除法运算的余数。
CRC 发生器的操作
CRC 发生器根据指定的生成多项式和每帧校验和的数量,将 CRC 校验和添加到输入帧中。
对于给定的内部移位寄存器初始状态和
-
输入信号被分为大小相等的
子帧。 -
每个
子帧对应初始状态向量中的一个前缀。 -
CRC 算法应用于每个子帧。
-
得到的校验和被添加到每个子帧的末尾。
-
子帧合并后作为矢量列输出。在这里显示的情况下,输入 10 位帧,生成多项式
计算 CRC 校验和,初始状态为 "0",每帧的校验和数量为 "2"。
输入帧被分为两个大小为 5 的子帧,计算出大小为 3 的校验和并添加到每个子帧中。初始状态没有显示,因为初始状态"[0]"不会影响 CRC 算法的结果。传输码字的输出帧为 5 + 3 + 5 + 5 + 3 = 16 比特。
文献
-
Sklar, Bernard."数字通信:基础与应用》。Englewood Cliffs, N.J.: Prentice-Hall, 1988.
-
Wicker, Stephen B. "Error Control Systems for Digital Communication and Storage." Upper Saddle River, N.J.: Prentice Hall, 1995.