文章目录
- 3 CONVOLUTIONAL CODING
- 3.1 overview
- 3.2 general
- 3.2.1 ATTACHED SYNC MARKER
- 3.2.2 DATA RANDOMIZATION
- 3.2.3 FRAME VALIDATION
- 3.2.4 QUANTIZATION
- 3.3 BASIC CONVOLUTIONAL CODE SPECIFICATION
- 3.4 PUNCTURED CONVOLUTIONAL CODES
- matlab中的 comm.ConvolutionalEncoder 与CCSDS卷积码协议的对应
- matlab中的poly2trellis
来源:官方文件 CCSDS 131x0b5.pdf
3 CONVOLUTIONAL CODING
3.1 overview
基本卷积码是速率 ® 1/2、约束长度 (K) 7 的透明码,非常适合以高斯噪声为主的信道。,该代码在 3.3 中定义。,当根据 3.4 对此代码进行穿孔(punctured)时,尽管纠错性能较低,但可以实现较高的码率。
穿孔(punctured)允许选择 2/3、3/4、5/6 或 7/8 的单一码率。,四种不同的穿孔方案允许为给定的服务或数据速率选择最合适的纠错级别和符号率。
3.2 general
3.2.1 ATTACHED SYNC MARKER
与卷积码一起使用的附加同步标记应为 9.2 中规定的 32 位模式,并且应始终在执行卷积编码之前插入。
3.2.2 DATA RANDOMIZATION
应使用第 10 节中定义的伪随机化器,除非系统设计者验证以下注释中确定的问题已通过其他方式解决。
当与二进制相移键控 (BPSK) 调制一起使用时,使用基本卷积码指定反相器,以确保足够的位转换以保持接收器符号同步器锁定。,如果使用一些复用方案,例如使用正交相移键控(QPSK)调制,或者如果使用穿孔卷积码,则单独的反相器不能保证足够的位转换。,还有一些数据模式无法确定卷积码同步。,伪随机化器还用于帮助信号采集并减轻传输信号中的谱线。
3.2.3 FRAME VALIDATION
当使用 TM、AOS 或 USLP 传输帧时,应使用参考文献 [1]、[2] 或 [6] 中指定的帧错误控制字段 (FECF) 来验证传输帧,除非卷积码被级联,带有外部 Reed-Solomon 代码(参见第 4 节)。
如果超出解码器的纠正能力,输出中可能会出现未检测到的错误突发。
3.2.4 QUANTIZATION
只要约束(例如解码器的复杂性)允许,就应该使用至少具有三位量化的软位决策。
3.3 BASIC CONVOLUTIONAL CODE SPECIFICATION
NOTES:
1 由于卷积码是透明的,因此可以在卷积编码器之前使用差分编码来帮助解决相位模糊度,相应地,接收端从NRZ-M到NRZ-L的转换应该在卷积解码器的输出处执行。,不建议在卷积编码器之后进行差分编码,因为它会带来相当大的性能损失。,它还需要差分检测,这对于软符号来说更加复杂。
2 当符号流中的固定模式(卷积编码的附加同步标记的固定部分)用于为卷积解码器提供节点同步时,需要考虑由调制波形转换产生的模式的任何修改。
3.4 PUNCTURED CONVOLUTIONAL CODES
matlab中的 comm.ConvolutionalEncoder 与CCSDS卷积码协议的对应
trellis=poly2trellis(7,[171,133]);
function out = conv_encode(data,trellis)
code_conv_0 = convenc(data,trellis);
l=length(data);
code_conv=ones(l,1);
for i=1:2:2*l-1
%这里对应c2的那个inverter。poly2trellis函数里似乎没有直接的表示取反的系数,用了一个亦或
code_conv(i)=code_conv_0(i);
code_conv(i+1)=xor(code_conv_0(i+1),1);
end
out = code_conv;
function decode = conv_decode( code, trellis )
% 解码
% 约束长度1+6=7
% 第一位输出生成序列为(1111001)2=(171)8
% 第二位输出生成序列为(1011011)2=(133)8
% trellis=poly2trellis([7],[171,133]);
% 上述含义为:2种输入状态,4种输出状态,64=2^6个寄存器
% 下一个状态可以组合出64*2种,输出64*2种
% 这东西本质上是个网格图,一堆点那个
l=length(code);
code_conv=ones(l,1);
for i=1:2:l-1
code_conv(i)=code(i);
code_conv(i+1)=xor(code(i+1),1);
end
%解码
tbdepth = 30; % 维特比解码器的回溯深度
decode= vitdec(code_conv,trellis,tbdepth,'trunc','hard');
matlab中的poly2trellis
trellis = poly2trellis(ConstraintLength,CodeGenerator)
trellis = poly2trellis(ConstraintLength,CodeGenerator,FeedbackConnection)
trellis = poly2trellis(ConstraintLength,CodeGenerator) returns the trellis structure description corresponding to the conversion for a rate K / N feedforward encoder. K is the number of input bit streams to the encoder, and N is the number of output connections. ConstraintLength specifies the delay for the input bit streams to the encoder. CodeGenerator specifies the output connections for the input bit streams to the encoder.
trellis = poly 2 trellis(constraint length,CodeGenerator)返回与速率为K / N的前馈编码器的转换相对应的网格结构描述。k是编码器的输入比特流数,N是输出连接数。ConstraintLength指定编码器输入比特流的延迟。CodeGenerator指定输入比特流到编码器的输出连接。
The poly2trellis function accepts a polynomial description of a convolutional encoder and returns the corresponding trellis structure description. This output can be used as an input to the convenc and vitdec functions. It can also be used as a mask parameter value for the Convolutional Encoder, Viterbi Decoder, and APP Decoder blocks.
poly2trellis函数接受卷积编码器的多项式描述并返回相应的网格结构描述。此输出可用作convenc和vitdec函数的输入。它也可以用作卷积编码器、维特比解码器和APP解码器模块的掩码参数值。