decodelogdomain.m

来自「LDPC Decoder for rate=1/2 Min-Sum, Sum-P」· M 代码 · 共 44 行

M
44
字号
function vHat = decodeLogDomain(rx, H, N0, iteration)
[M N] = size(H);
Lci = (-4*rx./N0)';
Lrji = zeros(M, N);
Pibetaij = zeros(M, N);
Lqij = H.*repmat(Lci, M, 1);
[r, c] = find(H);
for n = 1:iteration   
   alphaij = sign(Lqij);   
   betaij = abs(Lqij);
   for l = 1:length(r)
      Pibetaij(r(l), c(l)) = log((exp(betaij(r(l), c(l))) + 1)/...
                             (exp(betaij(r(l), c(l))) - 1));
   end   
   % ----- Horizontal step -----
   for i = 1:M
      c1 = find(H(i, :));           
      for k = 1:length(c1)
         sumOfPibetaij = 0;
         prodOfalphaij = 1;       
         sumOfPibetaij = sum(Pibetaij(i, c1)) - Pibetaij(i, c1(k));        
         if sumOfPibetaij < 1e-20
            sumOfPibetaij = 1e-10;
         end         
         PiSumOfPibetaij = log((exp(sumOfPibetaij) + 1)/(exp(sumOfPibetaij) - 1));
         prodOfalphaij = prod(alphaij(i, c1))*alphaij(i, c1(k));
         Lrji(i, c1(k)) = prodOfalphaij*PiSumOfPibetaij;
      end
   end
   % ------ Vertical step ------
   for j = 1:N
      r1 = find(H(:, j));    
      for k = 1:length(r1)             
         Lqij(r1(k), j) = Lci(j) + sum(Lrji(r1, j)) - Lrji(r1(k), j);      
      end      
      LQi = Lci(j) + sum(Lrji(r1, j));     
      if LQi < 0
         vHat(j) = 1;
      else
         vHat(j) = 0;
      end
   end
end 
fprintf('Sum-product is done...\n');

⌨️ 快捷键说明

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