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

语音合成与识别

开发平台:

Matlab

  1. function hmmPlot(feature, state, hmmPath) 
  2. %HMMPLOT Plot the result of HMM evaluation
  3. % Usage:
  4. % hmmPlot(feature, state, hmmPath) 
  5. clf;
  6. if 1,
  7. featureDim = size(feature, 1);
  8. frameNum = size(feature, 2);
  9. stateNum = length(state);
  10. % Vertical yellow grid line
  11. for i = 1:frameNum,
  12. line([i, i], [1, stateNum], 'color', 'y');
  13. end
  14. % Horizontal yellow grid line
  15. for j = 1:stateNum,
  16. line([1, frameNum], [j, j], 'color', 'y');
  17. end
  18. % ====== Solution obtained by DTW
  19. for i = 1:length(hmmPath)-1,
  20. line([i, i+1], [hmmPath(i), hmmPath(i+1)], ...
  21.                 'color', 'r', 'marker', '.');
  22. end
  23. xlabel('Frames');
  24. ylabel('States');
  25. box on
  26. axis tight
  27. axis image
  28. return
  29. end
  30. vec1 = vec1(:);
  31. vec2 = vec2(:);
  32. pos = get(gcf, 'pos');
  33. width = pos(3);
  34. height = pos(4);
  35. % Assume width > height
  36. % Assume the aspect ratio of the signal axis is b:1
  37. b = 4;
  38. k = height/(b+2.5);
  39. vec1Axis = subplot(2,2,4);
  40. plot(1:length(vec1), vec1, 1:length(vec1), vec1, 'ro');
  41. axis tight
  42. ylabel('vec1');
  43. set(vec1Axis, 'unit', 'pixels');
  44. set(vec1Axis, 'position', [width-(b+0.5)*k, height-(b+2)*k, b*k, k]); 
  45. vec2Axis = subplot(2,2,1);
  46. plot(min(vec2)+max(vec2)-vec2, 1:length(vec2), min(vec2)+max(vec2)-vec2, 1:length(vec2), 'ro');
  47. axis tight;
  48. xlabel('vec2');
  49. set(vec2Axis, 'unit', 'pixels');
  50. set(vec2Axis, 'position', [width-(b+2)*k, height-(b+0.5)*k, k, b*k]); 
  51. % The following should be done after axis is resized
  52. xticklabel = get(vec2Axis, 'xticklabel');
  53. set(vec2Axis, 'xticklabel', flipud(xticklabel));
  54. pathAxis = subplot(2,2,2);
  55. box on;
  56. set(pathAxis, 'unit', 'pixels');
  57. position = [width-(b+0.5)*k, height-(b+0.5)*k, b*k, b*k]; 
  58. set(pathAxis, 'position', position); 
  59. % Plot the yellow grid line
  60. for i = 1:length(vec1),
  61. line([i, i], [1, length(vec2)], 'color', 'y');
  62. end
  63. for i = 1:length(vec2),
  64. line([1, length(vec1)], [i, i], 'color', 'y');
  65. end
  66. % ====== Solution obtained by DTW
  67. for i = 1:size(DTWpath,2)-1,
  68. line(DTWpath(1, i:i+1), DTWpath(2, i:i+1), 'color', 'r', 'marker', '.');
  69. end
  70. if ~isempty(DTWpath),
  71. dtwDist = sum(abs(vec1(DTWpath(1,:))-vec2(DTWpath(2,:))));
  72. else
  73. dtwDist = inf;
  74. end
  75. title(['DTW distance = ', num2str(dtwDist)]);
  76. axis equal
  77. axis tight
  78. if length(vec2)>length(vec1),
  79. % Adjust the axis of vec1
  80. dtwPlotWidth = position(3)*length(vec1)/length(vec2);
  81. oldPos = get(vec1Axis, 'pos');
  82. position = oldPos;
  83. position(1) = oldPos(1)+(oldPos(3)-dtwPlotWidth)/2;
  84. position(3) = dtwPlotWidth;
  85. set(vec1Axis, 'pos', position);
  86. else
  87. % Adjust the axis of vec2
  88. dtwPlotHeight = position(3)*length(vec2)/length(vec1);
  89. oldPos = get(vec2Axis, 'pos');
  90. position = oldPos;
  91. position(2) = oldPos(2)+(oldPos(4)-dtwPlotHeight)/2;
  92. position(4) = dtwPlotHeight;
  93. set(vec2Axis, 'pos', position);
  94. end
  95. set(findobj(gcf, 'unit', 'pixel'), 'unit', 'normalize');