Advertisement

MFCC语音信号特征提取——主要知识点总结

阅读量:

MFCCs(Mel Frequency Cepstral Coefficents) 是一种常用语语音识别,说话人识别的特征提取方法。

一、提取特征的主要过程:

  1. 对语音进行预加重、分帧和加窗
  2. 对每一个 短时分析窗通过FFT 得到对应的 频谱
  3. 将上面的频谱通过 Mel滤波器组 得到 Mel频谱
  4. 在Mel 频谱上面进行倒谱分析 ,获得 MFCC 【Mel频率倒谱系数】,这个MFCC就是这帧语音的特征;
    MFCC流程

1、预加重

对输入的语音信号进行高频部分的提升,使信号的频谱变得平坦,保持在低频到高频的整个频带重,能用同样的信噪比求频谱。此外,对发声过程中声带和嘴唇产生的影响进行消除。

2、分帧

帧时:(frame duration) 将N个采样点集合成一个观测单元,称为帧。
通常,设定N=256或者512;时间为20~30ms;
一般人说话的声音在10ms-30ms的时间段内被认为是短时平稳的,所以一般取10~25时间作为帧时;
帧移:(frame shift) 为了避免相邻两帧的变化过大,两个帧之间有一段重叠的区域,包含M个采样点。表示取下一帧时窗移动的距离(毫秒级)。
通常,设定M=1/2 N或者M=1/3 N;
通常,语音识别语音识别的采样频率为8KHZ 或16KHZ,如果帧的长度为256个采样点,那么对应的帧移时间长度 为256/8000 *1000 = 32ms;

通常,帧时取25ms或者20ms.帧移取10ms.
在这里插入图片描述

3、预加重系数(preemphasis coefficient)

相当于高通滤波器。
通常,取0.95-0.97.

复制代码
    speech = filter([1-alpha], 1, speech);

alpha 就是预加重系数,speech还是原来得到的语音信号。

4、加窗(Hamming Window) ——w(n)

将每一帧乘上汉明窗,增加帧左端和右端的连续性。
假设,分帧之后的信号为S(n),n=0,1,...,N-1W(n)的形式如下:
在这里插入图片描述
不同的a的值会产生不同的汉明窗;
通常,a = 0.46;
获取某个函数的详细说明

复制代码
    help hamming

matlab画图:

复制代码
    plot(hamming(256))

在这里插入图片描述
频率范围(frequency range): 一般使用300Hz - 3400Hz(电话语音),或者取采样频率的一半,fs/2;
Mel滤波器(filterbank channels): 个数一般取20-26个;
倒谱系数(cepstral coefficients): 个数因具体情况而异,可以取12个,16个和19个; 不同的倒谱系数对语音识别或者说话人识别的性能具有不同程度的影响。
提升参数(liftering parameter):主要是为了让不同的倒谱系数拥有不同过的权重。【因为倒谱系数影响性能,所以需要不同的权重】

4、快速傅里叶变换(FFT)

加窗后乘FFT
将时域上的变换转换为频域上的能量变换。【因为时域上很难看出信号的特征】
不同的能量分布,代表不同的语音特征。所以乘上汉明窗后,每帧还必须通过FFT得到频谱上的能量分布。
具体方式,对分帧加窗后的 每帧信号 进行FFT 得到 各帧的频谱 。并对语音信号的频谱 取模平方 得到语音信号的 功率谱

FFT变换

取模平方

加窗后的帧

每帧的频谱

功率谱

DFT:离散余弦傅里叶变换
在这里插入图片描述
x(n) 表示输入的语音信号,N表示傅里叶变换的点数。

代码实现(MATLAB)

1、获取振幅,采样频率(fs)

复制代码
    // A code block
    [x fs]=wavread('000.wav');

全部评论 (0)

还没有任何评论哟~