亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ldpc_decode.m

?? 20072010.rar:tubor,LDPC,convolution的部分代碼
?? M
字號:
function [QQ,x_hat, success, k] = ldpc_decode(f,H,qq)

if qq==2 % binary case first, just use the old code
   
   [m,n] = size(H); if m>n, H=H'; [m,n] = size(H); end
   if ~issparse(H) % make H sparse if it is not sparse yet
      [ii,jj,sH] = find(H);
      H = sparse(ii,jj,sH,m,n);
   end
   
   %f0 = f(1,:); % prob of 0
   %f1 = f(2,:);
   
   f1 = f(:);
   f0 = 1 - f1;
   
   %initialization
   [ii,jj,sH] = find(H);          % subscript index to nonzero elements of H 
   indx = sub2ind(size(H),ii,jj); % linear index to nonzero elements of H
   q0 = H * spdiags(f0(:),0,n,n);
   sq0 = full(q0(indx)); 
   sff0 = sq0;

   q1 = H * spdiags(f1(:),0,n,n); 
   sq1 = full(q1(indx));
   sff1 = sq1;

   %iterations
   k=0;
   success = 0;
   max_iter = 100;
   while ((success == 0) & (k < max_iter)),
      k = k+1;
   
      %horizontal step
      sdq = sq0 - sq1; sdq(find(sdq==0)) = 1e-20; % if   f0 = f1 = .5
      dq = sparse(ii,jj,sdq,m,n);
      Pdq_v = full(real(exp(sum(spfun('log',dq),2)))); % this is ugly but works :)
      Pdq = spdiags(Pdq_v(:),0,m,m) * H;
      sPdq = full(Pdq(indx));
      sr0 = (1+sPdq./sdq)./2; sr0(find(abs(sr0) < 1e-20)) = 1e-20;
      sr1 = (1-sPdq./sdq)./2; sr1(find(abs(sr1) < 1e-20)) = 1e-20;
      r0 = sparse(ii,jj,sr0,m,n);
      r1 = sparse(ii,jj,sr1,m,n);
   
      %vertical step
      Pr0_v = full(real(exp(sum(spfun('log',r0),1))));
      Pr0 = H * spdiags(Pr0_v(:),0,n,n);
      sPr0 = full(Pr0(indx));
      Q0 = full(sum(sparse(ii,jj,sPr0.*sff0,m,n),1))';
      sq0 = sPr0.*sff0./sr0;
   
      Pr1_v = full(real(exp(sum(spfun('log',r1),1))));
      Pr1 = H * spdiags(Pr1_v(:),0,n,n);
      sPr1 = full(Pr1(indx)); 
      Q1 = full(sum(sparse(ii,jj,sPr1.*sff1,m,n),1))';
      sq1 = sPr1.*sff1./sr1;
   
      sqq = sq0+sq1;
      sq0 = sq0./sqq;
      sq1 = sq1./sqq;
   
      %tentative decoding
      QQ = Q0+Q1;
      Q0 = Q0./QQ;
      Q1 = Q1./QQ;
      x_soft=Q1-Q0;
      x_hat = (sign(Q1-Q0)+1)/2;
      
      rs=rem(H*x_hat,2);
      dim=size(rs,1);
      count=0;
      for i=1:dim
          if rs(i)~=0, count=count+1; end
      end
      if count==0, success=1; end
%      if rem(H*x_hat,2) == 0, success = 1; end
   end
   % end of binary case

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

