您的位置:首页 > 其它

SpeechClassifier API 与端点检测

2015-06-04 21:58 316 查看
<span style="font-size:32px;">public class SpeechClassifier extends AbstractVoiceActivityDetector
经过本类处理后的数据流中含数的为:SpeechClassifiedData(语音和非语音),DataStartSignal信号和DataEndSignal信号。

本类的作用就是把把音频信号分类成语音和非语音信号。实现了端点检测的第一步。
作用:在一定程度上实现了由Bent Schmidt Nielsen 发明的端点检测。
这个端点检测由三个主要步骤组成。把音频分成语音和非语音两类,在语音的两端插入SPEECH_START和SPEECH_END信号。移除非语音区域。
第一步,是使用Bent Schmidt Nielsen算法,把音频分类成语音和非语音。每次当音频数据输入后,使用当前的音频信号水平对平均信号水平和背景噪声水平进行更新。如果平均的信号水平比背景噪声水平大于(在configurable中)一个确定的门限值,则当前音频被标记为语音。否则被标记为非语音。
第二步和第三步在SpeechMarker和
4000
NonSpeechDataFilter类中实现。
本类的属性:
@S4Integer(defaultValue = 10)
public static final String PROP_FRAME_LENGTH_MS = "frameLengthInMs";端点检测帧的长度,以毫秒计算,一般为10ms。
@S4Double(defaultValue = 0)
public static final String PROP_MIN_SIGNAL = "minSignal";用来更新背景噪声信号水平的最小的信号水平。默认为0.
@S4Double(defaultValue = 10)
public static final String PROP_THRESHOLD = "threshold";门限值,用来分类语音和非语音,当前的信号水平比背景噪声的信号水平高于此门限则被认为是语音。因此当门限值越低,会使端点检测越敏感,也就是会把更多的音频标记为语音。门限值越高会把更少的音频标记为语音。
@S4Double(defaultValue = 0.003)
public static final String PROP_ADJUSTMENT = "adjustment";调整因子,默认为0.003.
统计属性:protected long speechFrames;,protected long backgroundFrames;,protected double totalBackgroundLevel;,protected double totalSpeechLevel;
其它属性:
protected final double averageNumber = 1;平均数字。protected double adjustment;,rotected double level;平均信号水平。   protected double background;背景信号水平。protected double minSignal;   最小的合法的信号水平。
protected double threshold;,protected float frameLengthSec;protected boolean isSpeech;
本类的构造方法:
public SpeechClassifier(),空的构造方法,获得的属性没有初始化的对象。
public SpeechClassifier(int frameLengthMs, double adjustment, double threshold, double minSignal );非空构造方法,对帧长,门限,最小信号水平,调整因子根据输入参数进行初始化。初始化了数据处理器。把平均信号水平设为0,背景信号水平设为300,背景帧数设为1,语音帧数设为1,总的语音信号水平设为0,总的背景信号水平设为0.
本类的方法:
public void newProperties(PropertySheet ps);与非空构造方法对属性的设置有着相同的结果。
public void initialize();初始化了数据处理器和水平跟踪端点检测。把平均信号水平设为0,背景信号水平设为300,背景帧数设为1,语音帧数设为1,总的语音信号水平设为0,总的背景信号水平设为0.
protected void reset();重置水平跟踪到初始状态。把平均信号水平设为0,背景信号水平设为300,背景帧数设为1,语音帧数设为1,总的语音信号水平设为0,总的背景信号水平设为0.
public static double logRootMeanSquare(double[] samples);本方法完成的是,</span>






<span style="font-size:32px;">minSignal为最小的合法的信号水平(能量),默认为0。
Level为平均信号水平(能量),开始时为0 。
averageNumber为平均数,默认为1。Background为背景信号水平(能量),开始为300 。
adjustment调整因子(背景信号水平(能量)调整因子),只用于对背景信号能量(水平)调整,默认为0.003。Threshold门限,默认为10.
在本法中,对分类后的音频数据进行的标记生成了SpeechClassifiedData对象,并计算了总共的语音帧(块)和非语音帧(块)的分别的数目。及总的非语音能量(水平)和语音能量。
private void resetStats ();重置了统计属性。使之到初始设置。非语音帧的总数目(非语音帧数)=1,语音帧的总数(语音帧数)=1,总的语音水平(能量)=0,总的背景水平(能量)=0 。
private void collectStats(boolean isSpeech);收集统计信息为计算信噪比提供信息。语音帧的总数,非语音帧的总数目(非语音帧数),总的语音水平(能量),总的背景水平(能量)。
public Data getData();根据前一个数据处理器的输入,获得分类处理后的数据,即SpeechClassifiedData。
public boolean isSpeech();如果当前帧是语音,则返回为真。本方法能够被噪声滤波器所使用,例如用来调整噪声频谱的估计。
public double getSNR ();返回为信噪比,计算信噪比,信噪比为:snr = (totalBackgroundLevel / backgroundFrames - totalSpeechLevel / speechFrames);即总背景能量除以背景帧数后在减去总语音能量除以语音帧。是在log域计算的。所以才是减。
public boolean getNoisy ();如果信噪比小于-20dB则音频被认为是噪声。返回的是对输入数据噪声能够破坏识别的估计。返回数据是噪声的估计。</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sphinx 语音识别