?? decode.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 + -