?? trainmfcc.m
字號:
function trainmfcc(file)
% 對0到9十個數(shù)字訓(xùn)練出HMM模型參數(shù)
for biaoshi=1:10
fid = fopen([file char(biaoshi+47) '.mat'],'r');%依次打開存儲了0到9十個數(shù)字的語音文件
%定義一個臨時的矩陣ku,用于存儲20個相應(yīng)數(shù)字的語音波形序列,序列長度不超過3000
ku=zeros(20,3000);
for i=1:20
ku(i,:)=fread(fid,3000,'double');%ku(i,:)中,第一個數(shù)存貯了該序列的長度
end
fclose(fid);
%對20個語音波形文件,分別計算出其MFCC參數(shù),MFCC參數(shù)為13維*幀長,幀語音波形的長短而不同,最后截取前13*15的部分,存入datacell中
for i=1:20
input=ku(i,2:ku(i,1));
[ceps,freqresp,fb,fbrecon,freqrecon] = mfcc(input, 8000, 160);
datacell(:,:,i)=ceps(:,1:15);%datacell存貯格式為datacell(mfcc參數(shù)長度13,幀長15,序列個數(shù)20)
end
O = 13; %Number of coefficients in a vector (mfcc參數(shù)長度)
M = 1; %Number of mixtures (混合高斯分布的數(shù)目)
Q = 6; %Number of states (狀態(tài)數(shù))
cov_type = 'full';
% 連續(xù)HMM模型參數(shù)訓(xùn)練
prior0 = normalise(rand(Q,1));%隨機(jī)生成初始狀態(tài)
transmat0 = mk_stochastic(rand(Q,Q));%隨機(jī)生成狀態(tài)轉(zhuǎn)移矩陣
[mu0, Sigma0] = mixgauss_init(Q*M, datacell, cov_type);%生成高斯分布的均值和方差
mu0 = reshape(mu0, [O Q M]);
Sigma0 = reshape(Sigma0, [O O Q M]);
mixmat0 = mk_stochastic(rand(Q,M));
%HMM模參數(shù)訓(xùn)練函數(shù)
[LL, prior1, transmat1, mu1, Sigma1, mixmat1] = mhmm_em(datacell, prior0, transmat0, mu0, Sigma0, mixmat0, 'max_iter', 5);
%將訓(xùn)練得到的相應(yīng)數(shù)字的HMM參數(shù)prior1, transmat1, mu1, Sigma1, mixmat1分別存入到shuzi0,shuzi1.....shuzi9,文件中
fid = fopen(['d:\shuzi' char(biaoshi+47) '.mat'],'wb');
fwrite(fid,prior1,'double');
fwrite(fid,transmat1,'double');
fwrite(fid,mu1,'double');
fwrite(fid,Sigma1,'double');
fwrite(fid,mixmat1,'double');
fclose(fid);
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -