主要内容

comm.HDLRSDecoder

使用Reed-Solomon解码器解码信息

描述

的HDL-optimizedHDLRSDecoder系统对象™恢复消息向量从Reed-Solomon (RS)码字向量。对于正确的解码,代码和多项式为这个对象属性值必须匹配这些值在相应的编码器。

恢复一个消息从Reed-Solomon码字向量向量:

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

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

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

故障排除

  • 每个输入框必须包含以上(n - k) * 2符号和不足或完全N符号。对象推断时缩短代码之间的有效数据样本的数量startInendIn小于N。仍然需要缩短代码N循环执行简搜索。如果输入消息小于N符号,至少留下保护间隔N -大小活动周期开始下一帧之前,大小消息长度。

  • 解码器可以操作4的消息。如果对象接收到五分之一开始的消息完全解码第一个消息之前,对象数据样本第一个消息。为了避免这个问题,增加输入消息之间的活动周期。

  • 发电机多项式没有显式地指定。然而,它被定义为码字长度,消息长度,B值的起始指数的根源。从发电机多项式B的值,使用genpoly2b函数。

创建

描述

RSDec= comm.HDLRSDecoder创建一个HDL-optimized RS解码器系统对象,RSDec,执行Reed-Solomon解码。

RSDec= comm.HDLRSDecoder(名称,值)设置使用一个或多个属性名称-值对。在单引号附上每个属性的名字。例如,

comm.HDLRSDecoder (‘BSource’,‘属性’,' B ', 2)
设置一个起始2的幂本原多项式的根。

例子

RSDec= comm.HDLRSDecoder (N, K,名称,值)设置CodewordLength财产N,MessageLength财产K和其他指定属性名称指定的值。

属性

全部展开

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

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

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

权力本原多项式的根开始,指定为一个正整数。

依赖关系

当你设定对象使用这个值BSource“属性”

开始权力来源本原多项式的根,指定为“属性”“汽车”。当您选择“汽车”,对象使用B = 1

数量的符号,N在RS码字,指定为一个正整数。这个值是围捕21。本原多项式的程度,是指定的吗PrimitivePolynomialSourcePrimitivePolynomial属性。的差异CodewordLength- - - - - -MessageLength必须是一个整数。

如果该属性的值小于21,假设缩短RS码的对象。

如果你设置PrimitivePolynomialSource“汽车”,然后CodewordLength必须在3 <CodewordLength≤216- 1。

如果你设置PrimitivePolynomialSource“属性”,然后CodewordLength必须在3≤CodewordLength≤2- 1。必须在3≤≤16。

消息长度,K,指定为一个正整数。的差异CodewordLength- - - - - -MessageLength必须是一个整数。

当你设定这个属性真正的,对象返回纠正错误的数量。纠正错误的号码是无效的errOut真正的,因为有比可以纠正错误。

