[转]kaldi中的特征提取
转:http://blog.csdn.net/wbgxx333/article/details/25778483
本翻译原文http://kaldi.sourceforge.net/feat.html,由@煮八戒翻译,@wbglearn校对和修改。
特征提取
简介
我们做特征提取和波形读取的这部分代码,其目的是为了得到标准的MFCC(译注:梅尔倒谱系数)和PLP(译注:感知线性预测系数)特征,设置合理的默认值但留了一部分用户最有可能想调整的选项(如梅尔滤波器的个数,最小和最大截止频率等等)。这部分代码只读取wav文件里的pcm(译注:脉冲编码调制)数据。这类文件通常带.wav或.pcm后缀(虽然有时.pcm后缀会用于sph文件;这种情况下必须转换该文件)。假如源数据不是wav类文件,则用户可自由选择命令行工具来转换,而我们提供的sph2pipe工具已能满足一般的情况。
命令行工具compute-mfcc-feats和compute-plp-feats计算特征;同其它Kaldi工具一样,不带参数地运行它们会给出一个选项列表。例子脚本里显示了这些工具的用法。
计算MFCC特征
这里我们介绍如何使用命令行工具compute-mfcc-feats计算MFCC参数。该程序需要两个命令行参数:rspecifier是用来读.wav数据(以发音为索引)和wspecifier是用来写特征(以发音为索引);参见The Tableconcept和Specifying Table formats: wspecifiers and rspecifiers获取更多关于这些术语的解释。典型的用法是,将数据写入一个大的“archive”文件,也写到一个“scp”文件以便随机存取;参见Writing an archive and a script file simultaneously解释。程序没有添加增量功能(如需添加,参见add-deltas)。它接收选项-channel来选择通道(如–channel=0, –channel=1),该选项在读取立体声数据时很有用。
计算MFCC特征由Mfcc类型的对象完成,它有Compute()函数可以根据波形计算特征。
完整的MFCC计算如下所示:
· 计算出一个文件中帧的数目(通常帧长25ms帧移10ms)。
· 对每一帧:
o 提取数据,可选做dithering(注:直译为抖动,在这里可以理解为类似归一化的预处理),预加重和去除直流偏移,还可以和加窗函数相乘(此处支持多种选项,如汉明窗)
o 计算该点能量(假如用对数能量则没有C0)
o 做FFT(译注:快速傅里叶变换)并计算功率谱
o 计算每个梅尔滤波器的能量;如23个部分重叠的三角滤波器,其中心在梅尔频域等间距
o 计算对数能量并作余弦变换,根据要求保留系数(如13个)
o 选做倒谱变换;它仅仅是比例变换,确保系数在合理范围。
上下截止频率根据三角滤波器界定,由选项–low-freq和–high-freq控制,通常分别设置为0Hz和奈奎斯特频率附近,如对16kHz采样的语音设置为–low-freq=20 和 –high-freq=7800。
Kaldi的特征和HTK的特征在很多方面不同,但是几乎所有这些不同归结于有不同的默认值。用选项–htk-compat=true并正确设置参数,能得到同HTK非常接近的特征。一个可能重要的选项是我们不支持能量最大归一化。这是因为我们希望能把无状态方式应用到归一化方法,且希望从原理上计算一帧帧特征仍能给出相同结果。但是程序compute-mfcc-feats里有–subtract-mean选项来提取特征的均值。对每个语音做此操作;每个说话人可以有不同的方式来提取特征均值。(如在脚本里搜“cmvn”,表示倒谱均值和方差归一化)。
计算PLP特征
计算PLP特征的算法与MFCC的算法前期是一样的。稍后我们也许会在此部分增加些内容,但目前参见Hynek Hermansky《语音的感知线性预测(PLP)分析》,Journal ofthe Acoustical Society of America, vol. 87, no. 4, pages 1738–1752 (1990).
特征级声道长度归一化(VTLN)
程序compute-mfcc-feats和compute-plp-feats接收一个VTLN弯折因子选项。在目前的脚本中,这仅用作线性版的VTLN的初始化线性转换的一种方法。VTLN通过移动三角频率箱的中心频率的位置来实现。移动频率箱的弯折函数是一个在频域空间分段线性的函数。为理解它,记住以下数量关系:
0 <= low-freq <=vtln-low < vtln-high < high-freq <= nyquist
此处,low-freq和high-freq分别是用于标准MFCC或PLP计算的最低和最高频率(忽略更低和更高的频率)。vtln-low和vtln-high是用于VTLN的截止频率,它们的功能是确保所有梅尔滤波器有合适的宽度。
我们实现的VTLN弯折函数是一个分段线性函数,三个部分映射区间[low-freq,high-freq]至[low-freq, high-freq]。记弯折函数为W(f),f是频率。中段映射f到f/scale,scale是VTLN弯折因子(通常范围为0.8到1.2)。x轴上低段和中段的连接点是满足min(f,W(f)) = vtln-low的f点。x轴上中段和高端的连接点是满足max(f, W(f)) = vtln-high的f点。要求低段和高段的斜率和偏移是连续的且W(low-freq)=low-freq, W(high-freq)=high-freq。这个弯折函数和HTK的不同;HTK的版本中,"vtln-low"和"vtln-high"的数量关系是x轴上可以不连续的点,这意味着变量"vtln-high"必须基于弯折因子的可能范围的先验知识谨慎选择(否则梅尔滤波器可能为空)。
一个合理的设置如下(以16kHz采样的语音为例);注意这反映的是我们理解的合理值,并非任何非常细致的调试实验的结果。
low-freq |
vtln-low |
vtln-high |
high-freq |
nyquist |
40 |
60 |
7200 |
7800 |
8000 |
[转]kaldi中的特征提取的更多相关文章
- [转] kaldi中FST的可视化-以yesno为例
http://blog.csdn.net/u013677156/article/details/77893661 1.kaldi解码过程 kaldi识别解码一段语音的过程是:首先提取特征,然后过声学模 ...
- [转]决策树在Kaldi中如何使用
转自:http://blog.csdn.net/chenhoujiangsir/article/details/51613144 说明:本文是kaldi主页相关内容的翻译(http://kaldi-a ...
- Stitching模块中对特征提取的封装解析(以ORB特性为例)
titching模块中对特征提取的封装解析(以ORB特性为例) OpenCV中Stitching模块(图像拼接模块)的拼接过程可以用PipeLine来进行描述,是一个比较复杂的过程.在这个过程 ...
- kaldi中CD-DNN-HMM网络参数更新公式手写推导
在基于DNN-HMM的语音识别中,DNN的作用跟GMM是一样的,即它是取代GMM的,具体作用是算特征值对每个三音素状态的概率,算出来哪个最大这个特征值就对应哪个状态.只不过以前是用GMM算的,现在用D ...
- Kaldi中的L2正则化
steps/nnet3/train_dnn.py --l2-regularize-factor 影响模型参数的l2正则化强度的因子.要进行l2正则化,主要方法是在配置文件中使用'l2-regulari ...
- Kaldi中的Chain模型
Chain模型的训练流程 链式模型的训练过程是MMI的无网格的版本,从音素级解码图生成HMM,对其使用前向后向算法,获得分母状态后验,通过类似的方式计算分子状态后验,但限于对应于转录的序列. 对于神经 ...
- [转]kaldi中的在线识别----Online Recognizers
转自: http://blog.csdn.net/wbgxx333/article/details/24932533 本文是kaldi学习联盟中@冒顿翻译的,下面是@冒顿的翻译结果,在这里感谢@冒顿的 ...
- [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (一)
部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 29 理解图像特征 目标本节我会试着帮你理解什么是图像特征,为什么图像特征很重要,为什么角点很重要等.29.1 解释 我相 ...
- [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (二)
部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 34 角点检测的 FAST 算法 目标 • 理解 FAST 算法的基础 • 使用 OpenCV 中的 FAST 算法相关函 ...
随机推荐
- STS(eclipse)3.7.3新建项目报错:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)
烦人的版本兼容问题 没有使用sts3.7.3系统内嵌的maven3.3.3,调整为稍高版本的maven3.5.2,懒得修改配置了. 升级eclipse插件吧. Eclipse,Help -> I ...
- Python3 复制和深浅copy
赋值: 列表的赋值: list1 = ['peter','sam'] list2 = list1 print(list1,id(list1)) print(list2,id(list2)) list1 ...
- Xshell 6安装与使用教程
随着xshell5出现评估期已过的问题,发现好多人不知道怎么下载免费版的Xshell,在这里我将详细告诉大家如何下载和安装最新的Xshell6远程管理工具. Xshell安装 1.进入xshell英文 ...
- IDEA 工具从Json自动生成JavaBean
1.先安装GsonFormat插件:File-->Setting-->Plugins-->GsonFormat-->OK 2.new 一个新的Class空文件,然后 Alt+I ...
- Eclipse Android 模拟器启动过慢
打开AVD Manager窗口,在模拟器配置页面,选择Intel Atom (x86)选项.笔记本的CPU处理器是Intel 酷睿. 可以发现模拟器的启动速度明显变快.
- protobuf shutdownprotobuflibrary的时候crash,释放的指针出错
往往是多个子项目中有多次链接使用. 解决方法: 1. 使用静态库. 2. issure中有说2.6.1还未允许多次释放,建议使用3.4.x版本. 参考: https://github.com/prot ...
- node.js中fs文件系统模块的使用
node.js中为我们提供了fs文件系统模块,实现对文件或目录的创建,修改和删除等操作. fs模块中,所有的方法分为同步和异步两种实现. 有 sync 后缀的方法为同步方法,没有 sync 后缀的方法 ...
- CentOS7中firewall防火墙详解和配置,.xml服务配置详解
修改防火墙配置文件之前,需要对之前防火墙做好备份 重启防火墙后,需要确认防火墙状态和防火墙规则是否加载,若重启失败或规则加载失败,则所有请求都会被防火墙 1. firewall-cmd --state ...
- Python3基础知识之数据结构List和Tuple
问题:今天学习python数据结构中的List和Tuple. 目标:了解二者的区别,学会一般的应用 相关知识:列表(List) : 类似于 .NET ArrayList / List.元组(Tuple ...
- python_day10
目录: 并发多线程 协程 I/O多路复用(未完成,待续) 一.并发多线程 1.线程简述: 一条流水线的执行过程是一个线程,一条流水线必须属于一个车间,一个车间的运行过程就是一个进程(一个进程内至少一个 ...