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

📄 decode.m

📁 TPC的Chase迭代译码时测试图样的程序
💻 M
字号:
function Rout=decode(y_s,y_h,m_max,p,H,noise_std)
%m为第几个单元译码器,mmax为迭代次数,r_s为输入软判决码字,r_h为硬输入码子,硬输出码字D,码字集合C
%H为输入校验矩阵,noise_std为输入噪声方差,W为输出外信息,R为软输出,DD为本次单元译码的硬输出码子
%根据迭代次数,采用自适应方法确定调节系数,但要防止调节系数发散,
%同时为了减少译码复杂度,用梯度算法简化外信息的计算
 %-----------------------------计算外信息---------------------------------
 %------------为使译码复杂度降低不去寻找竞争码字,采用梯度算法-----------------
 R_soft=y_s;
 R_hard=y_h;
 [M,N]=size(y_s);
 %********************************************************
for m=1:m_max
%----------initialize---------------------------------
%  行译码
 for ii=1:M
     r_s=R_soft(ii,:);
     r_h=R_hard(ii,:);
     RR(m,ii,:)=r_s,
     B(m)=m/m_max,
    switch(m)
       case 1,
            RRi(m,ii,:)=RR(m,ii,:);
            W(m,ii,:)=zeros(1,N);,
            A(m)=0,
            D(m,ii,:)=chase(p,r_s,r_h,H),
            W(m+1,ii,:)=D(m,ii,:).*B(m);
            RRout(m,ii,:)=RRi(m,ii,:)+W(m+1,ii,:);
       otherwise,
          A(m)=(m*(noise_std^2))/var(W(m,ii,:)),
           for j=1:N
           RRi(m,ii,j)=r_s(j)+W(m,ii,j).*A(m),
           end
          D(m,ii,:)=chase(p,r_s,r_h,H),
          xishu=0,
          for j=1:N
              xishu=xishu+((RRi(m,ii,j)-D(m-1,ii,j))^2-(RRi(m,ii,j)-D(m,ii,j))^2),
          end
           xishu=xishu/4;
         for i=1:N
             if D(m,ii,i)==D((m-1),ii,i)
                 W((m+1),ii,i)=B(m)*D(m,ii,i);
                 RRout(m,ii,i)=RRi(m,ii,i)+W((m+1,ii,i);
             else
                 W((m+1),ii,i)=xishu*D(m,ii,j)-RR(m,ii,i);
                 RRout(m,ii,i)=RRi(m,ii,i)+W((m+1,ii,i);
             end
         end
     end
 end
 %------------------------------------------------------------------------
%  解交织
for i=1:M
    for j=1:N
R2_s(i,j)=R_soft(m,i,j);
R2_h(i,j)=R_hard(m,i,j);
    end
end
R2T_s=R2_s';
R2T_h=R2_h';
for i=1:N
    for j=1:M
R_soft(m,i,j)=R2T_s(i,j);
R_hard(m,i,j)=R2T_s(i,j);
    end
end
%-------------------------------------------------------------------------
%---------------------------列译码-----------------------
for ii=1:N
     r_s=R_soft(ii,:);
     r_h=R_hard(ii,:);
     RR(m,ii,:)=r_s,
     B(m)=m/m_max,
    switch(m)
       case 1,
            RRi(m,ii,:)=RR(m,ii,:);
            W(m,ii,:)=zeros(1,N);,
            A(m)=0,
            D(m,ii,:)=chase(p,r_s,r_h,H),
            W(m+1,ii,:)=D(m,ii,:).*B(m);
            RRout(m,ii,:)=RRi(m,ii,:)+W(m+1,ii,:);
       otherwise,
          A(m)=(m*(noise_std^2))/var(W(m,ii,:)),
           for j=1:N
           RRi(m,ii,j)=r_s(j)+W(m,ii,j).*A(m),
           end
          D(m,ii,:)=chase(p,r_s,r_h,H),
          xishu=0,
          for j=1:M
              xishu=xishu+((RRi(m,ii,j)-D(m-1,ii,j))^2-(RRi(m,ii,j)-D(m,ii,j))^2),
          end
           xishu=xishu/4;
         for i=1:N
             if D(m,ii,i)==D((m-1),ii,i)
                 W((m+1),ii,i)=B(m)*D(m,ii,i);
                 RRout(m,ii,i)=RRi(m,ii,i)+W((m+1,ii,i);
             else
                 W((m+1),ii,i)=xishu*D(m,ii,j)-RR(m,ii,i);
                 RRout(m,ii,i)=RRi(m,ii,i)+W((m+1,ii,i);
             end
         end
     end
 end
%-------------------------------------------------------------
 
%  解交织
for i=1:M
    for j=1:N
R2_s(i,j)=R_soft(m,i,j);
R2_h(i,j)=R_hard(m,i,j);
    end
end
R2T_s=R2_s';
R2T_h=R2_h';
for i=1:N
    for j=1:M
R_soft(m,i,j)=R2T_s(i,j);
R_hard(m,i,j)=R2T_s(i,j);
    end
end

end
%------------------------------------------------------------ 
 for i=1:M
     for j=1:N
 Rout(i,j)=RR(m_max,i,j);
     end
 end
%  Rout=9;
 
 
 
 
 
 
 
 
 

⌨️ 快捷键说明

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