语音特性提取回顾-从mel定标到mfc和mfcc

语音特性提取回顾-从mel定标到mfc和mfcc

  • 前言
  • Mel 定标
  • Mel滤波器组
      • 离散傅里叶变换
      • Mel滤波器组实现插值
  • MFC和MFCC差了一个C
  • CMVN归一化的思想
  • VTLN归一化怎么和Mel谱扯上关系的
  • 尾声
  • 参考文档

前言

做语音识别的真谛是不漏听一句话,不错听一句话,但能做到着实不易。拿漏听来说吧,用经典数学的方法和概率统计的方法虽然大大提高了识别率,但依然有漏网纸鱼,而且有的漏网纸鱼人类却觉得这句话很正常啊?!。。。。然而对于识别体统来说,它就是一个异类,那么这个异类这么个不一样了?我们还得剥茧抽丝,从语音,从属性提取来说起,本文重新分析思考MFCC的核心,Mel是干啥滴,在DNN时代还没过时吗?以及是否可以将经典的CMVN和VTLN等方法重拾起来,把异类拉回到同类中去…

Mel 定标

Mel定标是一种基频感知定标,通过试听者判断,认为声音频率是相等,而真正的频率却既不是等距,也不是倍频程的情况。这个实验具体怎么做的暂时没兴趣追溯,而值得注意的是Mel定标得到了从物理频率到mel频率的一个非线性映射,
Mel则来自于Melody的缩写,暗示这个定标是基于基频对比来实现的。这是1937年由Stevens、Volkmann和Newman三个人实验定标并且命名的。
m = 2595 l o g 10 ( 1 + f / 700 ) m= 2595 log _{10}(1+f/700) m=2595log101+f/700
还有一种自然对数表达方法
m = 1127 l n ( 1 + f / 700 ) m= 1127 ln (1+f/700) m=1127ln(1+f/700

Mel滤波器组

Mel定标其实很容易理解了,但为什么引入Mel滤波器组?什么是Mel滤波器组?怎么用这个滤波器组?这三个问题一直困扰着我。这一切要从离散的频谱说起:

离散傅里叶变换

数字信号的频域分析广泛使用快速傅里叶变换,我们获得在频率上一个一个的离散频率点的幅值信号,很多外文用BIN来表达这条幅值竖线的含义,那么能不能直接变换一下,把这个BIN变成Mel的BIN呢?答案是肯定的,但是失去了Mel的使命。Mel是主观听觉实验的产物,将频域划分为一种等距的的表达,但真是频率是对数映射的。如果直接将FFT的BIN做MEL变换,那么在低频段的BIN是比较稀疏的,而高频段的BIN却是挨着很紧密的,这就不MakeSense啦,人类还是对较低频段的某一部分敏感的,高频那么多,其实我已经听不到了。怎么办,插值啊,这样就引入了Mel滤波器组。

Mel滤波器组实现插值

这个滤波器组的样子都是互相叠加的三角形,三角形的尖峰处对应着这组滤波器设计的峰值点,增益是一,其他的按照斜率递减,一直减到相邻的Mel峰值点为0。使用方法是将这个三角形覆盖的 f f f域的BIN做加权累加,得到滤波器峰值点的BIN,加权值就是选择 f f f域的BIN与三角交点的值。这解决了之前提出的后两个问题。但其实还有一个问题令人困扰,为什么用三角滤波器做加权插值,靠谱吗?这个答案暂时不深究了,有兴趣的读者可以查一查ERB(Equivalent Rectangular Bandwidth),或者参考附录中的博文。博文的三角形和矩形的叠加图例很直观的交代了等效距带宽的物理本质。虽然也提出用GAMMATONE滤波器的方法,但主流的方案依然选择三角滤波器组。

MFC和MFCC差了一个C

经过了Mel滤波器组的这些BIN被称为Mel滤波器系数(Mel filter Coefficients),很多基于神经网络的ASR系统就直接拿他们来做为语音feature来做训练了,那么差的C是什么呢,是Cepstral倒谱。为什么要变换成倒谱呢?有文献说滤波器bank整合的系数是高度相关的,这从上文的计算过程也看的出来,而这对于基于HMM模型的识别系统来说是不能容忍的,所以用一个DCT变换去相关,而从数学上来说将相当于将频谱做了一个实值IFFT,那么等效为倒谱,而是经过Mel滤波器的倒谱,所以叫做Mel倒谱(此处我不禁联想起来倒谱是频率包络概念,那么是不是认为经过倒谱变换后一些基频信息也消失了,那么Mel倒谱就是Mel频率包络咯?)。经典的语音feature还需要抽取倒谱系数的13个BIN(大都不是从0开始抽取的),计算抽取系数的一阶导数和二阶导数,最后拼接成39维的向量。

CMVN归一化的思想

首先在labrosa的网站有这样一句话:

In particular, the effect of inserting a transmission channel on the input speech is to multiply the speech spectrum by the channel tranfer function. In the log cepstral domain, this multiplication becomes a simple addition which can be removed by subtracting the cepstral mean from all input vectors. 

这句话奠定了CMN(Cepstral Mean Normalization)的数学基础,也就是说在信道中的卷积效果(影响),变换到频域的乘法关系,最后变换到对数领域的加法关系,假设这个信道相应函数是稳态的,那么就可以通过求倒谱均值的方法,把这个信道激励响应像滤除直流一样在对数频域谱中给滤除掉。想法很精彩,但是有两个挑战,第一,信道响应不一定是稳态的,第二,倒谱均值的计算需要覆盖整个集合,实时系统(ASR)好像没办法获取一个很靠谱的Mean值。所以很多论文搞了一个滑窗mean来近似实时归一化的值,据说很好,Maybe!

VTLN归一化怎么和Mel谱扯上关系的

上文提到了倒谱分析一般就不管基频了,人声的声学特性最重要的就剩共振峰了。共振峰和声道长度的比例关系使得学者想到了通过调整共振峰的方法,实现对人类声道长度的归一化。说的直观一点也是通过统计,均值,比较的方法,得到一个warping因子,改变频率的映射,这个听上去和mel似曾相识。所以学者们干脆将在这个warping因子融合进了mel滤波器bank的设计当中,完成归一化,简化了算法流程。

尾声

此文是对声学特性提取的一些问题的重新整理和思考,最近还看到一篇论文,利用LDA方法实现实时归一化,说了这么多,就是要找到一个或者几个有效的归一化方法,是识别系统尽量和人类的识别水平接近一些。

参考文档

【1】Gammatone滤波器组:性质、实现和应用 , http://bbs.ivocaloid.com/thread-128707-1-1.html
【2】5.4 Filterbank Analysis, https://labrosa.ee.columbia.edu/doc/HTKBook21/node54.html

你可能感兴趣的:(人工智能,语音特征,自然语言处理)