说话人识别中的VAD

Kaldi中说话人识别的VAD算法解析
本文详细解析了Kaldi中用于说话人识别的Voice Activity Detection (VAD)算法,主要关注如何通过VAD区分语音和背景噪音,以构建UBM模型。源码分析包括能量阈值设定、比例阈值判断等关键步骤,并提供了一个实际的计算过程示例。
               

本文根据kaldi中的vad的算法 kaldi/src/ivector/voice-activity-detection.cc以及网上的一些资源来总结一下这个知识点。

首先VAD的全称是:Voice Activity Detection (语音激活检测), 能够区分传输语音信号中的语音信号和背景噪音, 当然还能在通信中区分语音和静默段能够区分传输语音信号中的语音信号和背景噪音,

避免带宽资源的浪费,这里我们只讨论在说话人识别中需要区分背景噪音来构建UBM模型。

下面直接看kaldi的源码,注意看注释

run.sh中调用下面computer_vad_decision.sh

Usage: $0 [options] <data-dir> <log-dir> <path-to-vad-dir>

[plain]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. sid/compute_vad_decision.sh --nj 40 --cmd "$train_cmd" \  
  2.     data/train exp/make_vad $vaddir  
在 computer_vad_decision.sh调用的是

Usage: compute-vad [options] <feats-rspecifier> <vad-wspecifier>

输入的是每一个feats文件,由于上边的nj是40,所以这JOB: 1~40, 输入mfcc.ark 输出vad.ark

compute-vad --config=$vad_config scp:$sdata/JOB/feats.scp ark,scp:$vaddir/vad_${name}.JOB.ark,$vaddir/vad_${name}.JOB.scp

computer-vad是  kaldi/src/ivectorbin/compute-vad.cc
下面是 computer-vad.cc中的逻辑:

[cpp]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. for (;!feat_reader.Done(); feat_reader.Next()) {  
[cpp]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. #读取每一句话  
  2. std::string utt = feat_reader.Key();  
  3. Matrix<BaseFloat> feat(feat_reader.Value());  
  4. if (feat.NumRows() == 0) {  
  5.   KALDI_WARN << "Empty feature matrix for utterance " << utt;  
  6.   num_err++;  
  7.   continue;  
  8. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值