else % GFq, nonbinary  
   % our strategy is "divide and concur" - we partition H into several matrices with
   % the fixed number of variables per function in each of them and the other way around
   
   [m,n] = size(H); if m>n, H=H'; [m,n] = size(H); end
   if ~issparse(H) % make H sparse if it is not sparse yet
      [ii,jj,sH] = find(H);
      H = sparse(ii,jj,sH,m,n);
   end
   
   %initialization
   [ii,jj,sH] = find(H);          % subscript index to nonzero elements of H 
   W = sparse(ii,jj,ones(size(ii)),m,n); %indicator function
   nvars = full(sum(W,2));        % number of variables participating each check function
   minvars = min(nvars);          % min number of variables in a function
   maxvars = max(nvars);          % max number of variables in a function
   
   nfuns = full(sum(W,1));        % number of functions per variable
   minfuns = min(nfuns);          % min number of functions per variable
   maxfuns = max(nfuns);          % max number of functions per variable
   
   % the following will be used in solving linear equations over GFq
   M=log2(qq); % GFq exponent
   [tuple power] = gftuple([-1:2^M-2]', M, 2); 
   alpha = tuple * 2.^[0 : M - 1]';
   beta(alpha + 1) = 0 : 2^M - 1;


   % create cell arays which contain sparse matrices with fixed # of variables in rows
   for nnvars = minvars:maxvars
      tmp = zeros(size(H));
      rows = find(nvars == nnvars); %rows of H having 'nnvars' variables
      tmp(rows,:) = H(rows,:);
      [jjj,iii,ssH] = find(tmp'); 
      iir{nnvars} = reshape(iii,nnvars,length(iii)/nnvars)';
      jjr{nnvars} = reshape(jjj,nnvars,length(jjj)/nnvars)';
      Hr{nnvars} = reshape(ssH,nnvars,length(ssH)/nnvars)';% separate parity matrices
      q{nnvars} = reshape(f(:,jjr{nnvars})',[size(jjr{nnvars}),qq]); %initialize to channel likelihoods
      
      % Prestore valid configurations in array X
      if(~isempty(Hr{nnvars})) % make sure the are functions for this case
         Hleft = Hr{nnvars}(:,1);         % will solve for these varibles
         Hright = Hr{nnvars}(:,2:nnvars); % while setting these arbitrary
         for i=0:(qq^(nnvars-1)-1)  % there are qq^(nnvars-1) different combinations
            xr = (fliplr(de2bi(i,nnvars-1,qq))); % current nonzero combination 
             
            % find the remaining variable to satisfy the parity checks
            right_part = ones(size(Hleft))*(-Inf); %exponent over GFq
            for j=1:(nnvars-1) % multiply each column of Hright by the symbol from x and accumulate
               rr1 = power(beta(xr(j)+1)+1);      % get expon. representation of xr(i)
               rr2 = power(beta(Hright(:,j)+1)+1);% same for the column of Hright
               rr3 = gfmul(rr1,rr2,tuple)'; % this is exponential representation of the product
               right_part = gfadd(right_part,rr3,tuple);
            end
            left_part = mod((qq-1)+ right_part - power(beta(Hleft+1)+1),qq-1);
            xl=zeros(size(left_part));
            nzindx = find(isfinite(left_part));
            xl(nzindx) = alpha(left_part(nzindx)+2);
            x = [xl repmat(xr,[length(xl),1])]; %this is a valid configuration
            X{nnvars}(i+1,:,:) = x;
         end
      end
      
      
   end
   
   % create cell arays which contain sparse matrices with fixed # of functions in columns
   for nnfuns = minfuns:maxfuns
      tmp = zeros(size(H));
      cols = find(nfuns == nnfuns); %rows of H having 'nnvars' variables
      tmp(:,cols) = H(:,cols);
      [iii,jjj,ssH] = find(tmp); 
      iic{nnfuns} = reshape(iii,nnfuns,length(iii)/nnfuns);
      jjc{nnfuns} = reshape(jjj,nnfuns,length(jjj)/nnfuns);
      Hc{nnfuns} = reshape(ssH,nnfuns,length(ssH)/nnfuns);% separate parity matrices
      ff{nnfuns} = reshape(f(:,jjc{nnfuns})',[size(jjc{nnfuns}),qq]); %  this will not change
   end

   %iterations
   k=0;
   success = 0;
   max_iter = 100;
   while ((success == 0) & (k < max_iter)),
      k = k+1
      
      buffer = zeros([size(H),qq]);
      
      % Horizontal step - forming messages to variables from the parity check functions
      % each Hr is processed separately
      for nnvars = minvars:maxvars
         if(~isempty(Hr{nnvars})) % make sure the are functions for this case
         result = zeros([size(Hr{nnvars}) qq]); % will store the intermediate result
         for i=0:(qq^(nnvars-1)-1)  % there are qq^(nnvars-1) different combinations
               x = squeeze(X{nnvars}(i+1,:,:)); %lookup a valid configuration
               
               %calculate products
               a = cumsum(ones(size(x)),1);
               b = cumsum(ones(size(x)),2);
               idx = sub2ind(size(q{nnvars}),a,b,x+1); %index of current configuration in 3D
               pp = repmat(prod(q{nnvars}(idx),2),[1,size(x,2)]); %product for this configuration 
        
               denom = q{nnvars}(idx);
               denom(find(denom==0)) = realmin;
               result(idx) = result(idx) + pp./denom;
            end
            
            %  update global distribution
            a = repmat(iir{nnvars},[1,1,qq]);
            b = repmat(jjr{nnvars},[1,1,qq]);
            c = permute(repmat((1:qq)',[1 size(a,1) size(a,2)]),[2 3 1]);
            gidx = sub2ind(size(buffer),a,b,c);
            buffer(gidx) = result;
         end
      end
      
      % initialize r from the global data in buffer
      for nnfuns = minfuns:maxfuns
         a = repmat(iic{nnfuns},[1,1,qq]);
         b = repmat(jjc{nnfuns},[1,1,qq]);
         c = permute(repmat((1:qq)',[1 size(a,1) size(a,2)]),[2 3 1]);
         gidx = sub2ind(size(buffer),a,b,c);
         r{nnfuns} = buffer(gidx);
      end

      
      %vertical step
      buffer = zeros([size(H),qq]);
      QQ = zeros(qq,size(H,2));
      for nnfuns = minfuns:maxfuns
         if(~isempty(Hc{nnfuns})) % make sure the are variables for this case
            %calculate products
            pp = repmat( prod ( r{nnfuns},1),[size(r{nnfuns},1),1]).*ff{nnfuns}; %product for this configuration 
            denom = r{nnfuns};
            denom(find(denom==0)) = realmin;
            result = pp./denom;
            result = result./repmat((sum(result,3)),[1,1,qq]); %normalize to distribution
            %  update global distribution
            a = repmat(iic{nnfuns},[1,1,qq]);
            b = repmat(jjc{nnfuns},[1,1,qq]);
            c = permute(repmat((1:qq)',[1 size(a,1) size(a,2)]),[2 3 1]);
            gidx = sub2ind(size(buffer),a,b,c);
            buffer(gidx) = result;
            
            Q{nnfuns} = pp.*ff{nnfuns};
            b = repmat(jjc{nnfuns}(1,:),[qq,1]);
            c = repmat((1:qq)',[1, size(b,2)]);
            qidx =  sub2ind(size(QQ),c,b);
            QQ(qidx) = squeeze(Q{nnfuns}(1,:,:))';
         end
      end
      

      
      % initialize q from the global data in buffer
      for nnvars = minvars:maxvars
         a = repmat(iir{nnvars},[1,1,qq]);
         b = repmat(jjr{nnvars},[1,1,qq]);
         c = permute(repmat((1:qq)',[1 size(a,1) size(a,2)]),[2 3 1]);
         gidx = sub2ind(size(buffer),a,b,c);
         q{nnvars} = buffer(gidx);
      end
   
      
      %tentative decoding
      QQ = QQ ./ repmat(sum(QQ,1),[qq 1]); %normalize - can be used as soft outputs
      [xi xj sx] = find(QQ == repmat(max(QQ),[size(QQ,1),1]));
      x_hat = xi-1;
      if ldpc_encode(x_hat,H',qq) == 0, success = 1; end
   end
end % end of nonbinary case

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美久久久| 中文字幕亚洲欧美在线不卡| 成人国产视频在线观看| 亚洲成人一二三| 日本一二三四高清不卡| 日韩午夜激情视频| 欧洲精品在线观看| 成人综合婷婷国产精品久久蜜臀| 日韩高清不卡在线| 亚洲最大成人网4388xx| 国产精品色一区二区三区| 日韩视频免费观看高清在线视频| 91久久精品一区二区| 成人午夜免费电影| 免费高清在线一区| 亚洲高清视频在线| 亚洲日本在线看| 国产亚洲va综合人人澡精品| 欧美一区二区三区白人| 欧美丝袜丝交足nylons图片| 成人一级片网址| 懂色av一区二区三区蜜臀 | 国产亚洲精品bt天堂精选| 日韩一区二区视频在线观看| 中文字幕av在线一区二区三区| 欧美日韩免费电影| 日本电影欧美片| 91日韩精品一区| 91香蕉视频污在线| 99国产精品久| 99精品国产热久久91蜜凸| 国产91精品一区二区麻豆网站| 久久se精品一区精品二区| 日韩av中文在线观看| 日本欧洲一区二区| 日本中文字幕一区二区视频| 石原莉奈一区二区三区在线观看| 亚洲自拍偷拍图区| 亚洲超碰精品一区二区| 亚洲制服丝袜在线| 天天亚洲美女在线视频| 丝袜诱惑制服诱惑色一区在线观看 | 91欧美激情一区二区三区成人| 国产成人亚洲精品青草天美| 国产99久久久国产精品潘金| 国产精品一区二区黑丝| 国产激情视频一区二区三区欧美 | 午夜视频在线观看一区二区三区| 亚洲成人手机在线| 三级在线观看一区二区 | 国产成人午夜片在线观看高清观看| 韩国毛片一区二区三区| 国产一区美女在线| 国产东北露脸精品视频| av亚洲精华国产精华精华| 91在线观看免费视频| 欧美午夜在线一二页| 91精品国模一区二区三区| 欧美成人激情免费网| 久久久久久免费毛片精品| 国产精品无码永久免费888| 亚洲视频小说图片| 亚欧色一区w666天堂| 老司机免费视频一区二区| 国内一区二区视频| 成人在线一区二区三区| 色综合久久九月婷婷色综合| 欧美日产在线观看| 精品成a人在线观看| 中文字幕一区二区5566日韩| 亚洲最大的成人av| 韩国三级在线一区| 色成人在线视频| 日韩欧美一级二级| 国产精品免费视频一区| 国产真实乱子伦精品视频| 91网站最新地址| 日韩欧美一二区| 136国产福利精品导航| 日韩电影在线一区二区三区| 国产伦精品一区二区三区视频青涩| 91玉足脚交白嫩脚丫在线播放| 欧美老肥妇做.爰bbww视频| xnxx国产精品| 亚洲永久免费视频| 国产精品综合在线视频| 欧美在线一二三| 久久九九久久九九| 亚洲成在人线免费| 不卡的av电影在线观看| 日韩免费高清av| 亚洲在线中文字幕| 国产999精品久久久久久绿帽| 欧美久久一区二区| 国产精品乱码一区二区三区软件| 偷拍一区二区三区| av中文字幕在线不卡| 日韩欧美在线网站| 亚洲精品国产无天堂网2021| 国产一区二区不卡| 欧美精品一二三区| 亚洲欧美另类小说| 国产成人久久精品77777最新版本| 精品视频免费在线| 亚洲欧美在线视频| 国产精品1区2区| 日韩欧美国产综合在线一区二区三区| 亚洲男帅同性gay1069| 成人午夜在线免费| 欧美videofree性高清杂交| 亚洲成人久久影院| 色综合色综合色综合色综合色综合 | 亚洲精品成人悠悠色影视| 国产一区二区视频在线播放| 日韩一区二区三区免费看| 亚洲一二三专区| 欧美中文一区二区三区| 最新中文字幕一区二区三区| 国产精品1区二区.| www激情久久| 精品影视av免费| 日韩一区二区三| 日韩av一区二区在线影视| 4438成人网| 天堂久久一区二区三区| 欧美日韩不卡一区二区| 午夜久久久影院| 欧美性受xxxx黑人xyx| 亚洲激情五月婷婷| 色欧美日韩亚洲| 一区二区三区四区蜜桃| 在线中文字幕一区| 亚洲综合区在线| 欧美日韩免费电影| 日本色综合中文字幕| 7777精品伊人久久久大香线蕉| 午夜天堂影视香蕉久久| 欧美一区二区美女| 日本成人在线看| 欧美tk—视频vk| 激情亚洲综合在线| 久久久电影一区二区三区| 国产精品综合二区| 国产精品成人在线观看| 波多野结衣中文字幕一区 | 99热精品一区二区| 亚洲欧洲av色图| 欧美伊人久久久久久久久影院| 亚洲一区视频在线观看视频| 在线成人av网站| 久久精品国产久精国产| 久久久精品一品道一区| 成人99免费视频| 亚洲成a人片在线不卡一二三区| 91精品国产乱| 国产永久精品大片wwwapp| 国产精品剧情在线亚洲| 一本大道久久a久久综合| 亚洲一区二区视频在线| 91精品国产高清一区二区三区 | 国产麻豆视频一区二区| 国产精品传媒视频| 欧美三级电影网站| 狠狠色丁香久久婷婷综合_中| 中文字幕成人网| 在线精品观看国产| 蜜臀av性久久久久蜜臀aⅴ| 欧美经典一区二区| 在线视频你懂得一区| 久久精品国产一区二区| 国产精品三级视频| 欧美精品久久99| 国产高清久久久久| 亚洲成a人片在线不卡一二三区| 精品久久久久久最新网址| 色综合久久综合中文综合网| 日韩国产欧美在线观看| 国产精品久久久爽爽爽麻豆色哟哟 | 色菇凉天天综合网| 久久97超碰色| 一区二区三区成人| 26uuu久久综合| 欧美亚洲高清一区二区三区不卡| 国产一区二区精品在线观看| 亚洲精品免费在线播放| 久久夜色精品国产噜噜av | 91精品国产福利| www.在线欧美| 蜜臀国产一区二区三区在线播放| 国产精品福利一区| 精品国产a毛片| 精品污污网站免费看| 9人人澡人人爽人人精品| 另类小说色综合网站| 亚洲综合一二区| 国产精品国产a| 久久午夜羞羞影院免费观看| 欧美日韩大陆在线| 日本道免费精品一区二区三区| 国产乱一区二区|