📄 logmap.m
字号:
function L_all = m_logmap(L_a,y)
global g alpha L L_info L_total
global m nstates FW0 FW1 BK0 BK1 X0 X1
Infty=1e10;
L = length(L_a);
% Initialization of Alpha and Beta
LogAlpha = -Infty*ones(nstates,L);
LogBeta = -Infty*ones(nstates,L);
% LogGamma0
LogGamma0 = X0*y/2 + repmat(-L_a/2,nstates,1);
LogGamma1 = X1*y/2 + repmat(L_a/2,nstates,1);
LogAlpha(1,1) = 0;
LogBeta(1,L)=0;
for k = 1:L-1
temp0 = LogAlpha(BK0,k)+LogGamma0(BK0,k);
temp1 = LogAlpha(BK1,k)+LogGamma1(BK1,k);
t=max([temp0';temp1'])';
temp2 = t+log(exp(temp0-t)+exp(temp1-t)+eps);
LogAlpha(:,k+1) = temp2 - max(temp2);
end %for k
for k=L:-1:2
temp0 = LogBeta(FW0,k)+LogGamma0(:,k);
temp1 = LogBeta(FW1,k)+LogGamma1(:,k);
t=max([temp0';temp1'])';
temp2 = t+log(exp(temp0-t)+exp(temp1-t)+eps);
LogBeta(:,k-1) = temp2 - max(temp2);
end %for k
% Compute the soft output
t=LogAlpha+LogGamma1+LogBeta(FW1,:);
ma1=max(t);
temp1 = ma1+log( sum(exp(t-ones(nstates,1)*ma1))+eps );
t=LogAlpha+LogGamma0+LogBeta(FW0,:);
ma0=max(t);
temp0 = ma0+log( sum(exp(t-ones(nstates,1)*ma0))+eps );
L_all = temp1-temp0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -