今天使用代码验证了源程序附带的网络男声的识别。但只有4与7两个声音的测试。训练的分离程度很好。我再自己使用GoldWave录音进行测试。录音参数选择与实例给出的语音相同的位深(16)和采样率(16kHz)进行实验。
实验过程:
将录制的语音数据进行整理,数字0~9共10个数字,间断发音朗读,总共读4遍。人工截取数据按规则命名。选用3遍作为训练数据,最后一遍作为测试数据。测试结果如下:
可见数字1、6出现错误识别,数字2识别近于错误边缘。
本次试验所用添加码:(用来验证多个数据识别)
pout = zeros(10,10); for i=0:9 fprintf('正在识别数字%d:\n',i); fname = sprintf('%d%dt.wav',i,1); x = wavread(fname); [x1 x2] = vad(x); m = mfcc(x); mv = m(x1:x2,:); for j=1:10 pout(i+1,j) = viterbi(hmm{j},m); end strtitle = sprintf('数字%d',i); subplot(2,5,i+1),bar(0:9,pout(i+1,:)),axis tight,title(strtitle); end
本次实验数据中,3次训练数据均人工端点检测,1次识别数据采用程序端点检测。
实验需要观测如果均采用程序端点检测的话,端点与人工检测时的差别。