comm.CRCGenerator
生成CRC编码比特和添加到输入数据
描述
的comm.CRCGenerator
系统对象™生成循环冗余校验(CRC)代码位为每个输入帧并把它们添加到框架。有关更多信息,请参见CRC发生器操作。
为每个输入生成CRC编码比特帧并添加到框架:
创建
comm.CRCGenerator
对象并设置其属性。调用对象的参数,就好像它是一个函数。
了解更多关于系统对象是如何工作的,看到的系统对象是什么?
创建
语法
描述
创建一个CRC代码生成器系统对象。这个对象生成CRC位根据指定的发电机多项式和附加输入帧。crcgenerator
= comm.CRCGenerator
设置使用一个或多个属性名称-值对。例如,crcgenerator
= comm.CRCGenerator (的名字
,价值
)comm.CRCGenerator(“多项式”、“16 + z z ^ ^ 14 + z + 1”)
配置CRC发电机系统对象附加CRC-16输入帧循环冗余校验位。在报价附上每个属性的名字。
创建一个CRC代码生成器系统对象。这个对象的crcgenerator
= comm.CRCGenerator(聚的名字
,价值
)多项式
属性设置为聚
,另一个指定的属性设置为指定的值。
属性
属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放
函数打开它们。
如果一个属性可调在任何时候,你可以改变它的值。
改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象。
多项式
- - - - - -发电机多项式
“16 + z z ^ ^ 12 + z ^ 5 + 1
(默认)|多项式特征向量|二进制行向量|整行向量
发电机多项式的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。
数据类型:双
|字符
InitialConditions
- - - - - -内部移位寄存器的初始状态
0
(默认)|1
|二进制行向量
内部移位寄存器的初始状态,指定为一个二进制标量或二进制行向量长度等于发电机多项式的程度。一个标量值扩展到一个行向量相等长度的生成器多项式的程度。
数据类型:逻辑
DirectMethod
- - - - - -使用直接CRC校验和算法计算
假
(默认)|真正的
使用直接计算CRC校验和的算法,指定为假
或真正的
。
当你设定这个属性真正的
,对象使用CRC校验和计算的直接算法。当你设定这个属性假
,对象使用间接的CRC校验和算法计算。
直接和非直接算法的更多信息,请参阅错误检测和校正。
数据类型:逻辑
ReflectInputBytes
- - - - - -反映输入字节
假
(默认)|真正的
反映输入字节,指定为假
或真正的
。将此属性设置为真正的
把输入帧bytewise基础上在进入到移位寄存器的数据。
当你设定这个属性真正的
,输入帧长度除以的价值ChecksumsPerFrame
属性必须是一个整数和一个的倍数8
。
数据类型:逻辑
ReflectChecksums
- - - - - -反映最终XOR前校验和
假
(默认)|真正的
反映了校验和之前最后的XOR,指定为假
或真正的
。将此属性设置为真正的
翻转后的CRC校验和围绕其中心输入数据是完全通过移位寄存器。
数据类型:逻辑
FinalXOR
- - - - - -最后XOR
0(默认)|二进制标量|二进制向量
最后的XOR,指定为一个二进制标量或二进制行向量长度等于发电机多项式的程度。使用的值XOR操作运行FinalXOR
财产和CRC校验和与之前输入的校验和。一个标量值扩展到一个行向量相等长度的生成器多项式的程度。的设置0
相当于没有异或操作。
数据类型:逻辑
ChecksumsPerFrame
- - - - - -校验和计算出每一帧的数量
1(默认)|正整数
每一帧的校验和计算数量,指定为一个正整数。有关更多信息,请参见CRC发生器操作。
数据类型:双
使用
输入参数
对象的功能
使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj
使用这个语法:
发行版(obj)
例子
生成CRC-8校验和
生成一个CRC-8校验和802.11™-2016中所示的示例[1],部分21.3.10.3与预期的CRC和比较。
创建一个CRC发电机系统对象™。结合CRC计算-20016年802.11,系统对象设置发电机多项式 ,初始状态为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生成器,介绍有点误差,并使用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
循环冗余校验的嘈杂的BPSK数据帧
使用CRC编码在一个嘈杂的BPSK信号检测帧错误。
创建一个CRC发生器和探测器对使用标准CRC-4多项式, 。
保利=“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发电机为25
创建一个节中描述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发电机为以太网32
创建一个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。
更多关于
循环冗余校验编码
循环冗余校验(CRC)的编码是一个错误控制编码技术检测传输数据帧时发生错误。与块或卷积编码、CRC编码没有内置的纠错能力。相反,当一个通信系统检测到一个错误的收到了码字,接收方请求发送者在发送码字。
在CRC编码发射机规则适用于每一个数据帧来创建额外的CRC位,称为校验和或综合症,然后附加数据帧的校验和。接收传输码字后,接收者同样的规则适用于接收到的码字。如果非零结果校验和,一个错误发生和发射机应该重新发送数据帧。
当校验和每帧的数量大于1,输入数据帧分为子帧,规则应用于每个数据子帧,和个人的校验和是附加到每个子帧。连接到输出一帧的子帧码字。
支持CRC算法的讨论,请参阅万博1manbetx循环冗余校验码。
CRC发生器操作
CRC生成器附加CRC校验和输入帧根据指定的发电机多项式和校验和每帧的数量。
为一个特定的内部移位寄存器的初始状态k每个输入帧的校验和:
输入信号分成k子帧的大小。
每一个k子帧与初始状态向量前缀。
CRC算法应用于每个子帧。
所得的校验和附加到每个子帧的结束。
子帧连接,输出为一个列向量。
这里显示的场景中,10位框架是输入,第三个学位发电机多项式计算CRC校验和,初始状态为0,和校验和每帧的数量是2。
的输入框分为两个子帧大小5和校验和的大小3计算和附加到每个子帧。初始状态是不显示的,因为一个初始状态[0]
不影响CRC算法的输出。输出码字传输帧的大小5 + 3 + 5 + 3 = 16。
引用
[1]Sklar,伯纳德。数字通信:基本面和应用程序。恩格尔伍德悬崖,新泽西州:普伦蒂斯·霍尔出版社,1988年版。
[2]柳条,斯蒂芬·B。误差控制系统数字通信和存储。鞍上游,新泽西州:Prentice Hall出版社,1995年版。
扩展功能
C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。
使用笔记和限制:
看到系统在MATLAB代码生成对象(MATLAB编码器)。
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。