⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 momapdecoder.m

📁 safsdrghfydjg kukugilihg b nmvhjtdyewrtwert
💻 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 + -