语音识别——MFCC理解

要看懂这篇文章要把数字信号处理学懂
在任意一个系统中,第一步就是提取特征 。换句话说,我们需要把音频信号中具有辨识性的成分提取出来,然后把其他的乱七八糟的信息扔掉,例如背景噪声啊,情绪啊等等 。
搞清语音是怎么产生的对于我们理解语音有很大帮助 。人通过声道产生声音,声道的shape(形状?)决定了发出怎样的声音 。声道的shape包括舌头,牙齿等 。如果我们可以准确的知道这个形状,那么我们就可以对产生的音素进行准确的描述 。声道的形状在语音短时功率谱的包络中显示出来 。

语音识别——MFCC理解

文章插图
而MFCCs就是一种准确描述这个包络的一种特征 。
MFCCs中文名为“ 梅尔倒频谱系数 ”(Mel)是一种在自动语音和说话人识别中广泛使用的特征 。它是在1980年由Davis和搞出来的 。从那时起 。在语音识别领域,MFCCs在人工特征方面可谓是鹤立鸡群,一枝独秀,从未被超越啊(至于说Deep 的特征学习那是后话了) 。
好,到这里,我们提到了一个很重要的关键词:声道的形状,然后知道它很重要,还知道它可以在语音短时功率谱的包络中显示出来 。哎,那什么是功率谱?什么是包络?什么是MFCCs?它为什么有效?如何得到?下面咱们慢慢道来 。
一、声谱图()
我们处理的是语音信号,那么如何去描述它很重要 。因为不同的描述方式放映它不同的信息 。那怎样的描述方式才利于我们观测,利于我们理解呢?这里我们先来了解一个叫声谱图的东西 。
语音识别——MFCC理解

文章插图
这里,可以看出语音信号是由一系列频谱向量表示,这段语音被分为很多帧,每帧语音都对应于一个频谱(通过短时FFT计算),频谱表示频率与能量的关系 。在实际使用中,频谱图有三种,即线性振幅谱、对数振幅谱、自功率谱(对数振幅谱中各谱线的振幅都作了对数计算,所以其纵坐标的单位是dB(分贝) 。这个变换的目的是使那些振幅较低的成分相对高振幅成分得以拉高,以便观察掩盖在低幅噪声中的周期信号) 。
语音识别——MFCC理解

文章插图
我们先将其中一帧语音的频谱通过坐标表示出来,如上图左 。现在我们将左边的频谱旋转90度 。得到中间的图 。然后把这些幅度映射到一个灰度级表示(也可以理解为将连续的幅度量化为256个量化值?),0表示黑,255表示白色 。幅度值越大,相应的区域越黑 。这样就得到了最右边的图 。那为什么要这样呢?为的是增加时间这个维度,这样就可以显示一段语音而不是一帧语音的频谱,而且可以直观的看到静态和动态的信息 。优点稍后呈上 。
这样我们会得到一个随着时间变化的频谱图,这个就是描述语音信号的声谱图 。
语音识别——MFCC理解

文章插图
下图是一段语音的声谱图,很黑的地方就是频谱图中的峰值(共振峰) 。
语音识别——MFCC理解

文章插图
那我们为什么要在声谱图中表示语音呢?
首先,音素()的属性可以更好的在这里面观察出来 。另外,通过观察共振峰和它们的转变可以更好的识别声音 。隐马尔科夫模型()就是隐含地对声谱图进行建模以达到好的识别性能 。还有一个作用就是它可以直观的评估TTS系统(text to )的好坏,直接对比合成的语音和自然的语音声谱图的匹配度即可 。
二、倒谱分析( )
下面是一个语音的频谱图 。峰值就表示语音的主要频率成分,我们把这些峰值称为共振峰(),而共振峰就是携带了声音的辨识属性(就是个人身份证一样) 。所以它特别重要 。用它就可以识别不同的声音 。