语音识别的第一步就是语音特征提取,语音信号是在人体中肺、喉、声道等器官构成的语音产生系统中产生的,它是一个高度不平稳的信号,它的幅度谱和功率谱也随着时间不停的变化,但是在足够短的时间内,其频谱特征相当平稳,因此在进行语音分析时,我们多采用分帧的方式进行短时分析,查看多篇文章中,使用帧长为25ms,帧移为10ms的方式进行分帧,并且计算出每帧内的功率谱进行其他的操作。功率谱在一些特征提取技术中得到应用,比如MFCC、Fbank,查询多篇文章,了解了几种被广泛应用个的特征提取技术,他们的特性不同也就决定了他们有着不同的应用范围,因此,对下面这几款常用的方法都进行基本的理解。
1、短时能量
2、短时过零率
3、Fbank
4、MFCC
5、LPC
6、LPCC
7、LSF
8、DWT
9、PLP
10、CQT
上述方法中的短时能量和短时过零率已在之前的代码中简单实现过,因此暂不再深入探究,后续遇到实际问题时再行优化。对于Fbank和MFCC这两种方式,放到一起进行总结,因为MFCC=MFCC+DCT。
Fbank:Filter Bank,也就是指使用梅尔滤波器组。
MFCC:Mel-Frequency cepstral cofficients,梅尔频率倒谱系数。
DCT:Discrete Cosine Transform,离散余弦变换。
MFCC的实现过程如下:
观察整个实现过程,有几个名词是之前未遇到的:预加重,Mel滤波器、DCT。下面先作简单介绍,再进行整个过程的分析。
(1)预加重:语音信号从人体的语音产生系统中传输时,声道相当于滤波器,导致最后输出的语音频谱高频衰减很大,此时我们采用预加重的方式对高频部分进行补偿,使得全频段的频谱变得平坦,这一操作也能够突出高频共振峰,实现方法是通过一个高通滤波器,传输函数如下:
其中,a为预加重系数,可取0.97.
(2)Mel:梅尔刻度,是一种非线性分布的刻度,1KHZ对应的mel坐标点之前线性分布,之后对数分布,因此随着频率增大,间距增大。这种刻度对应的频率为梅尔频率,这种刻度的存在的原因是它的这种非线性特性符合人耳的听觉特性。
梅尔频率与频率之间转换如下:
梅尔滤波器组的传输特性如下:(7个mel滤波器构成的滤波器组)
(3)DCT:离散余弦变化,DCT就是为了获得倒谱,倒谱的低频分量就是包络,高频分量就是细节,获得这1个倒谱系数后,也就是提取了声道特征,输入到机器就可以识别语音内容,这13个系数到底是什么意思,不需要深究。
倒谱分析是语音处理领域中常用的一种分析方法,因为它能够以有限的特征来完美表征语音波形和特征。
MFCC的信号处理流程可解释如下:
由声道输出的连续时域信号经过预加重后,调整高频部分,使整个频段平坦化。之后分帧后加窗,其中分帧也可以在预加重之前完成,窗函数我们选择汉明窗,因为相对于矩形窗,汉明窗降低了FFT后旁瓣大小以及频谱泄露。而后进行FFT将时域信号转换到频域进行后续的频率分析,多采用功率谱。FFT后的功率谱与滤波器相乘后为每帧能量,到此时Fbank特征提取的方法完成。若继续面的取log和DCT步骤,提取出13个倒谱系数,则完成MFCC的特征提取。能量值取log就是将频域卷积转变为线性相加,也就是进行包络(低频信息)和细节(高频信息)的分离,为后续进行倒谱分析做准备。通过DCT进行解卷积得到一系列倒谱系数,但是此时得到的是语音的静态特性,最后使用差分谱来描述语音的动态特性。
主要的代码实现:后续再添加。