Kaldi脚本分析(2)——特征提取
来源:互联网 发布:限制网速软件 编辑:程序博客网 时间:2024/06/05 15:33
1特征提取
1.1特征提取概述
- 输入采样率为16kHz的音频
- 计算一个音频文件中的总帧数(通常帧长25ms,帧移10ms)
- 提取数据,可选做dithering(加一点噪声避免出现log0)
- 预加重(如s’(t)= s(t) -0.97 s(t-1))和去除直流偏移
- 乘上窗函数,如Hamming窗
- 离散傅里叶变换FFT,并在每个频点(frequencybin)计算功率谱能量
- 计算每个梅尔滤波器的能量(23个部分重叠的三角滤波器)
- 计算对数能量,得到FBANK特征,常用于DNN-HMM的ASR系统
- 做IDFT变换(得到cepstrum),根据要求保留系数,常选择前12维MFCC系数作为特征向量(去除F0相关信息),再加上能量值,共13维。加上时间动态特性,即一阶、二阶导数,总计39维MFCC特征。因为上一步中计算得到的对数能量为实数且对称,这里离散傅里叶反变换IDFT等价于余弦变换DCT。
- 选做倒谱系数lifter(仅仅是比例变换,确保系数在合理范围内)
1.2特征提取脚本流程
#produce MFCC features
rm -rf data/mfcc && mkdir -pdata/mfcc && cp -Rdata/{train,dev,test,test_phone} data/mfcc ||exit 1;
forxin train devtest;do
#make mfcc
steps/make_mfcc.sh --nj$n --cmd"$train_cmd" data/mfcc/$x exp/make_mfcc/$x mfcc/$x ||exit 1;
#compute cmvn
steps/compute_cmvn_stats.sh data/mfcc/$x exp/mfcc_cmvn/$x mfcc/$x ||exit 1;
done
#copy feats and cmvn to test.ph, avoidduplicated mfcc & cmvn
cp data/mfcc/test/feats.scpdata/mfcc/test_phone && cp data/mfcc/test/cmvn.scp data/mfcc/test_phone||exit 1;
1.2.1提取mfcc(steps/make_mfcc.sh)
调用命令行工具compute-mfcc-feats,提取特征,创建feats.ark和feats.scp文件。用法为:compute-mfcc-feats [options...]<wav-rspecifier> <feats-wspecifier>。
该工具有两个参数:rspecifier和wspecifier
(关于rspecifier和wspecifier的具体用法参见Kaldi的I/O机制)
- wav-rspecifier用来读取.wav数据(以发音为索引),只读取wav文件中的pcm数据,如果源文件不是wav格式,则需要用sph2pipe工具转换。
rspecifier用法
含义
ark:foo.ark
Read from archive foo.ark
scp:foo.scp
Read as specified in foo.scp(音频文件列表)
ark:-
Read archive from stdin
ark:gunzip –c foo.gz
Read archive from foo.gz
ark,s,cs:-
Read archive (sorted) from stdin...
- feats-wspecifier用来写特征(以发音为索引)。典型的用法是,将特征数据写入一个大的“archive”存档文件,同时写一个对应的“scp”文件以便随机存取特征数据。
wspecifier用法
含义
ark:foo.ark
Write to archive “foo.ark”
scp:foo.scp
Write to files using mapping in foo.scp(特征列表)
ark:-
Write archive to stdout
ark,t:|gzip –c>foo.gz
Write text-form archive to foo.gz
ark,t:-
Write text-form archive to stdout
ark,scp:foo.ark,foo.scp
Write archive and scp file
该工具有一些常用选项:
- 梅尔滤波器的个数,16kHz默认23个,8kHz则15个。
- 最小和最大截止频率
- 兼容htk
- 提取特征均值
- 声道长度归一化VTLN
1.2.2提取cmvn(steps/compute_cmvn_stats.sh)
调用命令行工具compute-cmvn-stats,创建cmvn.ark和cmvn.scp文件。
1.2.3修复数据错误(utils/fix_data_dir.sh)
该脚本会修复排序错误,并移除那些被指明需要特征数据或标注,但却找不到相应数据的那些发音。
注1:feats.scp文件
指向提取好的特征(保存在.ark存档文件)。文件格式为:
< utterance-id > <extended-filename-of-features>
以utterance-id1 /.../mfcc_train.ark:24为例,表示utterance-id1对应的音频段,从存档文件*.ark的24字节开始读取特征数据(通过fseek函数定位)。
注2:cmvn.scp文件
指向提取好的倒谱均值和方差归一化的统计量(保存在.ark存档文件)。文件格式为:
< speaker-id > <extended-filename-of-cmvn>
speaker-id1 /.../cmvn_train.ark:7的含义可参考feats.scp进行理解。
与feats.scp不同的是,该文件是以说话人编号为索引,而不是发音编号。
注3:.ark存档文件
每一个特征文件*.ark保存的都是Kaldi格式的矩阵。特征存档文件中,每个特征是一个向量(如13维),所有特征构成矩阵,矩阵列数为特征维数,行数则和音频文件的长度有关,标准情况下帧长25ms,帧移10ms,所以一行特征数据对应10ms帧移的25ms音频。但是在Kaldi中,实际返回的帧数可能比预想的要小几帧,这和Kaldi处理不足以分帧的剩余数据的方式有关,目前这种方式是兼容HTK的。统计量存档文件中,每个统计量集合都是一个矩阵,如2*14维这种。
- Kaldi脚本分析(2)——特征提取
- kaldi中的特征提取
- Kaldi脚本分析(6)——解码图构建
- Kaldi脚本分析(1)——数据准备
- Kaldi脚本分析(3)——单音素建模
- Kaldi脚本分析(5)——自适应方法
- 利用kaldi提取mfcc特征
- Kaldi特征提取之-预处理
- Kaldi特征提取之-FBank
- Kaldi特征提取之-MFCC
- Kaldi特征提取之-VAD
- 图像特征提取2—HOG特征
- kaldi中特征提取,C++接口设计
- kaldi学习笔记:run.sh(egs/timit/s5)详细分析:从数据准备到特征提取
- [转载]kaldi学习笔记:run.sh(egs/timit/s5)详细分析:从数据准备到特征提取
- 使用kaldi进行特征提取时的问题记录
- Kaldi DNN的特征提取和解码的连接操作
- 特征提取——主成分分析PCA(K-L变换)及几何解释
- java web学习总结41:Apache的DBUtils框架学习
- Maven配置本地库加载ojdbc14-10.2.0.4.0.jar文件
- 【线段树 && 扫描线 && 面积交】HDU
- OpenWrt中wifidog的配置及各节点页面参数【转】
- [容易] UVa OJ 11572 Unique Snowflakes 滑动窗口
- Kaldi脚本分析(2)——特征提取
- adb 命令相关
- 【操作系统】文件管理(六)
- andriod item内checked的setOnClickListener事件和setOnItemClickListener事件冲突解决办法
- Python CGI编程
- 聊聊并发--原子操作的实现原理
- 实验预备工作
- 网络编程预备知识
- EASYUI DATAGRID 多列复选框CheckBox