文档gydF4y2Ba

crcgenerator系统对象gydF4y2Ba

生成CRC码位并附加到输入数据gydF4y2Ba

描述gydF4y2Ba

的gydF4y2BaCRCGeneratorgydF4y2Ba对象为每个输入数据帧生成循环冗余码(CRC)位,并将它们附加到帧中。输入必须是二进制列向量。gydF4y2Ba

生成循环冗余码位并将其附加到输入数据中:gydF4y2Ba

  1. 定义并设置您的CRC生成器对象。看到gydF4y2Ba建设gydF4y2Ba.gydF4y2Ba

  2. 调用gydF4y2Ba一步gydF4y2Ba的属性,为每个输入数据帧生成循环冗余码(CRC)位gydF4y2Bacomm.CRCDetectorgydF4y2Ba.的行为gydF4y2Ba一步gydF4y2Ba特定于工具箱中的每个对象。gydF4y2Ba

请注意gydF4y2Ba

从R2016b开始,而不是使用gydF4y2Ba一步gydF4y2Ba方法来执行System对象™定义的操作,则可以使用参数调用该对象,就像调用函数一样。例如,gydF4y2BaY = step(obj,x)gydF4y2Ba而且gydF4y2BaY = obj(x)gydF4y2Ba请执行相同的操作。gydF4y2Ba

建设gydF4y2Ba

H = com . crcgeneratorgydF4y2Ba创建一个循环冗余码生成器系统对象,gydF4y2BaHgydF4y2Ba.该对象根据指定的生成器多项式生成CRC位,并将它们附加到输入数据。gydF4y2Ba

H = com . crcgenerator (gydF4y2Ba的名字gydF4y2Ba,gydF4y2Ba价值gydF4y2Ba)gydF4y2Ba创建一个CRC生成器对象,gydF4y2BaHgydF4y2Ba,将每个指定的属性设置为指定的值。您可以以任意顺序指定额外的名-值对参数,如(gydF4y2BaName1gydF4y2Ba,gydF4y2BaValue1gydF4y2Ba、……gydF4y2Ba以gydF4y2Ba,gydF4y2Ba家gydF4y2Ba)。gydF4y2Ba

H = com . crcgenerator(聚,gydF4y2Ba的名字gydF4y2Ba,gydF4y2Ba价值gydF4y2Ba)gydF4y2Ba创建一个CRC生成器对象,gydF4y2BaHgydF4y2Ba.该对象具有gydF4y2Ba多项式gydF4y2Ba属性设置为gydF4y2Ba聚gydF4y2Ba,其他指定的属性设置为指定的值。gydF4y2Ba

属性gydF4y2Ba

多项式gydF4y2Ba

发电机多项式gydF4y2Ba

将生成器多项式指定为二进制或整数行向量,其系数按幂次降序排列,或指定为gydF4y2Ba多项式特征向量gydF4y2Ba.默认为gydF4y2Ba'z^16 + z^12 + z^5 + 1'gydF4y2Ba.如果将此属性设置为二进制向量,则其长度必须等于多项式的次加上gydF4y2Ba1gydF4y2Ba.如果将此属性设置为整数向量,则其值必须包含多项式的非零项的幂。例如,gydF4y2Ba[1 0 0 0 0 0 0 1 0 1]gydF4y2Ba而且gydF4y2Ba[8 20 0]gydF4y2Ba表示相同的多项式,gydF4y2Ba ggydF4y2Ba (gydF4y2Ba zgydF4y2Ba )gydF4y2Ba =gydF4y2Ba zgydF4y2Ba 8gydF4y2Ba +gydF4y2Ba zgydF4y2Ba 2gydF4y2Ba +gydF4y2Ba 1gydF4y2Ba .下表列出了常用的生成器多项式。gydF4y2Ba

