通用 CRC 综合检测器
根据生成多项式的码元帧误差检测器。
类型: GeneralCRCSyndromeDetector
图书馆中的路径:
|
说明
通用 CRC 综合检测器*程序块为接收到的编解码帧计算循环冗余校验和(CRC)。为了正确检测通信信道中的错误,有必要将*通用 CRC 综合检测器*模块的参数设置与配对的*通用 CRC 发生器*模块进行协调。
端口
输入
#
IN_1
—
接收到的编码
二进制列向量
Details
以二进制列向量形式给出生成的编解码。
数据类型 |
|
复数支持 |
无 |
输出
#
OUT_1
—
输出帧
二进制列向量
Details
以二进制列向量形式返回的输出帧,继承了输入信号的数据类型。输出帧包含已去除校验和的接收编码。
输出帧的长度为 位,其中 是接收到的编解码的大小, 是帧中校验和的数量, 是生成多项式的阶数。
数据类型 |
Float64`。 |
复数支持 |
|
#
错误
—
校验和错误
二进制矢量列
Details
以二进制列向量形式返回的校验和错误信号,继承了输入信号的数据类型。 Err 的长度等于 Checksums per frame 的值。对于每次校验和计算,Err 中`0`元素的值表示无校验和错误,Err 中`1`元素的值表示有校验和错误。
数据类型 |
|
复数支持 |
无 |
参数
参数
#
发生器多项式 —
生成多项式
String
Details
CRC 算法的生成多项式,以下列方式之一指定:
-
多项式符号向量。例如: 。
-
二进制字符串向量,按幂次降序表示生成多项式的系数。该向量的长度为 ( ),其中 是生成多项式的阶数。例如`[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]
表示同一个多项式, 。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
# 初始状态 — 内部移位寄存器的初始状态
Details
内部移位寄存器的初始状态,指定为二进制标量或二进制向量字符串,长度等于生成多项式的阶数。
标量值将扩展为长度等于生成多项式阶数的字符串矢量。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
#
直接法 —
采用直接算法计算校验和
Logical
Details
选择该复选框可使用直接算法计算 CRC 校验和。如果不选中,设备将使用间接算法计算 CRC 校验和。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
反射输入字节 —
打开输入字节显示
Logical
Details
选择该复选框可在将数据输入移位寄存器前逐个字节翻转输入数据。
-
如果选中*反映输入字节*复选框,则输入帧长度除以*每帧校验和*值必须是`8`的整数倍。
-
如果未选中*反映输入字节*参数,程序块不会翻转输入数据。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
#
在最终 XOR 之前反射校验和 —
启用显示最后一次 XOR 操作前的校验和
Logical
Details
选择该复选框可在输入数据完全通过移位寄存器后,围绕其中心翻转 CRC 校验和。
-
如果取消选中 在最终 XOR 之前反映校验和,则程序块不会翻转 CRC 校验和。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
无 |
# 最终 XOR — 最后一次 XOR 运算
Details
最后一次 XOR 运算指定为二进制标量或二进制字符串向量,长度等于生成多项式的阶数。
在将 CRC 添加到输入数据之前,会使用 Final XOR 参数的值作为 CRC 校验和来执行 XOR 操作。标量值将扩展为长度等于生成多项式阶数的字符串向量。
-
Final XOR 参数的
0
值等同于无 XOR 操作。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
#
每帧校验和 —
为每个帧计算的校验和数
Int64 integer
Details
为每个帧计算的校验和的个数,以正整数表示。
默认值 |
|
程序使用名称 |
|
可调谐 |
无 |
可计算 |
是 |
算法
直接和间接 CRC 算法
通用 CRC 综合检测器*支持使用间接和直接 CRC 转换算法生成 CRC 校验和。
间接 CRC 算法
间接 CRC 转换算法采用与多项式 相对应的二进制数据向量,并添加与多项式 相对应的 位校验和。
输入向量和校验和的级联对应于多项式 ,因为乘以 相当于将输入向量 向左移动几个比特。算法选择校验和 ,使 是一个度数为 的预定多项式 的倍数,该多项式称为_生成多项式_。
算法将 除以 ,并将校验和设置为与余数对应的二进制向量。也就是说,如果 ,其中 是一个度数小于 的多项式,那么校验和就是与 对应的二进制向量。如有必要,算法会在校验和中添加零,使其长度为 。
CRC 生成函数实现了 CRC 算法的传输阶段,其功能如下:
-
将输入数据向量向左移动 位,并将相应的多项式除以 。
-
设置校验和,使其等于长度为 的二进制向量,相当于步骤 1 的余数。
-
将校验和与输入向量相加。结果就是输出向量。如上所述,CRC 检测功能计算整个输入向量的校验和。
CRC 算法使用二进制向量来表示按强度降序排列的二进制多项式。例如,向量 [1 1 0 1 1]
表示多项式 。
比特从低索引比特到高索引比特进入线性反馈移位寄存器(LFSR)。输入信息比特序列代表信息多项式的系数,按幂级数递减。信息矢量用零填充 ,以清除 LFSR,其中 是生成多项式的阶数。如果左级寄存器 d(1) 的输出为 1,则移位寄存器中的位与生成多项式的系数进行 XOR。当增强信息序列完全通过 LFSR 时,寄存器中就包含了校验和 [d(1) d(2) … d(r)]。这是二进制长除法的实现,其中信息序列是除数(分子),多项式是股息(分母)。CRC 校验和是除法运算的余数。
CRC 检测器的操作
一般 CRC 综合检测器*块根据指定的生成多项式和帧中的校验和数量,输出接收信息的帧和校验和错误向量。
每个子帧中的校验位都会被去除,因此输出帧的长度为
对于内部移位寄存器的特定初始状态:
-
生成的编码词被分为 C 个大小相等的子帧。
-
从
子帧中移除 CRC 校验和,并与接收到的编码词子帧计算出的校验和进行比较。 -
输出帧由子帧比特与
子帧组合而成,然后作为列向量输出。 -
校验和错误以长度为
的二进制列向量形式输出。0 "元素的值表示接收到的子帧中没有错误,"1 "元素的值表示接收到的子帧中有错误。
在这里显示的情况下,接收到一个第三位有错误的 16 位码字,使用生成多项式计算校验和 0
,每帧校验和的数量为 2
。
输入帧被分为两个大小为 5 的子帧,计算出大小为 3 的校验和并添加到每个子帧中。由于初始状态"[0]"不会影响 CRC 算法的结果,因此没有显示初始状态。传输码字的输出帧为 5 + 3 + 5 + 5 + 3 = 16 比特。