倒谱分析与MFCC

倒谱分析与MFCC总结

      • 1. 声谱图(Spectrogram)
      • 2.倒谱分析
      • 3.MEL频率
      • 4.MFCC与FBANK
      • 5.FBank
      • MFCC与基本倒谱分析的对比

本文是我学习时对资料的一个个人学习笔记,资料来自于[MFCC原理]MEL原理

1. 声谱图(Spectrogram)

首先我们来弄明白比倒谱分析更易懂的声谱图

我们处理的是语音信号,那么我们该如何去描述它呢?最简单的方法当然是录下来一段语音,然后把直接它放到语音分析软件里,这时软件就会给我们一个语音的时序图
倒谱分析与MFCC_第1张图片
很显然,横轴是时间,纵轴是声音的震幅。

接下来我们要对这段波形进行傅里叶变换,但是我们不直接变换。在语音信号处理中我们一般先把语音切片成帧(frame),对每帧进行傅里叶变换,我们来看图
倒谱分析与MFCC_第2张图片

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

接下来,我们需要做的是分帧进行傅里叶变换后的谱图拼接起来,并且我们并不进行直接地拼接

拼接方式描述如下

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

这样我们会得到一个随着时间变化的频谱图,这个就是描述语音信号的spectrogram声谱图。

倒谱分析与MFCC_第3张图片

倒谱分析与MFCC_第4张图片

也就是说,我们虽然对时域信号进行了傅里叶变换,但是由于我们对信号分帧再拼接,因此拼接的结果中横轴仍然是时间t,而纵轴则是频率。我们把这种图就叫做声谱图

下图便是一个实例
倒谱分析与MFCC_第5张图片
明暗代表这这一段语音信号的这段频率的强弱,图中的蓝线代表着共振峰

那我们为什么要在声谱图中表示语音呢?
首先,音素(Phones)的属性可以更好的在这里面观察出来。另外,通过观察共振峰和它们的转变可以更好的识别声音。隐马尔科夫模型(Hidden Markov Models)就是隐含地对声谱图进行建模以达到好的识别性能。还有一个作用就是它可以直观的评估TTS系统(text to speech)的好坏,直接对比合成的语音和自然的语音声谱图的匹配度即可。

2.倒谱分析

首先区分一下语谱图(Spectrogram)与语音的频谱图(Spectrum)。
我们上面所说的便是语谱图
而如果将一段语音直接进行傅里叶变换,得到的便是语音的频谱图

接下来我们来看一个语音的频谱图

下面是一个语音的频谱图。峰值就表示语音的主要频率成分,我们把这些峰值称为共振峰(formants),而共振峰就是携带了声音的辨识属性(就是个人身份证一样)。所以它特别重要。用它就可以识别不同的声音。
倒谱分析与MFCC_第6张图片
既然它那么重要,那我们就是需要把它提取出来!我们要提取的不仅仅是共振峰的位置,还得提取它们转变的过程。所以我们提取的是频谱的包络(Spectral Envelope)。这包络就是一条连接这些共振峰点的平滑曲线。
倒谱分析与MFCC_第7张图片
我们可以这么理解,将原始的频谱由两部分组成:包络和频谱的细节。这里用到的是对数频谱,所以单位是dB。那现在我们需要把这两部分分离开,这样我们就可以得到包络(Spectral Envelop)了。

这里插一个个人的小想法:如果对一段语音的频谱,再进行一次傅里叶变换,也就是求Spectrum的Spectrum,接着进行低通滤波,会怎么样呢?会不会在控制好参数的情况下也能得到包络呢?哈哈有时间一定要来试试。

说回正题:我们要注意,上图中纵轴的单位都是dB,也就是说这都是对数化了的谱。
现在我们的目标是要取出语音的频谱图中的包络与"频谱的细节"。怎么做?
一个可行的方法是,对上图对数化了的频谱再进行一次傅里叶变换。进行这种变换之后,横轴自然就不是频率了,而是频率的频率。我们也可以叫它"伪频率"(pseudo-frequency),此时再对这个频率的频谱图取低频部分,它就与包络大致相对应(不是一样是对应);相应的,而高频部分就大致与频率的细节相对应。

倒谱分析与MFCC_第8张图片
试想,我们如果对包络进行IFFT,那么得到的应该是一个低频部分;而对细节进行IFFT,那么得到的应该是高频部分。当然,进行IFFT后横轴并不是时间,因为进行IFFT的谱的纵轴是对数化了的,因此IFFT后不应该是时间t。

倒谱分析与MFCC_第9张图片

得到谱的包络有什么作用呢?谱的包络往往包含着说话的语义成分–它是声道所对应的部分。而精细的部分对应着人的声门。试想,每个人的声门(声带)都不一样,但是我们仍然能从不同的人的发声上听出相同的"字",这是因为"字"的发声方法是我们在成长过程中学会的、是由声道控制的。
这样,我们就能进行ASR了。

自动语音识别技术(Automatic Speech Recognition)是一种将人的语音转换为文本的技术

在实际中咱们已经知道log X[k],所以我们可以得到了x[k]。那么由图可以知道,h[k]是x[k]的低频部分,那么我们将x[k]通过一个低通滤波器就可以得到h[k]了!没错,到这里咱们就可以将它们分离开了,得到了我们想要的h[k],也就是频谱的包络。

x[k]实际上就是倒谱Cepstrum(这个是一个新造出来的词,把频谱的单词spectrum的前面四个字母顺序倒过来就是倒谱的单词了)。而我们所关心的h[k]就是倒谱的低频部分。h[k]描述了频谱的包络,它在语音识别中被广泛用于描述特征。

那现在总结下倒谱分析,它实际上是这样一个过程:

语音–>FFT–>log–>IFFT–>倒谱
在FFT与IFFT之间加了一个取log而已

1)将原语音信号经过傅里叶变换得到频谱:X[k]=H[k]E[k];
只考虑幅度就是:|X[k] |=|H[k]||E[k] |;
2)我们在两边取对数:log||X[k] ||= log ||H[k] ||+ log ||E[k] ||。
3)再在两边取逆傅里叶变换得到:x[k]=h[k]+e[k]。

这实际上有个专业的名字叫做同态信号处理。它的目的是将非线性问题转化为线性问题的处理方法。对应上面,原来的语音信号实际上是一个卷性信号(声道相当于一个线性时不变系统,声音的产生可以理解为一个激励通过这个系统),第一步通过卷积将其变成了乘性信号(时域的卷积相当于频域的乘积)。第二步通过取对数将乘性信号转化为加性信号,第三步进行逆变换,使其恢复为卷性信号。这时候,虽然前后均是时域序列,但它们所处的离散时域显然不同,所以后者称为倒谱频域。

注:

  1. 倒谱中的横轴与时间t类似,而又不是真正的时间,也可以叫做它伪频率
  2. 声音的产生可以理解为声门声道的线性卷积
  3. 语音信号的倒谱经过低倒谱窗,获得声道响应信号,可分析得到共振峰参数;
    语音信号的频谱高倒谱窗,经过声门激励信号,可分析得到基音参数

3.MEL频率

通过对人耳听力的研究发现,人耳对低频的声音更为敏感,对高频的声音相对不敏感。
比如说,对于一个500hz的声音和1000hz的声音相比,人的听力系统并不会感觉到后者的音调就是前者的两倍,实际的听力感觉是不到两倍。

而Mel频率分析就是基于人类听觉感知实验的。实验观测发现人耳就像一个滤波器组一样,它只关注某些特定的频率分量(人的听觉对频率是有选择性的)。也就说,它只让某些频率的信号通过,而压根就直接无视它不想感知的某些频率信号。但是这些滤波器在频率坐标轴上却不是统一分布的,在低频区域有很多的滤波器,他们分布比较密集,但在高频区域,滤波器的数目就变得比较少,分布很稀疏。

所谓的mel频率,就是根据人的听力,将线性的频率进行一个变换,使得在mel频率域中,“1000hz”听起来就是"500hz"的两倍音调一样

将普通频率转化到Mel频率的公式是: m e l ( f ) = 2595 × l o g 10 ( 1 + f 700 ) mel(f)=2595\times log_{10}(1+\frac{f}{700}) mel(f)=2595×log10(1+700f)

由下图可以看到,它可以将不统一的频率转化为统一的频率,也就是统一的滤波器组。

倒谱分析与MFCC_第10张图片
注意mel频率的单位是mel,是一种“伪频率”

4.MFCC与FBANK

总结下提取MFCC特征的过程:(具体的数学过程网上太多了,这里就不想贴了)
1)先对语音进行预加重、分帧和加窗;
2)对每一个短时分析窗,通过FFT得到对应的频谱;
3)将上面的频谱通过Mel滤波器组得到Mel频谱;
4)在Mel频谱上面进行倒谱分析(取对数,做逆变换,实际逆变换一般是通过DCT离散余弦变换来实现,取DCT后的第2个到第13个系数作为MFCC系数),获得Mel频率倒谱系数MFCC,这个MFCC就是这帧语音的特征;

倒谱分析与MFCC_第11张图片

下面是一个更完整的图,前面增加了AD转换(采样与量化),后面增加了求两阶差分,暂时可以不管这两步。倒谱分析与MFCC_第12张图片
对语音信号提取MFCC特征的过程包括–高频预加重,加哈明窗分帧,DFT变换并平方获得能量谱,通过20个MEL滤波器组,对数运算,DCT变换获得倒谱特征,再加上一阶和二阶动态特征

在MEL滤波后,得到的便是FBANK参数

倒谱分析与MFCC_第13张图片

5.FBank

Filter bank和MFCC的计算步骤基本一致,只是没有做IDFT而已(但是包括了求对数)
这里有一篇好例子实例

FBank与MFCC对比:

1.计算量:MFCC是在FBank的基础上进行的,所以MFCC的计算量更大

2.特征区分度:FBank特征相关性较高(相邻滤波器组有重叠),MFCC具有更好的判别度,这也是在大多数语音识别论文中用的是MFCC,而不是FBank的原因

3.使用对角协方差矩阵的GMM由于忽略了不同特征维度的相关性,MFCC更适合用来做特征。

4.DNN/CNN可以更好的利用这些相关性,使用fbank特征可以更多地降低WER。

MFCC与基本倒谱分析的对比

mfcc是一个倒谱参数,它与倒谱分析有相似之处,区别在于
1.多了预加重(使得高频部分变得相对更平坦)
倒谱分析与MFCC_第14张图片
2.FFT后取绝对值或者平方(模取平方平方对应着能量谱)
3.进行了mel滤波,也就是进行了一个频率的非线性变换,参考前面所述的公式
4.IFFT换成了DCT
5.它得到的是一个12维的向量,代表了声音的特征。实际上因为取得是12维,因此更多地包含了语义(共振峰)参数,利用这个向量,我们就可以进行很多东西了

在实际中使用的语音特征,往往是各种特征的组合。比如,常用的39维MFCC特征,其组成如下:

12 MFCC feature
1 energy feature
12 delta MFCC features
12 double-delta MFCC features
1 delta energy feature
1 double-delta energy feature

MFCC的作用如下(上课PPT)
倒谱分析与MFCC_第15张图片

上面那个完整图的最后,增加了两个求差分的操作。实验证明,这两个求差分使得MFCC模型的适应性更强了,下面是从上课PPT中截图出来的完整的优点介绍

倒谱分析与MFCC_第16张图片

你可能感兴趣的:(语音处理)