CRC的方法gydF4y2Ba 发电机多项式gydF4y2Ba
CRC-32gydF4y2Ba ' z ^ 32 + z ^ 26 + 23 + z z ^ ^ 22 + 16 + z z ^ ^ 12 + z ^ 11 + z z ^ ^ 10 + 8 + z ^ 7 + z z ^ ^ 5 + 4 + z ^ 2 + z + 1”gydF4y2Ba
CRC-24gydF4y2Ba 'z^24 + z^23 + z^14 + z^12 + z^8 + 1'gydF4y2Ba
CRC-16gydF4y2Ba z^16 + z^15 + z^2 + 1'gydF4y2Ba
逆转CRC-16gydF4y2Ba 'z^16 + z^14 + z + 1'gydF4y2Ba
CRC-8gydF4y2Ba 'z^8 + z^7 + z^6 + z^4 + z^2 + 1'gydF4y2Ba
CRC-4gydF4y2Ba z^4 + z^3 + z^2 + z + 1'gydF4y2Ba

InitialConditionsgydF4y2Ba

移位寄存器的初始条件gydF4y2Ba

将移位寄存器的初始条件指定为具有二进制、双精度或单精度数据类型的标量或向量。默认为gydF4y2Ba0gydF4y2Ba.向量长度必须等于生成多项式的次gydF4y2Ba多项式gydF4y2Ba财产。当将初始条件指定为标量时,对象将值展开为长度等于生成器多项式次的行向量。gydF4y2Ba

DirectMethodgydF4y2Ba

直接法(逻辑法)gydF4y2Ba

当您将此属性设置为gydF4y2Ba真正的gydF4y2Ba,该对象使用直接算法进行CRC校验和计算。当您将此属性设置为gydF4y2Ba假gydF4y2Ba,对象使用非直接算法进行CRC校验和计算。此属性的默认值为gydF4y2Ba假gydF4y2Ba.gydF4y2Ba

请参阅通信系统工具箱->系统设计->错误检测和纠正->循环冗余校验编码-> CRC算法部分,以了解更多关于直接和非直接算法的信息。gydF4y2Ba

ReflectInputBytesgydF4y2Ba

反映输入字节gydF4y2Ba

将此属性设置为true,在将数据输入到移位寄存器之前,按字节对输入数据进行翻转。当您将此属性设置为gydF4y2Ba真正的gydF4y2Ba,则输入帧长除以gydF4y2BaChecksumsPerFramegydF4y2Ba属性值必须是的整数倍gydF4y2Ba8gydF4y2Ba.此属性的默认值为gydF4y2Ba假gydF4y2Ba.gydF4y2Ba

ReflectChecksumsgydF4y2Ba

在最终XOR之前反映校验和gydF4y2Ba

当您将此属性设置为gydF4y2Ba真正的gydF4y2Ba,在输入数据完全通过移位寄存器后,对象将CRC校验和围绕它们的中心翻转。此属性的默认值为gydF4y2Ba假gydF4y2Ba.gydF4y2Ba

FinalXORgydF4y2Ba

最终异或值gydF4y2Ba

指定用于将CRC校验和作为二进制标量或向量进行xor的值。对象在追加输入数据之前应用XOR操作。向量的长度是你在gydF4y2Ba多项式gydF4y2Ba财产。当将最终XOR值指定为标量时,对象将该值展开为长度等于生成器多项式次的行向量。此属性的默认值为gydF4y2Ba0gydF4y2Ba,这相当于没有异或操作。gydF4y2Ba

ChecksumsPerFramegydF4y2Ba

每个输入帧的校验和数gydF4y2Ba

指定该对象为每个输入帧计算的校验和的个数为正整数。默认为gydF4y2Ba1gydF4y2Ba.整数必须平均除以每个输入帧的长度。该对象执行以下操作:gydF4y2Ba

  1. 将每个输入帧分成gydF4y2BaChecksumsPerFramegydF4y2Ba相同大小的子帧。gydF4y2Ba

  2. 在每个子帧前面加上初始条件向量。gydF4y2Ba

  3. 对每个增广子帧应用CRC算法。gydF4y2Ba

  4. 在每个子帧的末尾追加结果校验和。gydF4y2Ba

  5. 输出连接的子帧。gydF4y2Ba

例如,您可以将输入帧大小设置为gydF4y2Ba10gydF4y2Ba,表示生成器多项式的次gydF4y2Ba3.gydF4y2Ba,gydF4y2BaInitialConditionsgydF4y2Ba属性设置为gydF4y2Ba0gydF4y2Ba,以及gydF4y2BaChecksumsPerFramegydF4y2Ba属性设置为gydF4y2Ba2gydF4y2Ba.当你这样做时,对象将每个输入帧分成两个大小相同的子帧gydF4y2Ba5gydF4y2Ba并追加大小的校验和gydF4y2Ba3.gydF4y2Ba到每个子帧。在这个例子中,输出帧有一个大小gydF4y2Ba 10gydF4y2Ba +gydF4y2Ba 2gydF4y2Ba ×gydF4y2Ba 3.gydF4y2Ba =gydF4y2Ba 16gydF4y2Ba .gydF4y2Ba

方法gydF4y2Ba

重置gydF4y2Ba 重置CRC生成器对象的状态gydF4y2Ba
一步gydF4y2Ba 生成CRC码位并附加到输入数据gydF4y2Ba
所有系统对象通用gydF4y2Ba
释放gydF4y2Ba

允许系统对象属性值更改gydF4y2Ba

例子gydF4y2Ba

全部展开gydF4y2Ba

通过CRC生成器传递二进制数据,引入一个比特错误,并使用CRC检测器检测错误。gydF4y2Ba

创建一个随机二进制向量。gydF4y2Ba

MSG = randi([0 1],12,1);gydF4y2Ba

类的CRC生成器对消息字进行编码gydF4y2BaChecksumsPerFramegydF4y2Ba属性设置为gydF4y2Ba2gydF4y2Ba.这将传入消息细分为两个长度相等的子帧。gydF4y2Ba

gen = com . crcgenerator ([1 0 0 1],gydF4y2Ba“ChecksumsPerFrame”gydF4y2Ba2);码字=步骤(gen,msg);gydF4y2Ba

解码消息并验证两个子帧中都没有错误。gydF4y2Ba

detect = com . crcdetector ([1 0 0 1],gydF4y2Ba“ChecksumsPerFrame”gydF4y2Ba2);[~, err] = step(检测,码字)gydF4y2Ba
呃=gydF4y2Ba2×1gydF4y2Ba0 0gydF4y2Ba

通过对子帧2的最后一个元素求反,在第二个子帧中引入一个错误。将损坏的码字通过CRC检测器,并验证在第二个子帧中检测到错误。gydF4y2Ba

码字(end) = not(码字(end));[~,err] = step(检测,码字)gydF4y2Ba
呃=gydF4y2Ba2×1gydF4y2Ba0 1gydF4y2Ba

使用CRC码在有噪声的BPSK信号中检测帧错误。gydF4y2Ba

使用标准CRC-4多项式创建CRC生成器和检测器对,gydF4y2Ba.gydF4y2Ba

crcGen = com . crcgenerator (gydF4y2Ba“z4 + z3 + z2 + z + 1”gydF4y2Ba);crcDet = com . crcdetector (gydF4y2Ba“z4 + z3 + z2 + z + 1”gydF4y2Ba);gydF4y2Ba

生成二进制数据的12位帧并附加CRC位。根据多项式的阶数,每帧加4位。应用BPSK调制并通过AWGN通道传递信号。解调并使用CRC检测器来确定帧是否错误。gydF4y2Ba

numFrames = 20;frmError = 0 (numFrames,1);gydF4y2Ba为gydF4y2Bak = 1:numFrames data = randi([0 1],12,1);gydF4y2Ba生成二进制数据gydF4y2BaencData = step(crcGen,data);gydF4y2Ba附加CRC位gydF4y2BamodData = pskmod(encData,2);gydF4y2Ba% BPSK调制gydF4y2BarxSig = awgn(modData,5);gydF4y2Ba% AWGN信道,信噪比= 5 dBgydF4y2BademodData = pskdemod(rxSig,2);gydF4y2Ba% BPSK解调gydF4y2Ba[~,frmError(k)] = step(crcDet,demodData);gydF4y2Ba检测CRC错误gydF4y2Ba结束gydF4y2Ba

识别检测到误码的帧。gydF4y2Ba

找到(frmError)gydF4y2Ba
Ans = 6gydF4y2Ba

算法gydF4y2Ba

对象上描述的算法、输入和输出gydF4y2BaCRC-N发电机gydF4y2Ba块引用页。对象属性对应于块参数。gydF4y2Ba

扩展功能gydF4y2Ba

另请参阅gydF4y2Ba

这个话题有用吗?gydF4y2Ba