?? siso.m
字號(hào):
function Rout=SISO(y_s,y_h,m_max,p,H,noise_std)
%m為第幾個(gè)單元譯碼器,mmax為迭代次數(shù),r_s為輸入軟判決碼字,r_h為硬輸入碼子,硬輸出碼字D,碼字集合C
%H為輸入校驗(yàn)矩陣,noise_std為輸入噪聲方差,W為輸出外信息,R為軟輸出,DD為本次單元譯碼的硬輸出碼子
%根據(jù)迭代次數(shù),采用自適應(yīng)方法確定調(diào)節(jié)系數(shù),但要防止調(diào)節(jié)系數(shù)發(fā)散,
%同時(shí)為了減少譯碼復(fù)雜度,用梯度算法簡化外信息的計(jì)算
%-----------------------------計(jì)算外信息---------------------------------
%------------為使譯碼復(fù)雜度降低不去尋找競爭碼字,采用梯度算法-----------------
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;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -