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

语音合成与识别

开发平台:

Matlab

  1. % ====== Exhaustive test of triangle inequality
  2. index = combinat(1:waveFileNum, 3);
  3. caseNum = size(index,1);
  4. fprintf('Exhaustive testing %g cases of triangle inequality ===> ', 3*caseNum);
  5. tic
  6. deviation = zeros(caseNum, 3);
  7. allDistance = zeros(caseNum, 3);
  8. h = waitbar(0, ['Testing ', int2str(caseNum), ' cases of triangular inequality...']);
  9. for i = 1:caseNum,
  10. if mod(i, 1000)==0,
  11. waitbar(i/caseNum, h);
  12. end
  13. a = index(i, 1);
  14. b = index(i, 2);
  15. c = index(i, 3);
  16. dist1 = distance(a,b);
  17. dist2 = distance(b,c);
  18. dist3 = distance(a,c);
  19. allDistance(i, :) = [dist1, dist2, dist3];
  20. d1 = dist1+dist2-dist3;
  21. d2 = dist2+dist3-dist1;
  22. d3 = dist1+dist3-dist2;
  23. deviation(i, :) = [d1, d2, d3];
  24. end
  25. fprintf('%4.2f secondsn', toc);
  26. % ====== Get rid of the cases when 1000000 is involved
  27. ind = find(any(allDistance>=1000000, 2));
  28. fprintf('Deleting %g cases that involves 1000000n', 3*length(ind));
  29. deviation(ind, :) = [];
  30. % ====== Display the results
  31. bad = sum(sum(deviation<0));
  32. total = prod(size(deviation));
  33. fprintf('Percentage of cases that violates the triangle inequality = %g/%g = %g%%n', bad, total, bad/total*100);
  34. hist(deviation, 100);
  35. title('Histogram of deviation');
  36. % ====== Save the results
  37. %save tritest distance deviation
  38. devIndex = deviation<0;
  39. distDiff = abs([allDistance(:,1)-allDistance(:,2), allDistance(:,2)-allDistance(:,3), allDistance(:,3)-allDistance(:,1)]);
  40. % Normal index
  41. index2 = find(sum(devIndex,2)<1);
  42. D2 = distDiff(index2, :);
  43. figure;
  44. [N1, X1] = hist(max(D2'), 100);
  45. bar(X1,N1);
  46. % Problematic index
  47. index1 = find(sum(devIndex,2)>=1);
  48. if ~isempty(index1),
  49. D1 = distDiff(index1, :);
  50. [N2, X2] = hist(max(D1'), 100);
  51. hold on
  52. h = bar(X2,N2, 0.5);
  53. set(h, 'facecolor', 'y');
  54. hold off
  55. title('Hist. of max. dist. differences of any three wave files');
  56. end
  57. legend('Fullfil tri. inequality', 'Not fullfil tri. inequality');
  58. title('Histograms of max. diff. of triangle''s three sides');