?? bp1.m
字號:
%歸一化BP算法
function [v]=BP1(y,H,sigma_2,maxiter)
% H=[1 1 1 0 0 0 0 0;0 0 0 1 1 1 0 0;1 0 0 1 0 0 1 0;0 1 0 0 1 0 0 1];
% y=[0.2 0.2 -0.9 0.6 0.5 -1.1 -0.4 -1.2];
% sigma_2=0.5;
% maxiter=50;
[m,n]=size(H);
success=0;k=0;
Lc=2*y/sigma_2; %初始化信息節(jié)點的信息Lc.
Lg=repmat(Lc,m,1); %初始化矩陣Lg(i,j)
Lg=Lg.*H;
[hj,hi]=find(H==1);
while((success==0)&(k<maxiter)) %c*h'~=0或k(迭代次數(shù))未達到最大迭代次數(shù)maxiter,繼續(xù)進行迭代譯碼.
for j=1:m %計算校驗節(jié)點向信息節(jié)點傳遞的消息Lh(j,i)
for i=1:n
if H(j,i)==1
A=1; t=0;
for ii=1:n
if (ii~=i)&(H(j,ii)==1)
A=A*sign(Lg(j,ii)); b(j,ii)=abs(Lg(j,ii));t=t+1;
if t==1
B0=b(j,ii);
else B=b(j,ii);
if B0>B
B0=B;
end
end
end
end
x=1.25;Lh(j,i)=A*B0/1.25;
end
end
end
for i=1:n %計算信息節(jié)點向校驗節(jié)點傳遞的信息 Lg(i,j)
rowind=find(hi==i);
temp=Lh(hj(rowind),i);
Q=sum(temp);
Q1=Q-temp;
Lg(hj(rowind),i)=Lc(i)+Q1;
LQ=Lc(i)+Q; %軟判決
if LQ<0 %硬判決
v(i)=1;
else v(i)=0;
end
end
k= k+1;
if mod(v*H',2)==0 %判決譯碼是否成功,若成功(success=1),則退出循環(huán)運算,否則繼續(xù).
success=1;
else success=0;
end
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -