趁着最近手头上的事比较少,想把自己前段时间的事情总结一下,由于目前主流的开源识别项目Kaldi前端支持较差,我闲着没事干,把前期做的一些事情迁移到Kaldi上来。为啥叫做闲着没事呢,因为这些代码用python或者MATLAB实现相比C++真的太简单了(就当是为开源社区做点贡献吧)……不过话说回来,迁移到Kaldi上还是有一点方便的,就是速度,以后做一些验证性的实验或者前端baseline,前后端打通的话,基本做一下数据准备就OK了,省去了很多重新组织代码,脚本的时间。
我前期做的一些事情个人感觉比较简单,主要是基于mask的单通道,多通道增强(此处应有汪大师的一系列论文)。目前想做的工作如下:
- Different mask computation(binary|ratio|complex|phase-sensitive)
- CGMM mask estimator on Kaldi
- STFT-based feature extraction and wave reconstruction
- Adaptive (MVDR/GEV/GSC) beamformer based on mask or signal methods
- TDOA estimation algorithm
- NMF methods on speech enhancement or seperation
repo地址kaldi-enhan,目前已经实现和测试完成的部分包括
- Compute binary|ratio masks
- Compute (phase angle/power&magnitude spectrum/complex STFT results) of source wave
- Seperate target component from source wave according to reference masks
- Estimate wave from enhanced spectrum and reference wave
- MVDR/GEV beamformer(based on mask model)
前端实现的核心库操作主要是复矩阵的运算,我目前已经整体搭建起来了,风格同Kaldi的Matrix/Vector Class,内部调用OpenBlas/CLAPACK接口,目前我在OSX和RedHat上已经
测试通过。
关于以上的一些工作我一直觉得比较简单没有写Blog,尤其是single channel的部分,后期考虑有时间的话补上。
写于2018.4.14