www.pudn.com > whmt1.rar > hmttrain.m
function [ES,PS,MU,SI] = hmttrain(w,M,epsilon)
% function [ES,PS,MU,SI] = hmttrain(w,M,epsilon)
%
% Author: H. Choi
% Last modified 12/14/1998
%
% train HMT model for wavelet transform data w
%
% M : no. of mixture densities
% w : data (wavelet transform, PxP)
% epsilon : convergence test threshold (1e-5 is reasonable)
%
% ES : MxMxPxP matrix
% PS : MxPxP matrix
% MU : MxPxP matrix
% SI : MxPxP matrix
P = size(w,1);
level = log2(P); %no. of levels of tree
ES=zeros(M,M,P,P);
PS=zeros(M,P,P);
MU=zeros(M,P,P);
SI=ones(M,P,P);
%initialization of model
for k=1:level
J = 2^(k-1); J2 = J*J;
% HH subband
si=J+1; ei=2*J;
sj=J+1; ej=2*J;
mutemp = 0.0;
sitemp = sum(sum((w(si:ei,sj:ej)-mutemp).^2))/J2;
sitemp = sitemp*(sitemp > 1e-6) + 1e-6*(sitemp <=1e-6);
SI(:,si:ei,sj:ej)=repmat(sitemp*linspace(0.5, 2.0,M)',[1 2^(k-1) 2^(k-1)]);
ES(:,:,si:ei,sj:ej)=repmat(ones(M,M)/M,[1 1 2^(k-1) 2^(k-1)]);
PS(:,si:ei,sj:ej)=repmat(ones(M,1)/M, [1 2^(k-1) 2^(k-1)]);
% LH subband
si=1; ei=J;
sj=J+1; ej=2*J;
mutemp = 0.0;
sitemp = sum(sum((w(si:ei,sj:ej)-mutemp).^2))/J2;
sitemp = sitemp*(sitemp > 1e-6) + 1e-6*(sitemp <=1e-6);
SI(:,si:ei,sj:ej)=repmat(sitemp*linspace(0.5,2.0,M)',[1 2^(k-1) 2^(k-1)]);
ES(:,:,si:ei,sj:ej)=repmat(ones(M,M)/M,[1 1 2^(k-1) 2^(k-1)]);
PS(:,si:ei,sj:ej)=repmat(ones(M,1)/M, [1 2^(k-1) 2^(k-1)]);
% HL subband
si=J+1; ei=2*J;
sj=1; ej=J;
mutemp = 0.0;
sitemp = sum(sum((w(si:ei,sj:ej)-mutemp).^2))/J2;
sitemp = sitemp*(sitemp > 1e-6) + 1e-6*(sitemp <=1e-6);
SI(:,si:ei,sj:ej)=repmat(sitemp*linspace(0.5,2.0,M)',[1 2^(k-1) 2^(k-1)]);
ES(:,:,si:ei,sj:ej)=repmat(ones(M,M)/M,[1 1 2^(k-1) 2^(k-1)]);
PS(:,si:ei,sj:ej)=repmat(ones(M,1)/M, [1 2^(k-1) 2^(k-1)]);
end;
conerr = 1.0;
%training of HMM model with tying
while(conerr > epsilon)
ESP=ES; PSP=PS; MUP=MU; SIP=SI;
[ES, PS, MU, SI] = emhht(w,ESP,PSP,MUP,SIP,1);
testcon;
end;
disp('HH subband completed...');
conerr = 1.0;
while(conerr > epsilon)
ESP=ES; PSP=PS; MUP=MU; SIP=SI;
[ES, PS, MU, SI] = emlht(w,ESP,PSP,MUP,SIP,1);
testcon;
end;
disp('LH subband completed...');
conerr = 1.0;
while(conerr > epsilon)
ESP=ES; PSP=PS; MUP=MU; SIP=SI;
[ES, PS, MU, SI] = emhlt(w,ESP,PSP,MUP,SIP,1);
testcon;
end;
disp('HL subband completed...');