📄 siso.m
字号:
function Rout=SISO(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(ii,:)=r_s,
B(m)=m/m_max,
switch(m)
case 1,
RRi(ii,:)=RR(ii,:);
W(ii,:)=zeros(1,N);,
A(m)=0,
D(ii,:)=chase(p,r_s,r_h,H),
W(ii,:)=D(ii,:).*B(m);
RRout(ii,:)=RRi(ii,:)+W(ii,:);
otherwise,
A(m)=(m*(noise_std^2))/var(W(ii,:)),
for j=1:N
RRi(ii,j)=r_s(j)+W(ii,j).*A(m),
end
D_f=D(ii,:);
D(ii,:)=chase(p,r_s,r_h,H),
xishu=0,
for j=1:N
xishu=xishu+((RRi(ii,j)-D_f(ii,j))^2-(RRi(ii,j)-D(ii,j))^2),
end
xishu=xishu/4;
for i=1:N
if D(ii,i)==D_f(ii,i)
W(ii,i)=B(m)*D(ii,i);
RRout(ii,i)=RRi(ii,i)+W(ii,i);
else
W(ii,i)=xishu*D(ii,j)-RR(ii,i);
RRout(ii,i)=RRi(ii,i)+W(ii,i);
end
end
end
end
%------------------------------------------------------------------------
% 解交织
R_soft=R_soft';
R_hard=R_hard';
W=W'
%-------------------------------------------------------------------------
%---------------------------列译码-----------------------
for ii=1:M
r_s=R_soft(ii,:);
r_h=R_hard(ii,:);
RR(ii,:)=r_s,
B(m)=m/m_max,
switch(m)
case 1,
RRi(ii,:)=RR(ii,:);
W(ii,:)=zeros(1,N);,
A(m)=0,
D(ii,:)=chase(p,r_s,r_h,H),
W(ii,:)=D(ii,:).*B(m);
RRout(ii,:)=RRi(ii,:)+W(ii,:);
otherwise,
A(m)=(m*(noise_std^2))/var(W(ii,:)),
for j=1:N
RRi(ii,j)=r_s(j)+W(ii,j).*A(m),
end
D_f=D(ii,:);
D(ii,:)=chase(p,r_s,r_h,H),
xishu=0,
for j=1:N
xishu=xishu+((RRi(ii,j)-D_f(ii,j))^2-(RRi(ii,j)-D(ii,j))^2),
end
xishu=xishu/4;
for i=1:N
if D(ii,i)==D_f(ii,i)
W(ii,i)=B(m)*D(ii,i);
RRout(ii,i)=RRi(ii,i)+W(ii,i);
else
W(ii,i)=xishu*D(ii,j)-RR(ii,i);
RRout(ii,i)=RRi(ii,i)+W(ii,i);
end
end
end
end
%-------------------------------------------------------------
% 解交织
R_soft=R_soft';
R_hard=R_hard';
W=W'
%------------------------------------------------------------
for i=1:M
for j=1:N
Rout(i,j)=RRout(i,j);
end
end
% Rout=9;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -