CCSDS里德·所罗门编码

Gue*_*a88 5 c# zxing reed-solomon

我正在一个项目中,我需要将896字节的数据编码为128字节的代码字。CCSDS在pdf的第15页上定义了我项目的所有规范。 http://public.ccsds.org/publications/archive/101x0b3s.pdf 该文档中未明确指定的一些内容是J = 8,E = 16(255/223)和I = 4。

我已经多次阅读了这篇文章(以及其他许多文章),但是我似乎丝毫不了解所发生的事情。我什至尝试了在http://zxingnet.codeplex.com/SourceControl/latest#trunk/Source/lib/common/reedsolomon/GenericGF.cs中找到的代码

而且对我也不起作用。有人为此工作吗?我需要一些指导,因为磨了这么长时间后我感到迷失了。

对我来说,最好的解决方案是将信息错误地插入zxing代码中。

Rya*_*yan 6

我迟到了这个问题,但以防万一这可以帮助其他人:

在数字计算机上实现Reed Solomon的最简单,最常见的方法是使用RS(255,223)CCSDS编码。此编码由CCSDS指定,并且已在深空探测器和卫星等硬件中广泛使用了数十年。

RS(255,223)具有以下特征:

  • 每个符号都有2 ^ 8个组合(J = 8),因此每个符号都是一个字节。
  • 每个代码字都有2 ^ 8-1个符号,因此每个编码块的长度为255个字节。
  • 每个块可以编码的数据量为223个字节
  • 每个块包含32个字节的FEC奇偶校验数据(223个数据字节+ 32个奇偶校验字节= 255字节块)
  • 在不知道擦除(错误位置)的情况下,每个块最多可以纠正16个错误(E = 16,这始终等于奇偶校验字节数/ 2)。
  • 知道错误位置后,每个块最多可以纠正32个错误(这始终等于奇偶校验字节数)
  • CCSDS指定使用1 + X + X ^ 2 + X ^ 7 + X ^ 8的字段生成器多项式,具有第一个连续根= 112的代码生成器以及原始元素11。
  • CCSDS还指定了双基多项式表示形式,以简化专用硬件中的编码器/解码器实现。这是许多现代的RS(255,223)软件实现中都省略的一项功能,因为该功能在通用CPU中没有实际用途,但是在与传统硬件进行通信时仍然需要此功能。绝对确定您是否需要这样做-可以通过在编码/解码之前/之后通过查找表运行普通多项式输出来实现。

可以对255个符号的码字进行四次交织(I = 4),以提供892的总块大小。这样做可以在每个码字之间扩展传输突发错误,从而增加了成功进行码字校正的机会。有关详细信息,请参见下面链接的规格。

我不确定“ 128字节代码字”的含义,但可能与填充有关:

由于2 ^ 8的符号大小是一个相当严格的约束,因此每个代码字必须为255个字节长。但是,如果您不能一次性发送255字节的块,或者无法提供更好的错误保护,则可以使用填充来有效地缩短255字节的块。

通过简单地将223个数据字节中的某些字节定义为填充而不是数据,即可进行填充。填充只是发送者和接收者都提前知道的一些固定的值序列(CCSDS将此称为“虚拟填充”)。编码时,会将少量数据添加到数据的开头,以形成完整的223个“数据”字节,然后将这些字节正常送入编码器。编码后,将填充从块的开头剥离,从而生成一个较短的块(或者,可以将数据和奇偶校验复制到较小的数组中)。然后将其发送。

解码时,然后在运行解码器之前,在块的开头重新插入填充。由于填充序列具有已知的固定值,因此这些字节包含错误的可能性为0%。这意味着16个字节的错误保护将转移到块的其余部分。

因此,要从RS(255、223)中获得127字节的块,可以填充原始223字节中除95字节之外的所有数据,然后对其进行编码。您的区块将如下所示:

填充[128] +数据[95] +奇偶校验[32] = 255字节

然后在发送块之前删除填充:

数据[95] +奇偶校验[32] = 127字节

最后在解码器端,在解码之前重新添加填充:

填充[128] +数据[95] +奇偶校验[32] = 255字节

这实际上是RS(127,95)码,每127字节块提供16字节FEC。

CCSDS标准指定虚拟填充:

  • 必须由全零组成
  • 不得传送
  • 不得更改特定物理频道上任务阶段的长度
  • 必须仅在代码块的开头插入
  • 必须仅以8I位的整数倍插入。

如果您要与之交谈的旧设备也严格执行这些要求,则仅需要遵守这些规则(如果使用CCSDS,则必须严格执行)。

对于RS(255,223)的C#实现,我在这里有一个小库:

https://github.com/crozone/ReedSolomonCCSDS

这是基于Phil Karn的C实现的,该实现随处可见,包括GNURadio和Android OS。

CCSDS摘要:“ TM同步和信道编码—概念和合理性摘要”(第5节)

https://public.ccsds.org/pubs/130x1g2.pdf

CCSDS参考:“ TM同步和信道编码”,第4节。

https://public.ccsds.org/Pubs/131x0b3e1.pdf