语音信号处理-梅尔倒频谱系数MFCC

一句话概括:将时域的语音变为频域的,对频域的信号进行分段滤波,得出不同频率段的占比(比如分为26段),所得到的占比系数组成的矩阵,就是梅尔倒频谱系数MFCC

作用

人之所以能够通过人声辨别说话人的身份,是因为每个人的声道不同,而这个声道就相当于收集声音的器物。我们需要提出一个数据表示方式来代表每个人特定的声道,这样,我们只需要知道某个人,这个特定的数据表示形式,就知道了这个语音讲话者的身份。这个特定的数据表示方式,就是梅尔倒频谱系数MFCC

MFCC的物理含义,简单地说可以理解为语言信号的能量在不同频率范围的分布系数占比。


核心关键词
傅里叶变换;倒谱;

  • 一、时域变频域:为了提取语音的特征,我们需要将语音的表示方式进行变换,将时域信号通过短时傅里叶变换变为频域信号。

  • 傅里叶变换FT:通过傅里叶级数分解,我们知道,对于任何一种线性曲线,我们都可以通过不同周期的正弦曲线来累加表示。如下图1。
    图1
    傅里叶变换后, 横轴为频率(赫兹)

  • 短时傅里叶变换STFT
    短时傅里叶变换是对傅里叶变换的扩展,即默认信号在极短的时间内是稳定的(一帧)
  • 通过短时傅里叶变换得到频谱图
    时域-频谱

  • 二、倒谱分析

    倒谱的定义:一种信号的傅里叶变换谱经对数运算后再进行的傅里叶反变换(IFFT)。

    • 对于一帧语音而言,不同的频率占比不同,占比最高的即为峰值,而共振峰就是携带了声音的辨识属性(就是个人身份证一样)。所以它特别重要。用它就可以识别不同的声音。
    • 我们的目标就是提取这个共振峰,但不仅仅需要提取共振峰还需要提取共振峰的变化过程,即下图的流程线(包络)。
      enter description here
    • 通过上一步,我们就可以将频谱分为两部分,一部分为峰值部分(包络),或者叫做纯净信号;另一部分为剩余部分(频谱的细节),或者叫做噪声信号。如下图。X[k] = log H[k] + log E[k]
      enter description here

流程参考博客

流程图

  • 第一步,将时域信号转为频域信号(语谱图)
    因为人耳就是对频率敏感。这一步通过短时傅里叶变换得到
    图1. 时域波形图
    图2. 语谱图

  • 第二步,进过梅尔滤波器组
    通过上图得到矩阵帧数*频率。但是,根据实验观测发现人耳就像一个滤波器组一样,它只关注某些特定的频率分量(人的听觉对频率是有选择性的)。人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的。在语音特征的提取上,人类听觉系统做得非常好,它不仅能提取出语义信息, 而且能提取出说话人的个人特征。

    即人耳对于相对低频的更加敏感,随着频率的提高,越加不敏感,所以,我们就可以通过一个变长的滤波器,来将个频率成分进行划分。
    滤波器
    分段滤波
    图3. 经过梅尔滤波器组后的频谱图

  • 第三部,取对数
    人类的发声系统发出的信号是由基音信息与声道信息卷积而成。记作”s卷积v”。经过语谱图FFT变换后,卷积变成了乘法。即”FFT(s)*FFT(v)”。取对数后,乘法变成了加法。即”Log(FFT(s))+Log(FFT(v))”,把卷积信号转换成加性信号,这就是取FFT和对数的原因。
    图4. 取对数后

  • 第四步,离散余弦变换(DCT)(变为倒谱)
    语音有基音信息(无关的)和声道信息组成,我们需要提取所要的声道信息特征。我们知道,声道信息存在于低频部分,基音信息存在于高频部分(判断语音分离的好坏往往也是看低频信息的成分)。
    频谱图中(注意是一帧FFT变换内)
    (1)基音信息在频域是快速变化的。
    (2)声道信息在频域是缓慢变化的。
    通过傅里叶反变换就可以去除快速变化的频率,一般使用的DCT代替FFT,因为DCT变换之后的值仍为实数,更方便。因此再做一次DCT可以将其分离。我们称之为”倒谱域”。因此倒谱域的低频部分刻画了声道信息,高频部分刻画了基音信息。

  • 第五步,修改一些系数

    • 因为一般而言,我们只需要低频成分,后13维属于高频成分,是不需要的,所以舍去。
    • 去掉第0维,因为第0维只是图5的均值,并不包含任何信息。或者将第一个用能量的对数来代替。

参考链接1
mfcc_ppt
代码实现参考

阅读更多

没有更多推荐了,返回首页