📄 momapdecoder.m
字号:
function [LEO,LD]=MoMAPDecoder(LM,LEI,SP,SM,PS,NS,OP,MPI)
% LM : K*2 = A Priori LLR matrix from SISOMUD of systematic and corresponding code bits of the Modified MAP Decoder.
% LEI : K*(J-1) = A Priori LLR matrix of systematic code bits from other
% 'J-1' Modified MAP Decoders.
% LD : K*1 = A Posteriori LLR matrix of data bits.
% LEO : K*2 = Extrinsic LLR matrix of systematic code bits and corresponding code bits of Modified MAP Decoder.
% SP(j,:,:) : (variable)*2 = set of state pairs (s',s) in which the 'j' bit of codeword is +1.
% SM(j,:,:) : (variable)*2 = set of state pairs (s',s) in which the 'j' bit of codeword is -1.
% P : K*w*N*2 = Code bit probability P[b(t,i,s',s)] only for valid state
% pairs.
% AL : N*(K+1) = Forward state metric matrix.
% BE : N*(K+1) = Backward state metric matrix.
N=length(PS);
s=size(LEI);
K=s(1);
JM=s(2);
LM(:,1)=Interleaver(MPI,LM(:,1))';
for i=1:JM
LEI(:,i)=Interleaver(MPI,LEI(:,i))';
end
AL(1,1)=1;
AL(2:N,1)=0;
for i=2:K+1
for j=1:N
AL(j,i)=0;
for k=1:N
AL(j,i) = AL(j,i) + AL(k,i-1)*BranchMetric0(i-1,k,j,PS,NS,OP,LM(i-1,1),LEI)*BranchMetricV(i-1,k,j,PS,NS,OP,LM(i-1,2));
end
end
C(i-1)=(sum(AL(:,i)))^-1;
AL(:,i)=C(i-1)*AL(:,i);
end
BE(:,K+1)=AL(:,K+1);
for i=K:-1:1
for j=1:N
BE(j,i)=0;
for k=1:2
BE(j,i) = BE(j,i) + BE(NS(j,k),i+1)*BranchMetric0(i,j,NS(j,k),PS,NS,OP,LM(i,1),LEI)*BranchMetricV(i,j,NS(j,k),PS,NS,OP,LM(i,2));
end
end
if(i==1)
sf=1;
else
sf=C(i-1);
end
BE(:,i)=sf*BE(:,i);
end
s=size(SP);
r=size(SM);
mp=TD2mat(SP,1,s(2),s(3));
mm=TD2mat(SM,1,r(2),r(3));
s=size(mp);
r=size(mm);
for i=1:K
Nu=0;
De=0;
for j=1:s(1)
Nu= Nu + AL(mp(j,1),i)*BE(mp(j,2),i+1)*BranchMetricV(i,mp(j,1),mp(j,2),PS,NS,OP,LM(i,2));
end
for j=1:r(1)
De= De + AL(mm(j,1),i)*BE(mm(j,2),i+1)*BranchMetricV(i,mm(j,1),mm(j,2),PS,NS,OP,LM(i,2));
end
LEO(i,1)=log(Nu/(De+eps));
end
s=size(SP);
r=size(SM);
mp=TD2mat(SP,2,s(2),s(3));
mm=TD2mat(SM,2,r(2),r(3));
s=size(mp);
r=size(mm);
for i=1:K
Nu=0;
De=0;
for j=1:s(1)
Nu= Nu + AL(mp(j,1),i)*BE(mp(j,2),i+1)*BranchMetric0(i,mp(j,1),mp(j,2),PS,NS,OP,LM(i,1),LEI);
end
for j=1:r(1)
De= De + AL(mm(j,1),i)*BE(mm(j,2),i+1)*BranchMetric0(i,mm(j,1),mm(j,2),PS,NS,OP,LM(i,1),LEI);
end
LEO(i,2)=log(Nu/(De+eps));
end
for i=1:K
LD(i)=LM(i,1)+LEO(i,1)+sum(LEI(i,:));
end
LD=Deinter(MPI,LD);
LEO(:,1)=Deinter(MPI,LEO(:,1))';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -