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

语音合成与识别

开发平台:

Matlab

  1. function plotwave(wavefile)
  2. % PLTOWAVE Plot the waveform of an audio signal
  3. % ====== Parameters
  4. frameSize = 256;
  5. overlap = 86;
  6. minEnergy = 0.0115;
  7. minEnergy = -30;
  8. if nargin == 0,
  9. wavefile = 'usersjangmatlabtoolboxasrwavefile1Gaoきるぱ.wav';
  10. end
  11. if ischar(wavefile),
  12. [y, fs, nbits] = wavreadc(wavefile);
  13. elseif length(wavefile)==1,
  14. load waveData.mat
  15. index = wavefile;
  16. [y, fs, nbits] = wavreadc(waveData(index).wavepath);
  17. else
  18. y = wavefile;
  19. fs = 8000;
  20. end
  21. y = y-mean(y);
  22. wavplay(y, fs, 'sync');
  23. % ====== Take frames
  24. framedY = buffer(y, frameSize, overlap);
  25. frameNum = size(framedY, 2); % Number of frames
  26. figure;
  27. subplot(4,1,1);
  28. plot((1:length(y))/fs, y);
  29. ylabel('Amplitude');
  30. if exist('index'),
  31. title(['Original wave form of ', waveData(index).answer, ' (by ', ...
  32. waveData(index).speaker, ')']);
  33. else
  34. title(wavefile);
  35. end
  36. subplot(4,1,2);
  37. aveEnergy = mean(framedY.^2);
  38. aveEnergy = 10*log10(mean(framedY.^2));
  39. time = (1:frameNum)*(frameSize-overlap)/fs;
  40. plot(time, aveEnergy);
  41. line([min(time), max(time)], minEnergy*[1 1], 'color', 'g');
  42. soundIndex = find(aveEnergy>=minEnergy);
  43. for i=1:length(soundIndex);
  44. line(soundIndex(i)*(frameSize-overlap)/fs, minEnergy, ...
  45. 'marker', 'o', 'color', 'red');
  46. end
  47. axis tight
  48. ylabel('Energy');
  49. title(['Average energy of each frame (legal frames: ', ...
  50. int2str(length(soundIndex)), ')']);
  51. subplot(4,1,3);
  52. zcr = zcrate(framedY);
  53. time = (1:frameNum)*(frameSize-overlap)/fs;
  54. plot(time, zcr);
  55. axis([-inf inf 0 inf]);
  56. ylabel('ZCR');
  57. title('Zero crossing rate');
  58. % ====== Pre-emphasis 
  59. y2 = filter([1, -0.95], 1, y);
  60. framedY2 = buffer(y2, frameSize, overlap);
  61. %wavplay(y2, fs, 'sync');
  62. subplot(4,1,4);
  63. plot((1:length(y2))/fs, y2);
  64. axis tight;
  65. ylabel('Amplitude');
  66. title('After pre-emphasis');
  67. return
  68. feature = wav2ftr(y);
  69. fprintf('No. of legal frames = %gn', size(feature, 2));
  70. figure;
  71. surf(feature);
  72. xlabel('Frame counts');
  73. ylabel('Feature counts');
  74. axis tight;
  75. box on;
  76. rotate3d on