RS码的分组交织器设计

简介:

A类(n,k)Reed Solomon(RS)编码器,取k个用户数据符号,并通过添加n-k个奇偶校验符号。纠错能力(t)RS代码的计算公式为压裂{n-k}{2}也就是说,带有n-k个奇偶校验符号可以纠正高达\裂缝{n-k}{2}符号错误。

块交织器:

假设信道中的主要错误机制是突发型的。长度为b的突发被定义为b个不可靠的连续符号串。如果预期的突发长度b小于或等于t(通过RS编码可纠正的符号错误数),则代码可以按原样使用。但是,如果突发长度b>t,错误更正代码将失败。这就是交错来拯救我们的地方。

让我们假设b>tb\leq t\乘以d,其中d(交织深度)是一个整数。里德·所罗门(n,k)如果我们可以将突发错误序列分散到几个代码块上,使每个块的错误不超过t个(然后可以纠正),则可以使用代码。这可以使用块交织来实现,如下所示。我们不需要对k个符号的块进行编码,然后连续发送编码的符号,而是可以交错编码块并传输交错的数据。在以下情况下n=255,\;k=235,\;t=10,\;d=5 ,从Reed-Solomon编码器输出的数据字节如下所示,其中编号为0到234的字节是数据字节,而235到254的字节则是奇偶校验字节。

Reed Solomon(RS)码的代码结构
Reed Solomon(RS)码的代码结构

在这里,数据是逐行写入,逐列读回的。现在考虑长度突发错误的影响b>t,(其中吨是每个块的可纠正错误数)和b\leq v\乘以d对一些人来说v(v),在表中收到的符号上。由于符号的发送顺序,突发长度小于或等于d\次i最多将生效d+1天表中的连续列,取决于突发的起始位置。请注意,任何一行(对应于一个码字)中的错误都不超过v个。如果d>t,这些错误在代码的纠错能力范围内,可以纠正。在这种情况下,d日成为交织深度。代价是需要额外的缓冲空间来存储交织器表,并且引入了额外的延迟。最坏情况下的突发长度决定了表的大小(和交错深度),而表的大小决定了所需的缓冲区空间量和延迟。

设计示例:

考虑一个(255235)Reed Solomon编码系统。此代码最多可以更正t=\压裂{n-k}{2}=10符号错误。假设我们要使用的通道预期会导致b=253符号。然后是交织器深度(d)计算为

d>\压裂{b}{t}=\压裂{253}{10}=25.3

在这种情况下,交织器深度为26足以对抗信道引入的突发错误。块交织器的尺寸为d乘以n=26乘以255(26行255列)。

Matlab代码:

下面给出了一个模拟上述块交织器设计的示例matlab代码。输入数据是以下符号的重复流–“THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_“.使用了(255235)Reed Solomon解码器(具有10个符号的校正能力)。我们假设信道最多会产生连续20个符号的突发错误。突发错误用‘*‘.

%Reed-Solomon码块交织器设计演示%作者:Mathuranathanhttps://www.gaussianwaves.com%许可证-知识共享-cc by nc sa 3.0clc;清晰;%____________________________________________%输入参数%____________________________________________%Reed-Solomon码的交织器设计%RS代码参数n=255;%RS码字长度k=235;%数据符号数量b=20;%通道预期损坏的符号数%____________________________________________p=n-k;%奇偶校验符号数t=p/2;%RS码纠错能力fprintf('给定(%d,%d)Reed Solomon代码可以更正:%d个符号\n',n,k,fix(t));fprintf('给定-来自通道的预期突发错误长度:%d个符号\n',b);disp(“_____________________________________________________________________________”);如果(b>t)fprintf('在这种情况下,交互可能会有所帮助\n');其他的fprintf('在这种情况下,交互将无济于事\n');结束disp(“_____________________________________________________________________________”);D=天花板(b/t)+1;%集成层深度内存=零(D,n);%构造块交织器存储器data='THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_';%用作数据的常量模式%如果n>长度(数据),然后重复该模式以构造长度为“n”的数据数据=字符([repmat(data,[1,fix(n/length(data))]),数据(1:mod(n,length(数据)));%我们发送了D个类似数据块intlvrInput=报告(数据(1:n),[1D]);fprintf('向交织器输入数据->\n');disp(char(intlvrInput));disp(“_____________________________________________________________________________”);%INTERLEAVER公司%逐行写入交织器对于指数=1:D内存(索引,1:end)=intlvrInput((索引-1)*n+1:索引*n);结束intlvrOutput=零(1,D*n);%从交织器逐列读取对于索引=1:nintlvrOutput((索引-1)*D+1:索引*D)=内存(:,索引);结束%在第25个符号位置创建b个符号错误,以便在交错输出中进行测试%在这种情况下,“*”表示错误intlvrOutput(1,25:24+b)=零(1,b)+42;fprintf('\nInterleaver Output been corrupt by%d symbol burst error-marked by''*''->\n',b);disp(char(intlvrOutput));disp(“_____________________________________________________________________________”);%Deinteleaver公司deintlvrOutput=零(1,D*n);%逐栏写入去交错符对于索引=1:n内存(:,索引)=intlvrOutput((索引-1)*D+1:索引*D)';结束%逐行从解交错器读取对于指数=1:DdeintlvrOnput((索引-1)*n+1:索引*n)=内存(索引,1:结束);结束fprintf('去交织器输出->\n');disp(char(deintlvrOnput));disp(“_____________________________________________________________________________”);

