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

📄 ldpcdecode.m

📁 一些奇偶校验矩阵的构造-matlab 消除四环
💻 M
字号:
% LDPC decoder: The belief propogation.
%   Prasanna Sethuraman, March-2004

function [Ld, Lc] = ldpcDecode(y, interleaver, explicitCnDist, explicitVnDist, MAX_ITERATIONS, Lap)

numedges = length(interleaver);

% --------------------------------------------
% Decode message bits with beleif propogation.
% --------------------------------------------

% Assign LLR to variable nodes
[ibitLLR, vbitLLR] = vnd(y, zeros(1,numedges), explicitVnDist);

for iterator = 1:MAX_ITERATIONS
    
    vnToCnMessages(interleaver) = vbitLLR;
    
    [ibitLLR, vbitLLR] = cnd(vnToCnMessages,explicitCnDist);
   
    cnToVnMessages = vbitLLR(interleaver);
    
    [ibitLLR, vbitLLR] = vnd(y, cnToVnMessages, explicitVnDist);
    
%     if length(find(ibitLLR>0))==0
%         disp('Codeword found!');
%         % break;
%     end;

%     % Check if generated message is a code word 
%     oi = find(ibitLLR>=0);
%     zi = find(ibitLLR<0);
%     xHat(oi)=1;
%     xHat(zi)=0;
%     s = mod(H*xHat',2);
%     if s == zeros(N-L,1);
%         break;
%     end;
end;

% Assign outputs
Ld = ibitLLR;
Lc = [];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%     CND      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [ibitLLR, vbitLLR] = cnd(vnToCnMessages, explicitCnDist)

LMAX = 200;
index = 0;
M = length(explicitCnDist);
for i=1:M
    dc=explicitCnDist(i);
    f(1)=vnToCnMessages(index+1);   
    b(dc)=vnToCnMessages(index+dc);
    for j=1:dc-1
        f(j+1) = log( 1+exp( f(j)+vnToCnMessages(index+j+1) ) ) - log( exp(f(j)) + exp(vnToCnMessages(index+j+1)) );  
        b(dc-j) =  log( 1+exp( b(dc-j+1)+vnToCnMessages(index+dc-j) ) ) - log( exp(b(dc-j+1)) + exp(vnToCnMessages(index+dc-j)) );
    end;
    vbitLLR(index+1)=b(2);
    vbitLLR(index+dc)=f(dc-1);
    for j=2:dc-1
        vbitLLR(index+j)=log( 1+exp( f(j-1)+b(j+1) ) ) - log( exp(f(j-1)) + exp(b(j+1)) );
    end;
    index = index + dc;
end;
ibitLLR = [];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%     VND      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [ibitLLR, vbitLLR] = vnd(y, cnToVnMessages, explicitVnDist)

LMAX = 200;
index = 0;
N = length(y);
for i=1:N
    ibitLLR(i)=y(i);
    for j=1:explicitVnDist(i)
        ibitLLR(i) = ibitLLR(i) + cnToVnMessages(index+j);
        if ibitLLR(i) > LMAX 
            ibitLLR(i)=LMAX;
        elseif ibitLLR(i) < -LMAX
            ibitLLR(i)=-LMAX;
        end;
    end;
    for j=1:explicitVnDist(i)
        vbitLLR(index+j)=ibitLLR(i)-cnToVnMessages(index+j);
        if ibitLLR(i) > LMAX 
            ibitLLR(i)=LMAX;
        elseif ibitLLR(i) < -LMAX
            ibitLLR(i)=-LMAX;
        end;
    end;
    index = index + explicitVnDist(i);
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -