gotest.m
上传用户:ay_070428
上传日期:2014-12-04
资源大小:11427k
文件大小:2k
源码类别:

语音合成与识别

开发平台:

Matlab

  1. % Test wave files under testWave
  2. dtwFunction = 'dtwmex0';
  3. dtwFunction = 'dtwmex1n';
  4. testWave = dir('testWave/*.wav');
  5. %testWave = testWave(1:10);
  6. waveNum = length(testWave);
  7. if ~exist('waveData'),
  8. fprintf('Loading waveData.mat...n');
  9. load waveData.mat
  10. fprintf('Eliminate template file not by Roger...n');
  11. % Compare "roger" to "roger"
  12. index = findcell({waveData.speaker}, '1Roger');
  13. waveData = waveData(index);
  14. end
  15. allAnswer = {waveData.answer};
  16. fprintf('Compare %g wave files against %g template wave files...n', waveNum, length(waveData));
  17. for i=1:waveNum,
  18. waveFile = ['testWave/', testWave(i).name];
  19. [y, fs] = wavreadc(waveFile);
  20. testWave(i).mfcc = wave2mfccmex(y);
  21. distance = zeros(length(waveData), 1);
  22. for j=1:length(waveData),
  23. % distance(j) = feval(dtwFunction, testWave(i).mfcc, waveData(j).feature, 2, 1);
  24. distance(j) = feval(dtwFunction, testWave(i).mfcc, waveData(j).feature, 1, 1, 2);
  25. end
  26. [minDist, index] = sort(distance);
  27. testWave(i).predicted = waveData(index(1)).answer;
  28. testWave(i).closeSpeaker = waveData(index(1)).speaker;
  29. testWave(i).minDist = minDist(1);
  30. correctAnswer = upper(testWave(i).name);
  31. correctAnswer = correctAnswer(1:end-4);
  32. rankedAnswer = allAnswer(index); 
  33. for j=1:length(waveData),
  34. if strcmp(upper(rankedAnswer{j}), correctAnswer),
  35. testWave(i).rank = j;
  36. break;
  37. end
  38. end
  39. fprintf('%g/%g ==> %s --> %s by %s (minDist=%g, rank=%g)n', i, waveNum, ...
  40. testWave(i).name, testWave(i).predicted, testWave(i).closeSpeaker, testWave(i).minDist, testWave(i).rank);
  41. pause(0.1);
  42. end
  43. fprintf('Recognition rate = %gn', sum([testWave.rank]==1)/length(testWave)*100);
  44. figure; plothist([testWave.rank]);
  45. figure; plotpie([testWave.rank], ['dtwFunction=',dtwFunction]);
  46. save testWave testWave