模拟结果:

给定:(255235)Reed Solomon代码可以更正:10个符号
给定:信道的预期突发错误长度:20个符号


在这种情况下,交错可能会有所帮助


向交织器输入数据->
快速跳投FOX跳投OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_T
HE_LAZY_DOG公司_
THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_FOWN_FOX_
跳线_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX
K_BROWN_FOX_JUMPS_OVER_THE_THE_QUICK_BRON_FOX_ JUMPS_EVER_THE_LAZY_DOG_THE_
快速跳投FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_JOMPS_OVER_THE_
LAZY_DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_JU
MPS_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_THE_快速_BROWN_FOX
跳线_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX
K_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK _BROWN_FOX_ JUMPS_ OVER_THE_LAZY

DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_跳跃_O
VER_THE_
____________________________________________________________________________

被20个符号突发错误损坏后的交织器输出-标记为“*‘->
TTTHHHEE___QQQUUIIICCC公司********************N___FFFOOXXX__JJJUUUMMMPPSSS___OOOVV
VEEERRR__TTTHHEEE__LLLAAAZZYYYY__DDDOOOGGG__TTTH HEEE__QQQUUIIICCCKKK(维埃拉)
___BBBRRROOOWWNNN___FFFOOXXX__JJJUUUMMMPPSSS___OOOVVEERRR__TTTHHH公司
EEE___lllaaazzzyyyy_ddooggg___TTTHHHEEE___qqquuuiiicckkk___BBBRRROOOWWWN
NN__FFFOOOXXX__JJJUUUMMMPPSSS___OOOVVEEERR__TTTHHEEE__LLLAAAZZYYY___
DDDOOOGG__TTTHHHEEE__QQQUUIIICCCKKKK__BBRRROOOWWNNN__FFFOOOXXX__JJJ公司
UUUMMMPPSSS___OOOVVEEERR__TTTHHEEE__LLLAAAZZYYYY__DDDOOOGGG__TTTH HEE(乌姆姆姆姆普普斯斯__OOO夫维尔尔尔尔尔)
E___QQQUUIIICCCKKK__BBRRROOOWWNNN___FFFOOXXX__JJJUUUMMMPPSSS___OOOV
VVEEERR__TTTHHEEE__LLLAAAZZYYY__DDDOOOGGG__TTTH HEEE__QQQUUIIICCCKKK___
BBBRRROOOWWNNN___FFFOOXXX__JJJUUUMMMPPSSS___OOOVVEERRR__TTTHHEEE公司__
_
____________________________________________________________________________

去交织器输出->
THE_QUIC(基克)*******_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_JOMPS_OVER_THE_
LAZY_DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_快速_BROWN_FOX_跳跃
PS_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LA ZY_DOG_THE_快速_BR
OWN_FOX_JUMPS_OVER_THE_THE_QUIC公司*******_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_BRO足球
WN_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FO_JUMPS_ OVER_THE_LAZY _DOG_TH
E_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_TROWN_FOOX_JOMPS_OVER_THE_
LAZY_DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_THE_奎克******N_FOX_JUMPS_OVER_THE_L
AZY_DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_TOG_THE_ QUICK_DROWN_FO_JUMPS
_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY _DOG_THE_QUICK-BROWN
_FOX_JUMPS_OVER_THE_LAZY_DOG_THE_QUICK_BROWN_FOX_JOMPS_OVER_THE_
_______________
_____________________________________________________________

从上面的仿真中可以看出,尽管信道引入了20个连续突发错误符号(这超出了RS解码器的校正能力),但交织器/去交织器操作有效地分布了错误,并将最大突发长度减少到7个符号(这更容易通过(255235)进行校正)Reed Solomon代码。

另请参见:

[1]交织器和去交织器简介
[2]随机交织器

其他资源:

[1]Reed Solomon码的理论和构造注释–Bernard Sklar
[2]级联和高级代码-交织器的应用-斯坦福大学

发表您的宝贵意见!!!