資源簡介
關于隱馬爾科夫(hmm)的程序,是用MATLAB編寫的,可以正常運行!
代碼片段和文件信息
baum
function?hmm=baum(hmmsamples)
mix=hmm.mix;%高斯混合
N=length(mix);%HMM狀態(tài)數(shù)
K=length(samples);%語音樣本數(shù)
SIZE=size(samples(1).data2);%參數(shù)階數(shù)
%計算前向,后向概率矩陣,考慮多觀察序列和下溢問題
disp(‘計算樣本參數(shù)...‘);
for?k=1:K
????fprintf(‘%d‘k)
????param(k)=getparam(hmmsamples(k).data);
end
fprintf(‘\n‘)
%重估轉(zhuǎn)移概率矩陣A:trans
disp(‘重估轉(zhuǎn)移概率矩陣A...‘)
for?i=1:N-1
????denom=0;
????for?k=1:K
????????tmp=param(k).ksai(:i:);
????????denom=denom+sum(tmp(:));
????end
????for?j=i:i+1
????????nom=0;
????????for?k=1:K
????????????tmp=param(k).ksai(:ij);
????????????nom=nom+sum(tmp(:));
????????end
????????hmm.trans(ij)=nom/denom;
????end
end
%重估混合高斯的參數(shù)
disp(‘重估混合高斯的參數(shù)...‘)
for?l=1:N
????for?j=1:hmm.M(l)
????????fprintf(‘%d%d??‘lj)
????????%計算各pdf的均值和方差
????????nommean=zeros(1SIZE);
????????nomvar=zeros(1SIZE);
????????denom=0;
????????for?k=1:K
????????????T=size(samples(k).data1);
????????????for?t=1:T
????????????????x=samples(k).data(t:);
????????????????nommean=nommean+param(k
評論
共有 條評論