主要内容

comm.CRCGenerator

生成CRC编码比特和添加到输入数据

描述

comm.CRCGenerator系统对象™生成循环冗余校验(CRC)代码位为每个输入帧并把它们添加到框架。有关更多信息,请参见CRC发生器操作

为每个输入生成CRC编码比特帧并添加到框架:

  1. 创建comm.CRCGenerator对象并设置其属性。

  2. 调用对象的参数,就好像它是一个函数。

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

crcgenerator= comm.CRCGenerator创建一个CRC代码生成器系统对象。这个对象生成CRC位根据指定的发电机多项式和附加输入帧。

例子

crcgenerator= comm.CRCGenerator (的名字,价值)设置使用一个或多个属性名称-值对。例如,comm.CRCGenerator(“多项式”、“16 + z z ^ ^ 14 + z + 1”)配置CRC发电机系统对象附加CRC-16输入帧循环冗余校验位。在报价附上每个属性的名字。

例子

crcgenerator= comm.CRCGenerator(聚的名字,价值)创建一个CRC代码生成器系统对象。这个对象的多项式属性设置为,另一个指定的属性设置为指定的值。

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

发电机多项式的CRC算法,指定为以下之一:

  • 一个多项式特征向量等' z z ^ ^ 3 + 2 + 1”

  • 一个二进制行向量表示发电机多项式的系数递减的顺序。这个向量的长度(N+ 1),N是发电机多项式的程度。例如,(1 1 0 1)代表了多项式z3+z2+ 1。

  • 一个整数包含指数的行向量z非零项的多项式在降序排列。例如,(3 2 0)代表了多项式z3+z2+ 1。

有关更多信息,请参见多项式的表示通信工具箱

一些常用的多项式发电机包括:

CRC的方法 发电机多项式
CRC-32 ' 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”
CRC-24 ' z z ^ ^ 24 + 23 + 14 + z z ^ ^ 12 + z ^ 8 + 1
CRC-16 “16 + z z ^ ^ 15 + z ^ 2 + 1的
逆转CRC-16 “16 + z z ^ ^ 14 + z + 1”
CRC-8 “z z ^ ^ 8 + 7 + z ^ 6 + z z ^ ^ 4 + 2 + 1”
CRC-4 ' z z ^ ^ 4 + 3 + z ^ 2 + z + 1”

例子:“z ^ 7 + z ^ 2 + 1”,(1 0 0 0 0 1 0 1),(7 2 0)表示相同的多项式,p(z)=z7+z2+ 1。

数据类型:|字符

内部移位寄存器的初始状态,指定为一个二进制标量或二进制行向量长度等于发电机多项式的程度。一个标量值扩展到一个行向量相等长度的生成器多项式的程度。

数据类型:逻辑

使用直接计算CRC校验和的算法,指定为真正的

当你设定这个属性真正的,对象使用CRC校验和计算的直接算法。当你设定这个属性,对象使用间接的CRC校验和算法计算。

直接和非直接算法的更多信息,请参阅错误检测和校正

数据类型:逻辑

反映输入字节,指定为真正的。将此属性设置为真正的把输入帧bytewise基础上在进入到移位寄存器的数据。

当你设定这个属性真正的,输入帧长度除以的价值ChecksumsPerFrame属性必须是一个整数和一个的倍数8

数据类型:逻辑

反映了校验和之前最后的XOR,指定为真正的。将此属性设置为真正的翻转后的CRC校验和围绕其中心输入数据是完全通过移位寄存器。

数据类型:逻辑

最后的XOR,指定为一个二进制标量或二进制行向量长度等于发电机多项式的程度。使用的值XOR操作运行FinalXOR财产和CRC校验和与之前输入的校验和。一个标量值扩展到一个行向量相等长度的生成器多项式的程度。的设置0相当于没有异或操作。

数据类型:逻辑

每一帧的校验和计算数量,指定为一个正整数。有关更多信息,请参见CRC发生器操作

数据类型:

使用

描述

例子

码字= crcgenerator (x)为每个输入帧生成CRC码位并把它们添加到框架。

输入参数

全部展开

输入信号,指定为一个二进制列向量。输入框的长度必须是一个多重的价值ChecksumsPerFrame财产。如果输入数据类型是双,使用最低有效位的二进制值。有关更多信息,请参见CRC发生器操作

数据类型:|逻辑

输出参数

全部展开

输出码字,作为二进制列向量,继承了返回的数据类型的输入信号。输出包含输入帧与CRC位附加代码序列。

输出码字长度的帧+k*r,在那里输入消息的大小,k是每个输入帧的校验和数量,r是发电机多项式的程度。有关更多信息,请参见CRC发生器操作

对象的功能

使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源,并允许修改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

生成一个CRC-8校验和802.11™-2016中所示的示例[1],部分21.3.10.3与预期的CRC和比较。

创建一个CRC发电机系统对象™。结合CRC计算-20016年802.11,系统对象设置发电机多项式 z 8 + z 2 + z + 1 ,初始状态为1,直接法,最后XOR 1。

crc8 = comm.CRCGenerator (多项式的,“z ^ 8 + z ^ 2 + z + 1”,“InitialConditions”,1“DirectMethod”,真的,“FinalXOR”,1)
crc8 = comm.CRCGenerator属性:多项式:“z ^ 8 + z ^ 2 + z + 1”InitialConditions: 1 DirectMethod:真正的ReflectInputBytes:假ReflectChecksums:假FinalXOR: 1 ChecksumsPerFrame: 1

