⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hmm_backward.m

📁 隐马尔可夫链模型和例程(包括前向、后向算法、Viterbi解码以及为了减少概率数值计算误差编写的对数运算程序)
💻 M
字号:
function [Lbeta, Lp]=hmm_backword(a, b, pi, o)
%--------------------------------------------------------------------------
%Backword algorithm
%
%   [Lbeta,q] = hmm_backword(a,b,pi,o)
%
%   inputs:
%       a(i,j)  transition probability matrix, a(i,j) :=p(q_t=j|q_t-1=i)
%       pi(i)   initial probability,           pi(i)  :=p(q_1=i        )
%       b(i,j)  output probability matrix,     b(i,j) :=p(  o=j|q=i    )
%       o       observation sequence
%
%
%   outputs:
%       Lbeta   log probability of beta
%       Lp      log probability of observation sequence
%--------------------------------------------------------------------------

%% check inputs
% number of states
N=size(a,1);
if N~=size(a,2)
    fprintf(1,'error, state transition probability matrix should be square\n');
    return;
end

% number of type of discrete outputs  
No=size(b,2);
if size(b,1)~=N
    fprintf(1,'error, row size of po should equal to the number of state\n');
    return;
end

% length of observation
T=length(o);

pi=pi(:);   % make sure it is column vector

%% backword algorithm

Lbeta=zeros(N,T);
%Lbeta(:,T)=0;
for t=T-1:-1:1
    for i=1:N
        Lbeta(i,t)=log_sum(log(a(i,:)')+log(b(:,o(t+1)))+Lbeta(:,t+1));
    end
end

Lp=log_sum(Lbeta(:,1)+log(pi)+log(b(:,o(1))));


return;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -