Abstract:本文意在讲解语音识别的方法,主要包括语音特征提取(Mel频率倒谱系数的提取),softmax分类器进行四分类,数据库为京剧。

1.Mel频率倒谱系数的提取

人的听觉系统可以看成一组滤波器族,可以通过这些滤波器得到不同频率的声音,不同的滤波器对不同频率的信号的灵敏程度不一样,Mel频率倒谱系数(MFCC)是一种充分利用人耳感知特性的参数。MFCC和线性频率之间的转换关系如下:

MFCC参数提取如图1所示。该过程分为预加重,分帧,加窗函数,FFT运算,Mel频率滤波器组滤波,取对数能量,DCT求倒谱。

fmel(f)=2595⋅log(1+f700Hz)


GEC6818语音识别_方法



图一MFCC特征提取


下面来看一段语音信号:


GEC6818语音识别_语音信号_02

1.1 预加重

预加重是将语音信号s(n)通过一格高通滤波器。此高通滤波器的z域如下面的形式:

H(z)=1−a×(z−1)


系数其中 a介于 0.9 和 1.0 之间。若以时域的表达式来表示,预强调后的讯号s2(n) 为:

s2(n)=s(n)−a×s(n−1)


这个是为了补偿语音受到发声系统所压抑的高频部分,使高频信号突显出来。

temp=double(signal);
x=filter([1 -0.9],1,temp);

可以得到下面经过高通滤波器后的语音信号。

GEC6818语音识别_语音识别_03


图2通过高通滤波器的语音信号


图3为原始语音信号的频谱和经过高通滤波器的语音信号的频谱。


GEC6818语音识别_方法_04



图3频谱图

1.2 分帧

分帧是把一段语音信号分成n帧来处理,每一帧可以为128,256,512,1024。比如说10240点个语音信号,256个点为一帧,那么就有40帧,但是事实上不是40帧,因为帧与帧之间有交叉重叠的区域,假设非重叠区域为80个点,那么一共就有125帧。

signal=enframe(signal,256,80);

1.3 加窗函数

窗函数的目的是为了只处理某一段信号,而屏蔽其他的信号,也叫短时信号处理。加窗函数,可以加hamming窗,hanning窗,blackman窗等窗函数,将每一帧的语音信号乘以窗函数,以增加音框左端和右端的连续性。假设一帧信号为256个点,那么窗函数也为256的点。这里我们采用的是hamming窗。那么得到的加窗语音信号为如下:

S′(n)=S(n)×W(n)


W(n)的形式如下所示:


W(n,a)=(1−a)−a×cos(2πn/(N−1)),0≤n≤N−1


不同

a得到不同窗函数。

汉明窗如图4所示:

GEC6818语音识别_语音识别_05


图4hamming窗函数


现在我只取前256个语音信号来加窗函数。

s = y' .* hamming(256);

GEC6818语音识别_语音识别_06

1.5 Mel频率滤波器组

加窗函数后信号通过FFT得到其能量后进入Mel频率滤波器组再进行Log对数能量,如下所示:


F(m)=log(Mel×X(k)2−−−−−√)

.


其中

Mel系数通过工具箱( mp3_toolbox_v2.0)求得。

bank=melbankm(24,256,44100,0,0.5,'m');
bank=full(bank);
bank=bank/max(bank(:));

1.6 DCT求倒谱

对F(m)进行离散余弦转换(DCT)变换。我们需要得到DCT的系数。DCT系数可以通过下式求得:


dct=cos((2×n+1)kπ/(2N)


其中

N为Mel滤波器的个数。

最终得到的倒谱为:

c(m)=dct×F(m)


那么

N帧信号就会得到N个倒谱。

1.7 求解差分系数

差分系数用J表示,那么:

J(n)=−2c(n−2)−c(n−1)+c(n+1)+2∗c(n+2)3


这样倒谱系数和差分系数就组成了MFCC系数。

2.Softmax分类

softmax分类器适合于多分类,这里不多讲。前面的博文已经有涉及。主要分京剧为4类,happy,angry,sad,grateful.只需要自己准备好输入数据即可。

3.GUI

GEC6818语音识别_语音识别_07


具体程序见资源。