REED-SOLOMON CODING R-S编码CCSDS规范

关于4.3.3和4.3.4中的伽罗华域生成器
https://ww2.mathworks.cn/help/comm/ref/rsgenpoly.html

4.1 OVERVIEW

本节中定义的里德-所罗门 (R-S) 码是强大的突发纠错码。,可以选择两种不同的纠错选项之一。,为了获得最大性能(以伴随的开销为代价),E=16 选项可以纠正每个码字中的 16 个 R-S 符号错误。,为了降低开销(性能降低),E=8 选项可以纠正每个码字 8 个 R-S 符号。,里德-所罗门码可以单独使用,因此它在突发噪声信道中提供了优异的前向纠错能力。,然而,如果单独的里德-所罗门码不能提供足够的编码增益,则可以将其与第3节中定义的卷积码级联。这样使用时,里德-所罗门码是外码,而卷积码是内码,。

4.2 GENERAL

4.2.1 DATA RANDOMIZATION

应使用第 10 节中定义的伪随机化器,除非系统设计者验证以下注释中确定的问题已通过其他方式解决。

推荐的里德-所罗门码本身不能保证足够的位转换来保持接收器符号同步器锁定。,由于这些代码的准循环性质,不正确的代码块同步可能会导致未检测到的解码错误。,伪随机化器还用于帮助信号采集并减轻传输信号中的谱线。

4.2.2 FRAME VALIDATION

参考文献[1]、[2]和[6]中指定的FECF是可选的。,系统设计者可以选择使用它进行额外的代码块验证,特别是对于 E=8 代码。

E=16 的 Reed-Solomon 码具有极低的未检测到错误率,而 E=8 的 Reed-Solomon 码的未检测到错误率对于某些应用来说足够低。,因此,R-S 解码器可以单独使用来验证代码块,从而验证所包含的 TM 传输帧(参考文献 [1])、AOS 传输帧(参考文献 [2])或 USLP 传输帧(参考文献 [6])。

4.3 SPECIFICATION

4.3.1 PARAMETERS

所选Reed-Solomon(R-S)码的参数如下:

a) J 应为每个 R-S 符号 8 位。
b) E 应为 16 或 8 个 R-S 符号。

E 应为 16 或 8 个 R-S 符号。

4.3.2 GENERAL CHARACTERISTICS

该代码应符合以下一般特征:
a) J、E 和 I(交织深度)是独立参数。
b) 每个 R-S 码字 n = 2 J – 1 = 255 n = 2^J–1 = 255 n=2J–1=255 个符号。
c) 2E是表示奇偶校验的R-S码字的n个符号中的R-S符号的数量。
d) k = n–2E 是表示信息的 R-S 码字的 n 个 R-S 符号中的 R-S 符号的数量。

4.3.3 FIELD GENERATOR POLYNOMIAL

场发生器多项式应为:
F ( x ) = x 8 + x 7 + x 2 + x + 1 \mathrm{F}(x)=x^8+x^7+x^2+x+1 F(x)=x8+x7+x2+x+1
over GF(2).

显然,CCSDS中的初始伽罗华域生成器与matlab中的函数不同。
在这里插入图片描述

4.3.4 CODE GENERATOR POLYNOMIAL

代码生成多项式应为:
g ( x ) = ∏ j = 128 − E 127 + E ( x − α 11 j ) = ∑ i = 0 2 E G i x i g(x)=\prod\limits_{j=128-E}^{127+E}(x-\alpha^{11j})\quad\quad\quad\quad=\sum\limits_{i=0}^{2E}G_ix^i g(x)=j=128E127+E(xα11j)=i=02EGixi

o v e r   G F ( 2 8 ) , w h e r e   F ( α ) = 0. \mathrm{over~GF}(2^8),\mathrm{where~F}(\alpha)=0. over GF(28),where F(α)=0.

Notes:

1 应该认识到,α11 是 GF(28) 中的本原元素,并且当 E = 16 时,F(x) 和 g(x) 表征为 (255,223) Reed-Solomon 码;当 E = 8 时,表征为 (255,239) ReedSolomon 码.

2 所选择的代码是系统代码。这会产生系统的代码块。

4.3.5 SYMBOL INTERLEAVING

4.3.5.1 交织深度允许值为I=1、2、3、4、5、8。
注 – I=1 相当于没有交错。

4.3.5.2 任务阶段的物理信道上的交织深度通常应固定。
注 – 符号交织的讨论包含在 4.4.1 中。

4.3.6 最大码块长度
最大码块长度(以 R-S 符号表示)应由以下等式确定:
L max ⁡ = n I = ( 2 J − 1 ) I = 255 I L_{\max}=nI=(2^J-1)I=255I Lmax=nI=(2J1)I=255I

