clear; %close all; addpath Z:\research24\landmines\users\bfeng\temp\; addpath Z:\research24\landmines\users\bfeng\temp\mfcc; addpath Z:\research24\landmines\users\bfeng\temp\h2m; %trainData = load('rawTemplate.mat'); trainData = load('trainTemplate.mat'); trainNames=fieldnames(trainData); %testData = load('hw4TestData.mat'); %testNames=fieldnames(testData); fs = 16000; loopnum=30; N=30; windowsize=256; pi0=zeros(1,N); pi0(1) = 1; A_ = zeros(4,N,N); mu_ = zeros(4,N,13); sigma_ = zeros(4,N,13); %% feature extraction, initial A for digit = 0 : 5 tic; X=[]; foo=0; a=zeros(N,N); sumA=zeros(N,N); name = trainNames{digit +1}; data = getfield(trainData,name); for k = 1 : loopnum %% read data %name = trainNames{k + digit * loopnum}; %data = getfield(trainData,name); stateLength = length(data)/N; winNum = floor(stateLength / windowsize); % A, state trans probability for i=1:N-1 a(i,i) = 1 - 1/(winNum +1); a(i,i+1)= 1/(winNum + 1); end a(N,N)=1; sumA=sumA+a; % calculate ceps as feature and store in X matrix, % st(k) denotes the beginning of each ceps in X %ceps = mfcc(data, fs); x = conv2(data(k,:), [0.333 0.667 0 -0.667 -0.333], 'same'); x = filter([1,-0.97], 1, x); %x = wiener2(x); %ceps = mfcc(data(k,:),fs); ceps = mfcc(x,fs); X=[X;ceps']; st(k)=foo+1; ceplength=length(ceps); foo=foo+ceplength; end % Initial of model (mu, sigma) A(digit +1,:,:)=sumA/loopnum; [mu(digit +1,:,:), sigma(digit +1,:,:)] = hmm_mint (X, st, N, 1); % iteration [A_(digit +1,:,:), mu_(digit +1,:,:), sigma_(digit +1,:,:), logl] = lrhmm (X, st,... squeeze(A(digit +1,:,:)), squeeze(mu(digit +1,:,:)), squeeze(sigma(digit +1,:,:)), 10); %%%%%%%%%%%%%%%%%%%% %% test and score %% %%%%%%%%%%%%%%%%%%%% %for k = 1: length(testNames) % name = testNames{k}; % testing = getfield(testData,name); % %0 testX = mfcc(testing, 12500); % score(digit +1, k) = hmm_vit(testX', squeeze(A_(digit +1,:,:)),... % pi0, squeeze(mu_(digit +1,:,:)), squeeze(sigma_(digit +1,:,:)), 1); %end toc; end %%%%%%%%%%%%% %% results %% %%%%%%%%%%%%% %[foo, results] = max(score); %error = zeros(10,20); %for digit = 0: 9 % error(digit+1,find(results(digit*20+1 : digit*20+20) - (digit+1) ~=0)) = ... % find(results(digit*20+1 : digit*20+20) - (digit+1) ~=0) + digit*20; %end % %err = find(error'~=0); %for m = 1: size(err,1) % errUtter = testNames{err(m)} %end