过程的例子显示一个输入帧21.3.10.3 802.11 -2016标准部分。在这个示例中,输入比特流{m0,…锰}{1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1}和预期的CRC校验和{c7…c0} {0 0 0 1 1 1 0 0}。

x = [1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1] ';expectedChecksum = [0 0 0 1 1 1 0 0) ';checksumLength =长度(expectedChecksum);

生成的CRC校验和是比预期的校验和。

码字= crc8 (x);校验和=码字(end-checksumLength + 1:结束);expectedChecksum isequal(校验和)
ans =逻辑1

引用

[1]IEEE®IEEE Std 802.11™-2016标准信息Technology-Local和市区Networks-Specific需求第11部分:无线局域网MAC层和物理层规范。

二进制数据通过CRC生成器,介绍有点误差,并使用CRC探测器检测到错误。

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

x =兰迪([0 1]12 1);

编码输入消息帧使用CRC生成器ChecksumsPerFrame属性设置为2。这将传入的框架分为两个等长子帧。

crcgenerator = comm.CRCGenerator ((1 0 0 1),“ChecksumsPerFrame”2);码字= crcgenerator (x);

解码码字,并验证子帧中没有错误。

crcdetector = comm.CRCDetector ((1 0 0 1),“ChecksumsPerFrame”2);[~,犯错]= crcdetector(代号)
呃=2×10 0

引入一个错误在第二子帧通过反相副框架2的最后一个元素。通过破坏通过CRC码字检测器,并验证第二子帧错误检测。

不码字(结束)=(码字(结束));[~,犯错]= crcdetector(代号)
呃=2×10 1

使用CRC编码在一个嘈杂的BPSK信号检测帧错误。

创建一个CRC发生器和探测器对使用标准CRC-4多项式, z 4 + z 3 + z 2 + z + 1

保利=“z4 + z3 + z2 + z + 1”;crcgenerator = comm.CRCGenerator(聚);crcdetector = comm.CRCDetector(聚);

产生12位二进制数据帧和附加CRC位。基于多项式的次数,4位是附加到每一帧。应用BPSK调制和信号通过一个AWGN信道。解调,并使用CRC探测器来确定帧错误。

numFrames = 20;frmError = 0 (numFrames, 1);k = 1: numFrames data =兰迪([0 1]12 1);%生成二进制数据encData = crcgenerator(数据);%附加CRC位modData = pskmod (encData 2);% BPSK调制rxSig = awgn (modData, 5);% AWGN信道信噪比= 5分贝demodData = pskdemod (rxSig 2);% BPSK解调(~ frmError (k)] = crcdetector (demodData);%检测CRC错误结束

识别CRC编码的帧错误检测。

找到(frmError)
ans = 6

创建一个节中描述CRC-16-CCITT发生器2.2.7.4 ITU-T推荐* 25[1]使用输入数据和预期从示例2帧校验序列(FCS)附录I, I.1。

创建一个未编号的确认(UA)响应帧地址= B和F = 1。

地址= [1 0 0 0 0 0 0 0];UA = [1 1 0 0 1 1 1 0];输入=(地址UA) ';expectedChecksum = [1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 0) ';%将FCSchecksumLength = 16;crcGen = comm.CRCGenerator (多项式的,“X ^ 16 + X X ^ ^ 12 + 5 + 1”,“InitialConditions”,1“DirectMethod”,真的,“FinalXOR”1);crcSeq = crcGen(输入);校验和= crcSeq (end-checksumLength + 1:结束);

比较计算校验和与预期的校验和。

isequal (expectedChecksum校验和)
ans =逻辑1

引用

[1]国际电信联盟电信标准化部门。系列X:数据网络和开放系统通信。公共数据网络接口1997年

创建一个crc编码帧校验序列(FCS) 32节中描述字段以太网3.2.9 IEEE标准的以太网[1]

rng (1865);%的种子可重复的结果

用随机数据初始化消息代表MAC帧的受保护字段,具体目的地址,源地址,长度或类型字段,MAC客户端数据,填充。

data =兰迪([0,1],100,1);

指定用于编码的crc生成多项式32以太网信息。

保利=[32,26岁,23日,22日,16日,12日,11日,10日8日7日5、4、2、1、0];

计算CRC遵循的步骤中指定的标准,用间接的方法来生成CRC编码。

%部分3.2.9步骤a)和b)dataN =[(数据(1:32));数据(33:结束)];crcGen1 = comm.CRCGenerator (多项式的聚,“InitialConditions”0,“DirectMethod”假的,“FinalXOR”1);%部分3.2.9步骤c), d和e)seq = crcGen1 (dataN);csNondirect = seq (end-31:结束);

计算CRC遵循标准中规定的步骤和使用直接法生成CRC编码。

crcGen2 = comm.CRCGenerator (多项式的聚,“InitialConditions”,1“DirectMethod”,真的,“FinalXOR”1);txSeq = crcGen2(数据);csDirect = txSeq (end-31:结束);

比较生成的CRC码通过间接和直接的方法。

disp ([csNondirect '; csDirect ']);
1 1 1 0 1 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 1 1 0 0 0 1 1 1 0 0 1 0
isequal (csNondirect csDirect)
ans =逻辑1
rng (“默认”);%重置随机数发生器

引用

[1]IEEE计算机协会。IEEE标准以太网:性病802.3 -2012。纽约:2012。

更多关于

全部展开

引用

[1]Sklar,伯纳德。数字通信:基本面和应用程序。恩格尔伍德悬崖,新泽西州:普伦蒂斯·霍尔出版社,1988年版。

[2]柳条,斯蒂芬·B。误差控制系统数字通信和存储。鞍上游,新泽西州:Prentice Hall出版社,1995年版。

扩展功能