4.3.7 SHORTENED CODEBLOCK LENGTH

4.3.7.1 可以使用缩短的码块长度来容纳小于最大值的帧长度。

注 — 然而,由于里德-所罗门码是块码,因此解码器必须始终在完整块的基础上进行操作。

4.3.7.2 为了实现完整的码块,应添加“虚拟填充”以弥补缩短的块与最大码块长度之间的差异。

注 1:虚拟填充的特性和限制见 4.3.8.2。

2 由于虚拟填充不被传输,因此编码器和解码器都需要设置以正确的长度插入虚拟填充,以便正确执行编码和解码过程。

4.3.7.3 当编码器(在块开始处初始清零)接收到表示信息的 kI–Q 符号(其中 Q 表示填充,是 I 的倍数,并且小于 kI)时,应计算 2EI 个校验符号,over kI个符号,其中前导Q符号应被视为全零符号。

注 – A (nI–Q, kI–Q) 缩短的代码块结果。

4.3.7.4 生成的缩短码块的前导 Q 符号(全零)不应输入编码器,也不应传输。

以这种方式缩短传输的码块长度会在一定程度上改变整体性能,具体取决于所使用的虚拟填充量。,由于它不包含虚拟填充,因此最大代码块长度可以充分发挥性能。,此外,随着码块中虚拟填充的增加(在特定比特率下),解码器必须处理的每单位时间的码块数量也增加。,因此,应注意不要超过解码器的最大运行速度(每单位时间的代码块)。

4.3.8 REED-SOLOMON 码块分区和虚拟填充

4.3.8.1 分区 Reed-Solomon 码块的各部分(见图 4-1)定义如下:

a) Reed-Solomon 校验符号应由码块的尾部 2 E I 2EI 2EI 符号( 2 E I J 2EIJ 2EIJ 位)组成。


1 例如,当 E = 16 E = 16 E=16 k = 223 k = 223 k=223 时,对于 I = 5 I=5 I=5,这始终是 1280 1280 1280 位。 ,
2 传输帧由TM空间数据链路协议(参考文献[1])、AOS空间数据链路协议(参考文献[2])或统一空间数据链路协议(参考文献[6])定义。 ,(有关传输帧长度的限制,请参阅第 11 节。)

在这里插入图片描述

b) The Attached Sync Marker used with R-S code

  1. 应为第 9 节中规定的 32 位模式; ,
  2. 应位于传输的代码块之前。

注 – 因此,帧同步器应设置为在每个传输的代码块 + 32 位处都有一个标记。

c) 传输的码块应由传输帧(不带 32 位同步标记)和 R-S 校验符号组成。

注 1:传输的代码块是物理上馈入 R-S 解码器的接收数据实体。 ,(例如,当E = 16且k = 223时,使用I = 5并且没有虚拟填充,传输的码块的长度将为10,200位;如果使用虚拟填充,则它会逐渐变短,具体取决于数量,用过的。)

2 逻辑代码块是由 R-S 解码器操作的逻辑数据实体。,它可以具有与传输的代码块不同的长度,因为它考虑了引入的虚拟填充量。 ,(例如,当 E = 16 且 k = 223 时,对于 I=5,逻辑代码块的长度似乎总是恰好为 10,200 位。)

3 R-S 码块的划分如图 4-1 所示。

在这里插入图片描述
在这里插入图片描述

后续关于帧结构的一些补充

帧的关键参数:帧长度,帧格式, 同步头

帧长度就是对于data长度的限制

举例

一帧长度1000
然后其中同步头长度50
接收端直接用这个同步头做相关,就能知道帧的起始位置。按照约定好的帧长把数据解出来,计算误码率。

数据段长度600
那么你生成了randi([0 1], 1, 6000)的话
就分成10帧来发,每一帧取600个数

一帧中的另外350bit 包括了比如什么 航天标识符,IQ标识符,填充字段,勤务段数据之类的(跟信息数据无关)。

一般还会有一段数据表示你现在发到第几帧了,是个累加数。这样接收端就能知道有没有丢帧。

9.1 OVERVIEW

9.1.1 SYNCHRONIZATION

帧或码块同步需要正确解码里德所罗门,Turbo和LDPC码字,以及后续处理传输帧。此外,如果使用伪随机生成器的同步是必要的(见第10节)。它也有助于协助对卷积码的解码器的节点同步过程。

对于使用3.3中规定的基本卷积编码的编码系统,ASM可以在信道符号域(即,在任何解码之前)或在由卷积解码器解码的位域中获得。

对于使用3.3中指定的基本卷积码的连接的里德所罗门和卷积编码系统,可以在信道符号域(即在任何解码之前)或在由内部码解码的位域(即里德所罗门码的码符号域)中获得ASM。

