%*****************************************************************
% 编码——BPSK——AWGN——高斯白(0,cigema平方)
% mcisj :从编码比特ci到信息比特sj的LLR
% msicj :从信息比特si到编码比特cj的LLR
%
%*****************************************************************
%*****************************************************************
% 全局迭代译码算法下,外部信息在外码译码器和内码译码器之间以一种相似于
%Turbo码译码的方式进行信息交换
% 在全局迭代BP译码算法中,
% ● LT码先进行n1次BP译码迭代,然后LT码输入比特的软输出被反馈作为预编码的
%变量节点的信道LLR值消息,因为LT码的输入比特就是预编码的变量节点
% ● 接着进行n2次预编码的BP译码迭代,在预编码BP译码迭代以后,预编码译码器
%产生的变量节点外部信息被反馈到LT码译码器,作为LT码译码器的先验信息
% 以上过程完成了依次全局BP译码迭代,进行n3次这样的全局BP译码迭代后执行
%硬判决,恢复出信息字
%*****************************************************************
%***************************LT_BP译码迭代开始*******************************
y = mod(x_1*G,2);
while(1)
%***********判斷準備開始1*****************
for i = 1:n
front_judge(i) = length(find(G(:,i)==1)); % n , G
end
%***********判斷準備結束1*****************
count = zeros(1,n);
for j = 1:n
index_1 = find(G(:,j)==1);
if length(index_1)==1 %條件滿足
count(j) = index_1;
x(index_1) = y(j); % y
G(index_1,j) = 0;
end
end
t = 1;
countt = zeros(1,length(find(count~=0)));
for j = 1:n
if count(j)~=0
countt(t) = count(j);
t = t + 1;
end
end
countt;
for i = 1:length(countt) %橫坐標count
for j = 1:n
if G(countt(i),j) == 1
y(j) = xor(x(countt(i)),y(j));
G(countt(i),j) = 0;
end
end
end
%***********判斷準備開始2*****************
for i = 1:n
last_judge(i) = length(find(G(:,i)==1));
end
%***********判斷準備結束2*****************
if last_judge==front_judge
break;
end
end
x_2 = x;
%***************************LT_BP译码迭代结束*******************************
%*************************预编码_BP译码迭代开始******************************
%*************************预编码_BP译码迭代结束******************************
fountain_BP_Gauss_decode
最新推荐文章于 2023-10-30 09:35:14 发布