欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 利用MATLAB識別1-9語音的源碼 [打印本頁]

作者: matlabxmut    時間: 2018-5-22 22:16
標題: 利用MATLAB識別1-9語音的源碼
自己做的,識別1-9的語音。


全部資料51hei下載地址:
MATLAB語音識別1-9.zip (397.37 KB, 下載次數: 31)


源碼:
  1. function trimmedX = myVAD(x)

  2. Ini = 0.1;          %Initial silence duration in seconds
  3. Ts = 0.01;          %Frame width in seconds
  4. Tsh = 0.005;        %Frame shift in seconds
  5. Fs = 16000;         %Sampling Frequency
  6. counter1 = 0;   
  7. counter2 = 0;
  8. counter3 = 0;
  9. counter4 = 0;
  10. ZCRCountf = 0;      %Stores forward count of crossing rate > IZCT
  11. ZCRCountb = 0;      %As above, for backward count
  12. ZTh = 40;           %Zero crossing comparison rate for threshold
  13. w_sam = fix(Ts*Fs);                   %No of Samples/window
  14. o_sam = fix(Tsh*Fs);                  %No of samples/overlap
  15. lengthX = length(x);
  16. segs = fix((lengthX-w_sam)/o_sam)+1;  %Number of segments in speech signal
  17. sil = fix((Ini-Ts)/Tsh)+1;            %Number of segments in silent period
  18. win = hamming(w_sam);

  19. Limit = o_sam*(segs-1)+1;             %Start index of last segment

  20. FrmIndex = 1:o_sam:Limit;             %Vector containing starting index
  21.                                       %for each segment
  22. ZCR_Vector = zeros(1,segs);           %Vector to hold zero crossing rate
  23.                                       %for all segments
  24.                                     
  25. %Below code computes and returns zero crossing rates for all segments in
  26. %speech sample  
  27. for t = 1:segs
  28.     ZCRCounter = 0;
  29.     nextIndex = (t-1)*o_sam+1;
  30.     for r = nextIndex+1:(nextIndex+w_sam-1)
  31.         if (x(r) >= 0) && (x(r-1) >= 0)
  32.          
  33.         elseif (x(r) >= 0) && (x(r-1) < 0)
  34.          ZCRCounter = ZCRCounter + 1;
  35.         elseif (x(r) < 0) && (x(r-1) < 0)
  36.          
  37.         elseif (x(r) < 0) && (x(r-1) >= 0)
  38.          ZCRCounter = ZCRCounter + 1;
  39.         end
  40.     end
  41.     ZCR_Vector(t) = ZCRCounter;
  42. end

  43. %Below code computes and returns frame energy for all segments in speech
  44. %sample
  45. Erg_Vector = zeros(1,segs);
  46. for u = 1:segs
  47.     nextIndex = (u-1)*o_sam+1;
  48.     Energy = x(nextIndex:nextIndex+w_sam-1).*win;
  49.     Erg_Vector(u) = sum(abs(Energy));
  50. end

  51. IMN = mean(Erg_Vector(1:sil));  %Mean silence energy (noise energy)
  52. IMX = max(Erg_Vector);          %Maximum energy for entire utterance
  53. I1 = 0.03 * (IMX-IMN) + IMN;    %I1 & I2 are Initial thresholds
  54. I2 = 4 * IMN;
  55. ITL = min(I1,I2);               %Lower energy threshold
  56. ITU = 5 * ITL;                  %Upper energy threshold
  57. IZC = mean(ZCR_Vector(1:sil));  %mean zero crossing rate for silence region
  58. stdev = std(ZCR_Vector(1:sil)); %standard deviation of crossing rate for
  59.                                 %silence region
  60. IZCT = min(ZTh,IZC+2*stdev);    %Zero crossing rate threshold
  61. indexi = zeros(1,lengthX);      %Four single-row vectors are created
  62. indexj = indexi;                %in these lines to facilitate computation below
  63. indexk = indexi;
  64. indexl = indexi;

  65. %Search forward for frame with energy greater than ITU
  66. for i = 1:length(Erg_Vector)
  67.     if (Erg_Vector(i) > ITU)
  68.         counter1 = counter1 + 1;
  69.         indexi(counter1) = i;
  70.     end
  71. end
  72. ITUs = indexi(1);

  73. %Search further forward for frame with energy greater than ITL
  74. for j = ITUs:-1:1
  75.     if (Erg_Vector(j) < ITL)
  76.         counter2 = counter2 + 1;
  77.         indexj(counter2) = j;
  78.     end
  79. end
  80. start = indexj(1)+1;

  81. Erg_Vectorf = fliplr(Erg_Vector);%Flips round the energy vector
  82. %Search forward for frame with energy greater than ITU
  83. %This is equivalent to searching backward from last sample for energy > ITU
  84. for k = 1:length(Erg_Vectorf)
  85.     if (Erg_Vectorf(k) > ITU)
  86.         counter3 = counter3 + 1;
  87.         indexk(counter3) = k;
  88.     end
  89. end
  90. ITUf = indexk(1);

  91. %Search further forward for frame with energy greater than ITL
  92. for l = ITUf:-1:1
  93.     if (Erg_Vectorf(l) < ITL)
  94.         counter4 = counter4 + 1;
  95.         indexl(counter4) = l;
  96.     end
  97. end

  98. finish = length(Erg_Vector)-indexl(1)+1;%Tentative finish index
  99.    
  100. %Search back from start index for crossing rates higher than IZCT
  101.    
  102. BackSearch = min(start,25);
  103. for m = start:-1:start-BackSearch+1
  104.     rate = ZCR_Vector(m);
  105.     if rate > IZCT
  106.         ZCRCountb = ZCRCountb + 1;
  107.         realstart = m;
  108.     end
  109. end
  110. if ZCRCountb > 3
  111.     start = realstart;          %If IZCT is exceeded in more than 3 frames
  112.                                 %set start to last index where IZCT is exceeded
  113. end

  114. %Search forward from finish index for crossing rates higher than IZCT
  115. FwdSearch = min(length(Erg_Vector)-finish,25);
  116. for n = finish+1:finish+FwdSearch
  117.     rate = ZCR_Vector(n);
  118.     if rate > IZCT
  119.         ZCRCountf = ZCRCountf + 1;
  120.         realfinish = n;
  121.     end
  122. end
  123. if ZCRCountf > 3
  124.     finish = realfinish;        %If IZCT is exceeded in more than 3 frames
  125.                                 %set finish to last index where IZCT is
  126.                                 %exceeded
  127. end

  128. x_start = FrmIndex(start);      %actual sample index for frame 'start'
  129. x_finish = FrmIndex(finish-1);  %actual sample index for frame 'finish'
  130. trimmedX = x(x_start:x_finish); %Trim speech sample by start and finish
  131.                                 %indices
復制代碼


作者: 792403245    時間: 2018-11-25 20:13
為啥我識別不出來....




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1