对于使用3.4中规定的穿孔卷积编码的编码系统,ASM只能在由卷积解码器解码的比特域内获得。它不能在信道符号域中获取(即,在任何解码之前)。

对于使用3.4中指定的穿孔卷积码的连接里德-所罗门和卷积编码系统,ASM只能在内部码解码的位域(即里德-所罗门码的码符号域)中获得;即。;不能在信道码域中获取(即在任何解码之前)。

对于Turbo编码系统,ASM只能在信道码元域中获取(即,在Turbo码的码元域中进行任何解码之前)。

对于传输帧的LDPC编码系统,ASM只能在信道符号域内(即在LDPC码的任何解码之前)获得。

对于smtf流的LDPC编码系统,ASM只能在LDPC解码器解码的位域内获得。

9.1.2 CHANNEL ACCESS DATA UNIT

This Recommended Standard defines a data unit called the Channel Access Data Unit
(CADU) whose contents are as per attached table 9-1. The Transfer Frame, codeword, or
codeblock in the CADU may or may not be randomized.

本推荐标准定义了一个称为通道访问数据单元(CADU)的数据单元,其内容如附表9-1所示。CADU中的传输帧、码字或码块可能是随机的,也可能不是随机的。
在这里插入图片描述

9.2 THE ATTACHED SYNC MARKER (ASM) (附加的同步标记(ASM))

9.2.1.1当使用卷积编码(第3节)或SMTF流的LDPC编码(第8节),或不使用编码时,ASM应放置在传输帧之间。

9.2.1.2当使用里德所罗门编码(第4节)或串联编码(第5节)时,ASMs应放置在里德所罗门编码块之间。

9.2.1.3当使用Turbo编码(第6节)或传输帧的LDPC编码(第7节)时,asm应放置在码字之间。

注:通过识别规则间隔ASM的特定位模式,在接收端获得同步;可以通过进一步检查来验证同步。在smtf流的LDPC编码的情况下(第8节),首先使用CSM在码字级别进行码字同步。

9.2.1.4如果使用卷积代码,则ASM应进行卷积编码。

9.2.1.5如果将内部卷积代码与外部里德-所罗门代码一起使用,则ASM应由内部代码编码,而不是由外部代码编码。(见第3节。)

9.3 ASM BIT PATTERNS

9.3.1非Turbo或LDPC编码的数据的ASM应由一个32位(4-八位位)标记组成,其模式见图9-1所示。在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.3.2标称代码率为r = 1/2、1/3、1/4或1/6的数据ASM应由32/r位(4/r-八进制)标记组成,位模式如图9-2至9-5所示。

在这里插入图片描述

9.3.3将LDPC编码应用于标称代码率r = 7/8的传输帧(第7节)后进行LDPC编码的数据的ASM应由一个32位标记组成,该32位标记模式图9-1所示。

9.3.4将LDPC编码应用到代码率为= 1/2、2/3或4/5的传输帧(第7节)的LDPC编码数据的ASM应由一个64位标记组成,具有图9-2所示的位模式。

9.3.5应用LDPC编码对SMTF流(第8节)进行LDPC编码的数据的ASM应包括一个32位标记和位模式。

在这里插入图片描述

9.4 LOCATION OF ASM

9.4.1 ASM应附于(即之前)编码块(如果里德所罗门编码)、编码字(如果Turbo或LDPC编码)或传输帧(如果仅卷积编码或LDPC编码或未编码)。

9.4.2 ASM应立即跟随前一个编码块(如果里所罗门编码)、编码字(如果Turbo或LDPC编码)或传输帧(如果仅卷积编码或LDPC编码或未编码);即,在ASM之前没有中间位(数据或填充)。

9.5 ASM与里德-所罗门、涡轮和LDPC码块和码字的关系

9.5.1 ASM不是里德-所罗门编码块编码数据空间的一部分,也不应呈现给里德-所罗门编码器或解码器的输入。

注意:这将防止编码器在某些重复的数据依赖条件下(例如,01010101010的测试模式)在检查符号字段中常规再生第二个相同的标记,这可能导致接收端同步困难。ASM、芦苇-solomon码块和传输帧之间的关系如图4-1所示。

9.5.2 同样地,ASM不得提交给涡轮编码器或解码器的输入端。它应直接连接到Turbo码字上(见图6-4)。

9.5.3同样地,ASM也不得提交给LDPC编码器或解码器的输入端。它应直接附加到LDPC码字上。

9.6 ASM FOR EMBEDDED DATA STREAM

注:当另一个数据流(例如正向磁带录音机回放的传输帧流)插入通信信道上的主流传输帧的数据字段时,可能需要不同的ASM模式(见图9-6)。

