Turbo 编码器的编码过程(encoderm.m)
·
实现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。
- 核心步骤:
- 第一个卷积编码器:生成信息比特和校验比特。
- 交织器:打乱信息比特,以增强纠错能力。
- 第二个卷积编码器:生成第二组校验比特。
- 复用与穿孔:根据
puncture参数选择适当的编码率(1/3 或 1/2)。 - 调制:将最终输出转换为适合传输的信号格式(+1/-1)。
更多推荐

所有评论(0)