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

语音合成与识别

开发平台:

Matlab

  1. fprintf('This test script shows the DTW path between reference and test inputs.n');
  2. close all
  3. fs = 8000;
  4. duration = 3;
  5. fprintf('Hit return to start %g-sec reference recording...', duration);
  6. pause;
  7. fprintf('Start recording ...');
  8. y2 = wavrecord(duration*fs, fs, 'uint8');
  9. y2 = (double(y2)-128)/128;
  10. wavwrite(y2, fs, 8, 'reference.wav');
  11. fprintf('Finish recording.n');
  12. mfcc2 = wave2mfccmex(y2);
  13. frameNum2 = size(mfcc2, 2);
  14. while(1)
  15. fprintf('Hit return to start %g-sec test recording...', duration);
  16. pause;
  17. fprintf('Start recording ...');
  18. y1 = wavrecord(duration*fs, fs, 'uint8');
  19. y1 = (double(y1)-128)/128;
  20. wavwrite(y1, fs, 8, 'test.wav');
  21. fprintf('Finish recording.n');
  22. mfcc1 = wave2mfccmex(y1);
  23. frameNum1 = size(mfcc1, 2);
  24. clf;
  25. % Vertical yellow grid line
  26. for i = 1:frameNum1,
  27. line([i, i], [1, frameNum2], 'color', 'y');
  28. end
  29. % Horizontal yellow grid line
  30. for j = 1:frameNum2,
  31. line([1, frameNum1], [j, j], 'color', 'y');
  32. end
  33. % ====== Solution obtained by DTW
  34. [minDist, DTWpath] = dtwmex1n(mfcc1, mfcc2);
  35. fprintf('DTW distance = %gn', minDist);
  36. for i = 1:size(DTWpath,2)-1,
  37. line([DTWpath(1,i), DTWpath(1,i+1)], [DTWpath(2,i), DTWpath(2,i+1)], 'color', 'r', 'marker', '.');
  38. end
  39. title('DTW path (red)');
  40. xlabel('Test input');
  41. ylabel('Reference input');
  42. axis image
  43. box on
  44. end