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

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