关于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=128−E∏127+E(x−α11j)=i=0∑2EGixi
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=(2J−1)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
- 应为第 9 节中规定的 32 位模式; ,
- 应位于传输的代码块之前。
注 – 因此,帧同步器应设置为在每个传输的代码块 + 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’)的后两个参数指定了伽罗华域的生成多项式。