实现Turbo 编码器的编码过程,具体为两级递归系统化卷积编码 (RSC) 过程,并根据 puncture 参数选择是否穿孔:

1. 函数输入参数解释

function en_output = encoderm(x, g, alpha, puncture)
  • x:输入的比特序列(信息比特)。
  • g:递归系统化卷积编码器的生成矩阵,定义了卷积编码器的结构。
  • alpha:用于交织的映射表,用来打乱输入数据的顺序。
  • puncture:穿孔参数,决定输出的编码率:
    • puncture = 0:穿孔,生成比特率为 1/2 的输出。
    • puncture = 1:不穿孔,生成比特率为 1/3 的输出。

2. 获取生成矩阵参数

[n,K] = size(g);
m = K - 1;
L_info = length(x);
L_total = L_info + m;
  • n 和 K 是生成矩阵 g 的维度,通常表示卷积编码器的输出和状态数。
  • m 是卷积编码器的记忆长度,等于 ( K - 1 )。
  • L_info 是输入数据(信息比特)的长度。
  • L_total 是信息比特加上尾比特的总长度,尾比特用于终止卷积编码器。

3. 第一个卷积编码器的处理

input = x;
output1 = rsc_encode(g,input,1);
  • 将输入数据 x 传递给第一个卷积编码器,rsc_encode 函数负责执行卷积编码过程。1 表示这个编码器是完美终止的,意味着在输入的末尾加上了尾比特来结束编码过程。

4. 组织输出矩阵

y(1,:) = output1(1:2:2*L_total);
y(2,:) = output1(2:2:2*L_total);
  • output1 是第一个卷积编码器的输出。它包含交织在一起的系统化比特和校验比特。
  • 将输出的比特分成两部分:y(1,:) 存储信息比特,y(2,:) 存储校验比特。

5. 交织输入并传递到第二个编码器

for i = 1:L_total
  input1(1,i) = y(1,alpha(i)); 
end
output2 = rsc_encode(g, input1(1,1:L_total), -1 );
y(3,:) = output2(2:2:2*L_total);
  • 使用交织器 alpha 来打乱输入比特的顺序,这样可以增加系统的纠错能力。
  • 交织后的数据 input1 被传递到第二个卷积编码器(rsc_encode(g, input1, -1)),-1 表示第二个编码器没有尾比特(即开环)。
  • 将第二个编码器的校验比特存储在 y(3,:) 中。

6. 并行与串行复用

if puncture > 0		% unpunctured
   for i = 1:L_total
       for j = 1:3
           en_output(1,3*(i-1)+j) = y(j,i);
       end
   end
else			% punctured into rate 1/2
   for i=1:L_total
       en_output(1,n*(i-1)+1) = y(1,i);
       if rem(i,2)
      % odd check bits from RSC1
          en_output(1,n*i) = y(2,i);
       else
      % even check bits from RSC2
          en_output(1,n*i) = y(3,i);
       end 
    end  
end
  • 穿孔(puncture):
  • 如果 puncture = 1(不穿孔),输出为比特率为 1/3 的编码序列,三个比特并行输出:y(1,:)、y(2,:)、y(3,:)。
  • 如果 puncture = 0(穿孔),输出为比特率为 1/2 的编码序列,通过将 RSC1 的奇数校验比特和 RSC2 的偶数校验比特交替插入。

具体处理:

  • puncture > 0(不穿孔):en_output 每三个比特合并输出。
  • puncture = 0(穿孔):根据奇偶性交替选择校验比特。

7. 最后的调制过程

en_output = 2 * en_output - ones(size(en_output));
  • 最后,将编码后的输出进行反向调制(抗极性调制),将 en_output 中的每个比特转换为 +1 或 -1。
  • 2 * en_output 将比特从 {0, 1} 转换为 {0, 2}。
  • 减去 1,将结果转换为 {+1, -1}。

整体作用

实现了 Turbo 编码的核心部分,采用了两级递归系统化卷积编码器 (RSC)。通过交织、穿孔选择和抗极性调制,将输入比特 x 编码为信道传输所需的输出比特 en_output。

  • 核心步骤:
  1. 第一个卷积编码器:生成信息比特和校验比特。
  2. 交织器:打乱信息比特,以增强纠错能力。
  3. 第二个卷积编码器:生成第二组校验比特。
  4. 复用与穿孔:根据 puncture 参数选择适当的编码率(1/3 或 1/2)。
  5. 调制:将最终输出转换为适合传输的信号格式(+1/-1)。

更多推荐