SpeechClassifier API 與端點檢測

  1. <span style=“font-size:32px;”>public class SpeechClassifier extends AbstractVoiceActivityDetector  
  2. 經過本類處理後的數據流中含數的爲:SpeechClassifiedData(語音和非語音),DataStartSignal信號和DataEndSignal信號。  
  3.   
  4. 本類的作用就是把把音頻信號分類成語音和非語音信號。實現了端點檢測的第一步。  
  5. 作用:在一定程度上實現了由Bent Schmidt Nielsen 發明的端點檢測。  
  6. 這個端點檢測由三個主要步驟組成。把音頻分成語音和非語音兩類,在語音的兩端插入SPEECH_START和SPEECH_END信號。移除非語音區域。  
  7. 第一步,是使用Bent Schmidt Nielsen算法,把音頻分類成語音和非語音。每次當音頻數據輸入後,使用當前的音頻信號水平對平均信號水平和背景噪聲水平進行更新。如果平均的信號水平比背景噪聲水平大於(在configurable中)一個確定的門限值,則當前音頻被標記爲語音。否則被標記爲非語音。  
  8. 第二步和第三步在SpeechMarker和NonSpeechDataFilter類中實現。  
  9. 本類的屬性:  
  10. @S4Integer(defaultValue = 10)  
  11. public static final String PROP_FRAME_LENGTH_MS = “frameLengthInMs”;端點檢測幀的長度,以毫秒計算,一般爲10ms。  
  12. @S4Double(defaultValue = 0)  
  13. public static final String PROP_MIN_SIGNAL = “minSignal”;用來更新背景噪聲信號水平的最小的信號水平。默認爲0.  
  14. @S4Double(defaultValue = 10)  
  15. public static final String PROP_THRESHOLD = “threshold”;門限值,用來分類語音和非語音,當前的信號水平比背景噪聲的信號水平高於此門限則被認爲是語音。因此當門限值越低,會使端點檢測越敏感,也就是會把更多的音頻標記爲語音。門限值越高會把更少的音頻標記爲語音。  
  16. @S4Double(defaultValue = 0.003)  
  17. public static final String PROP_ADJUSTMENT = “adjustment”;調整因子,默認爲0.003.  
  18. 統計屬性:protected long speechFrames;,protected long backgroundFrames;,protected double totalBackgroundLevel;,protected double totalSpeechLevel;  
  19. 其它屬性:  
  20. protected final double averageNumber = 1;平均數字。protected double adjustment;,rotected double level;平均信號水平。   protected double background;背景信號水平。protected double minSignal;   最小的合法的信號水平。  
  21. protected double threshold;,protected float frameLengthSec;protected boolean isSpeech;   
  22. 本類的構造方法:  
  23.   public SpeechClassifier(),空的構造方法,獲得的屬性沒有初始化的對象。  
  24. public SpeechClassifier(int frameLengthMs, double adjustment, double threshold, double minSignal );非空構造方法,對幀長,門限,最小信號水平,調整因子根據輸入參數進行初始化。初始化了數據處理器。把平均信號水平設爲0,背景信號水平設爲300,背景幀數設爲1,語音幀數設爲1,總的語音信號水平設爲0,總的背景信號水平設爲0.  
  25. 本類的方法:  
  26. public void newProperties(PropertySheet ps);與非空構造方法對屬性的設置有着相同的結果。  
  27. public void initialize();初始化了數據處理器和水平跟蹤端點檢測。把平均信號水平設爲0,背景信號水平設爲300,背景幀數設爲1,語音幀數設爲1,總的語音信號水平設爲0,總的背景信號水平設爲0.  
  28. protected void reset();重置水平跟蹤到初始狀態。把平均信號水平設爲0,背景信號水平設爲300,背景幀數設爲1,語音幀數設爲1,總的語音信號水平設爲0,總的背景信號水平設爲0.  
  29. public static double logRootMeanSquare(double[] samples);本方法完成的是,</span>  



  1. <span style=“font-size:32px;”>minSignal爲最小的合法的信號水平(能量),默認爲0。  
  2. Level爲平均信號水平(能量),開始時爲0 。  
  3. averageNumber爲平均數,默認爲1。Background爲背景信號水平(能量),開始爲300 。  
  4. adjustment調整因子(背景信號水平(能量)調整因子),只用於對背景信號能量(水平)調整,默認爲0.003。Threshold門限,默認爲10.  
  5. 在本法中,對分類後的音頻數據進行的標記生成了SpeechClassifiedData對象,並計算了總共的語音幀(塊)和非語音幀(塊)的分別的數目。及總的非語音能量(水平)和語音能量。  
  6. private void resetStats ();重置了統計屬性。使之到初始設置。非語音幀的總數目(非語音幀數)=1,語音幀的總數(語音幀數)=1,總的語音水平(能量)=0,總的背景水平(能量)=0 。  
  7. private void collectStats(boolean isSpeech);收集統計信息爲計算信噪比提供信息。語音幀的總數,非語音幀的總數目(非語音幀數),總的語音水平(能量),總的背景水平(能量)。  
  8. public Data getData();根據前一個數據處理器的輸入,獲得分類處理後的數據,即SpeechClassifiedData。  
  9. public boolean isSpeech();如果當前幀是語音,則返回爲真。本方法能夠被噪聲濾波器所使用,例如用來調整噪聲頻譜的估計。  
  10. public double getSNR ();返回爲信噪比,計算信噪比,信噪比爲:snr = (totalBackgroundLevel / backgroundFrames - totalSpeechLevel / speechFrames);即總背景能量除以背景幀數後在減去總語音能量除以語音幀。是在log域計算的。所以纔是減。  
  11. public boolean getNoisy ();如果信噪比小於-20dB則音頻被認爲是噪聲。返回的是對輸入數據噪聲能夠破壞識別的估計。返回數據是噪聲的估計。</span>  

轉:http://blog.csdn.net/taiyb/article/details/46368019

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章