本原多项式的来源,指定为“属性”“汽车”

  • 当你设定这个属性“汽车”,对象使用一个本原多项式的学位=装天花板(log2(CodewordLength+ 1)的结果int2bit(primpoly(),bpi)”,在那里bpi每个整数的比特数。

  • 当你设定这个属性“属性”您必须指定一个多项式使用PrimitivePolynomial财产。

本原多项式,指定为一个二进制行向量表示一个本原多项式女朋友(2)学位降序排列的权力。有限域多项式定义女朋友(2)对应的整数形式消息和码字。

依赖关系

当你设定对象使用这个值PrimitivePolynomialSource“属性”

使用

描述

例子

(Y,startOut,endOut,validOut,errOut)= RSDec (X,startIn,endIn,validIn)解码一个编码信息符号,X,并返回解码的象征Y。的开始结束信号指示消息帧边界。如果errOut1(真正的),那么该对象检测到输入框无法改正的错误。

(Y,startOut,endOut,validOut,errOut,numErrors)= RSDec (X,startIn,endIn,validIn)解码输入数据,并且返回的错误检测和纠正。使用这个语法,设置NumErrorsOutputPort财产真正的。如果errOut1(真正的),那么该对象中发现无法改正的错误输出帧,和numErrors是无效的。

输入参数

全部展开

输入消息数据和奇偶性符号,一个象征,指定为一个无符号整数或fi ()与任何二进制扩展点。

类型是允许模拟但不支持HDL代码生成。万博1manbetx

数据类型:|uint8|uint16|uint32|fi

开始输入数据帧,指定为一个逻辑标量。

数据类型:逻辑

输入数据框,指定为一个逻辑标量。

数据类型:逻辑

输入数据的有效性,指定为一个逻辑标量。

数据类型:逻辑

输出参数

全部展开

返回的消息数据符号,一个象征,与相同的数据类型为整数作为输入信息,X

数据类型:|uint8|uint16|uint32|fi

输出数据帧的开始,作为一个逻辑标量返回。

数据类型:逻辑

输出数据帧,作为一个逻辑标量返回。

数据类型:逻辑

输出数据的有效性,作为一个逻辑标量返回。

数据类型:逻辑

在输出数据帧无法改正的错误,作为一个逻辑标量返回。这个信号是1 (真正的)当消息帧包含无法改正的错误。在这种情况下,输出数据符号损坏。这个值时是有效的endOut是1 (真正的)。

数据类型:逻辑

错误检测和纠正,返回一个整数。这个值时是有效的endOut是1 (真正的),errOut是0 ()。

数据类型:uint8

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

编码和解码信号使用里德所罗门编码器和解码器系统对象。这个例子展示了如何在一个函数包含每个对象对HDL代码生成。

创建一个随机的信息编码。这个消息是小于码字长度缩短代码展示对象支持。万博1manbetx垫的消息与零适应译码器的延迟,包括简搜索。

messageLength = 188;dataIn =[兰迪(messageLength[0255], 1日,“uint8”)0 (1024 - messagelength)];

编写一个函数,创建和调用HDLRSEncoder系统对象™RS(255239)码。这段代码用于IEEE®802.16宽带无线接入标准。B是开始本原多项式的根的力量。你可以从这个函数生成高密度脂蛋白。

函数[dataOut, startOut endOut validOut] = HDLRSEnc80216 (dataIn、startIn endIn, validIn)% HDLRSEnc80216%的过程的一个样本数据使用comm.HDLRSEncoder系统对象(TM)% dataIn uint8标量,代表8位二进制数据。% startIn, endIn, validIn逻辑标量值。%从这个函数可以生成HDL代码。持续的rsEnc80216;如果isempty (rsEnc80216) rsEnc80216 = comm.HDLRSEncoder (255239“BSource”,“属性”,“B”,0)结束[dataOut, startOut endOut validOut] = rsEnc80216 (dataIn, startIn, endIn validIn);结束% 2019 - 2022版权MathWorks公司。

调用函数来编码信息。

2 = 1:1024 messageStart = (2 = = 1);messageEnd = (2 = = messageLength);validIn = (2 < = messageLength);[encOut (ii), startOut (ii), endOut (ii), validOut (ii)] =HDLRSEnc80216 (dataIn (ii)、messageStart messageEnd, validIn);结束
rsEnc80216 = comm.HDLRSEncoder属性:CodewordLength: 255 MessageLength: 239 PrimitivePolynomialSource:“汽车”PuncturePatternSource:‘没有’BSource:“财产”B: 0

注入错误编码信息的随机位置。Reed-Solomon可以正确(N- - - - - -K)/ 2在每一个错误N符号。所以,在这个例子中,纠错能力(255 - 239)/ 2 = 8符号。

numErrors = 8;loc = randperm (messageLength numErrors);% encOut由validOut合格,使用一个偏移量注入错误vi =找到(validOut = = true, 1);i = 1: numErrors idx = loc(我)+六世;符号= encOut (idx);randi encOut (idx) = (255) [0,“uint8”);流('符号(% d): 0 x % x,现在0 x % \ n 'loc (i),象征,encOut (idx))结束
(147):象征是0 x1f,现在0 x82符号(16):0 x6b,现在0 x82符号(173):0 x3,现在0 xd1符号(144):0 x66,现在0 xcb符号(90):0 * 13,现在0 xa4符号(80):0 x5a,现在0 x60符号(82):0 x95,现在0 xcf符号(56):现在是0 xf5 0 x88

编写一个函数,创建和调用HDLRSDecoder系统对象™。这个对象必须具有相同的代码和多项式的编码器。你可以从这个函数生成高密度脂蛋白。

函数[dataOut, startOut endOut validOut,犯错]= HDLRSDec80216 (dataIn、startIn endIn, validIn)% HDLRSDec80216%的过程的一个样本数据使用comm.HDLRSDecoder系统对象(TM)% dataIn uint8标量,代表8位二进制数据。% startIn, endIn, validIn逻辑标量值。%从这个函数可以生成HDL代码。持续的rsDec80216;如果isempty (rsDec80216) rsDec80216 = comm.HDLRSDecoder (255239“BSource”,“属性”,“B”,0)结束[dataOut, startOut endOut validOut,犯错]= rsDec80216 (dataIn, startIn, endIn validIn);结束% 2019 - 2022版权MathWorks公司。

调用这个函数来检测编码中的错误消息。

2 = 1:1024 [decOut (ii), decStartOut (ii), decEndOut (ii), decValidOut (ii), decErrOut (ii)] =HDLRSDec80216 (encOut (ii), startOut (ii), endOut (ii), validOut (ii));结束
rsDec80216 = comm.HDLRSDecoder属性:CodewordLength: 255 MessageLength: 239 PrimitivePolynomialSource:“汽车”BSource:“财产”B: 0 NumErrorsOutputPort:假的

选择有效的译码器输出和比较原始消息解码符号。

decOut = decOut (decValidOut = = 1);originalMessage = dataIn (1: messageLength);如果所有(originalMessage = = decOut)流(“% d信息符号都是正确解码。\ n”messageLength)其他的jj = 1: messageLength如果dataIn (jj) ~ = decOut (jj)流(的错误解码符号(% d)。原来的0 x % x,解码0 x % x。\ n”jj, dataIn (jj) decOut (jj))结束结束结束
188信息符号都是正确解码。

扩展功能

版本历史

介绍了R2012b