嵌入式数据流的ASM应由32bit(4-进制)标记组成,其模式如下:在这里插入图片描述







代码示例以及尝试

在Reed-Solomon (RS) 编码中,场发生器多项式(Field Generator Polynomial)是用来定义Galois域(GF)的生成多项式,它在编码和译码中起着关键作用。RS编码中的每个GF元素都可以用多项式表示,而场发生器多项式就是用来定义GF的生成方式。

G F ( 2 m ) GF(2^m) GF(2m)上,每个元素都可以表示为m位二进制数。一个 G F ( 2 m ) GF(2^m) GF(2m)的元素可以用一个m次的多项式来表示,其中多项式的系数为0或1。例如,在GF(2^8)上,一个元素可以用8位二进制数表示,也可以用一个8次多项式表示,其系数为0或1。

场发生器多项式定义了如何在GF(2^m)上生成元素。它是一个m次的不可约多项式,即它不能被分解为两个次数低于m的多项式的乘积。在RS编码中,通常选择的场发生器多项式是一个m次的不可约二进制多项式,因为这样可以更容易地进行编码和译码。

例如,对于GF(2^8),可以选择的场发生器多项式可以表示为一个8次的不可约二进制多项式。这个多项式可以用一个数组来表示,数组的每个元素对应多项式的一个系数。例如,[1 1 0 0 0 1 1 1]表示的是多项式 x 8 + x 7 + x 2 + x + 1 x^8+x^7+x^2+x+1 x8+x7+x2+x+1over GF(2)。

当进行RS编码时,使用的场发生器多项式决定了编码后的纠错能力和性能。因此,选择适当的场发生器多项式是RS编码中非常重要的一步。


当使用数组表示多项式时,数组中的每个元素对应于多项式中相应的系数。在GF(2)上,多项式中的系数只能是0或1,因此数组中的每个元素也只能是0或1。

对于 [1 1 0 0 0 1 1 1] 这个数组,它表示的是一个8次多项式。每个数组元素对应的是多项式中相应次数的系数。

  • 第一个元素对应的是 x 7 x^7 x7的系数,因为它在数组中的位置是7。
  • 第二个元素对应的是 x 6 x^6 x6的系数,因为它在数组中的位置是6。
  • 以此类推,最后一个元素对应的是 x 0 x^0 x0(即常数项)的系数。

因此, [1 1 0 0 0 1 1 1] 这个数组表示的是一个8次多项式,其系数分别为1、1、0、0、0、1、1、1。转换成多项式形式就是:

x 7 + x 6 + x 2 + x + 1 x^7 + x^6 + x^2 + x + 1 x7+x6+x2+x+1

这样就对应上了多项式 x 8 + x 7 + x 2 + x + 1 x^8+x^7+x^2+x+1 x8+x7+x2+x+1 over GF(2)。


当涉及到RS编码和译码时,Matlab提供了许多有用的函数来简化这些过程。下面是一个基本的RS编码和译码的示例流程:

 % RS 编码
    N_GF = 255; % 'N' :(N,N-d_min+1 ,d_min): (N,K,d_min)
    t = 16; % 't': radius of the bounded sphere: error correcting capability
    d_min = 2*t+1; % minimum distance of the RS code: should be odd number:
    K_GF = N_GF-d_min+1; 
    % DONOT CHANGE THIS
    m = 8; % dimension of the finite field: 2 is the characterstic: GF(2^8)
    data_size = K_GF*m;
    nSymbol = data_size;     % 每种信噪比下发送的符号数  n = 7, k = 5的情况下要求数据的长度必须是1500

    % -- GENERATOR POLYNOMIAL FOR THE RS code ------------
    gen_poly = Gen_Poly_RS(m, d_min);  % D 8 4 3 2 1   285decimal

    n = 255; % 编码字长度
    E = 16; % 错误纠正能力的一半
    k = 255 - 2 * E; % 消息字长度   % 223
    encoder = comm.RSEncoder('BitInput',true,'CodewordLength',n,'MessageLength',k , 'GeneratorPolynomial', gen_poly);
    decoder = comm.RSDecoder('BitInput',true,'CodewordLength',n,'MessageLength',k, 'GeneratorPolynomial', gen_poly);

关键函数

function [gen_poly] = Gen_Poly_RS(m,d_min)  % decimal 391
a2 = gf(2,m,'D8+D7+D2+D1+1');

temp = gf([1 a2],m,'D8+D7+D2+D1+1');

for i1=1:d_min-1 
    temp = conv(temp,gf([1 a2^(i1)],m,'D8+D7+D2+D1+1'));
end
gen_poly = temp;
end

gf(2,m,‘D8+D7+D2+D1+1’)的后两个参数指定了伽罗华域的生成多项式。

  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值