- 预加重:预加重实质就是将语音信号通过一个高通滤波器,他的目的是提升高频部分,使信号的频谱变得平坦,保持再地频道高频的整个频带中,能用同样的信噪比求频谱,同时也消除发声过程中声带和嘴唇的效应,补偿高频部分。
- 分帧:先将N个采样点集合成一个观测单位,称为帧。通常N为256或者512。为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域,此重叠区域包含了M个取样点,通常M的值约为N的1/2或1/3。计算:通常语音识别所采用语音信号的采样频率为8KHz或16KHz,以8KHz来说,若帧长度为256个采样点,则对应的时间长度是256/8000 1000=32ms。
- 加窗:将每一帧乘以汉明窗,以增加帧左端和右端的连续性。在之前的分帧过程中,直接将一个连续的语音信号切分为若干个片段,会造成截断效应产生的频谱泄漏,加窗操作的目的是消除每个帧的短时信号在其两端边缘处出现的信号不连续性问题。需要注意的是,预加重必须在加窗之前进行。
- 快速傅里叶变换:由于信号在时域上的变换通常很难看出信号的特性,所以通常将它转换为频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。所以在乘上汉明窗后,每帧还必须再经过快速傅里叶变换以得到在频谱上的能量分布。
- 三角带通滤波器:将能量谱通过一组Mel尺度的三角形滤波器组。目的:对频谱进行平滑化,消除谐波的作用,突显原来语音的共振峰(因此一段语音的音调或音高,是不会呈现在MFCC 参数内,换句话说,以MFCC 为特征的语音辨识系统,并不会受到输入语音的音调不同而有所影响)。此外可以降低运算量。
- 对数运算:由于人耳对声音的感受是成对数值增长的,所以需要将数值再进行一次对数运算,以模拟人耳的感受。我们需要对纵轴通过取对数进行缩放,可以放大低能量处的能量差异。
- 离散余弦变换(DCT):做DCT的根本原因是,不同阶数信号值之间具有一定的相关性,而我们需要去掉这种相关性,将信号再映射到低维的空间中。由于最有效的特征聚集在前12个特征里,所以在实际中,一般仅保留前12-20个结果值,通常取13个,这样一来,就进一步压缩了数据。
mfcc_data=librosa.feature.mfcc(y=y, sr=sr,S=None, n_mfcc=20, dct_type=2, norm='ortho',n_fft=N_FFT,hop_length=int(N_FFT/4))
y:语音数据
sr:y的采样率
n_mfcc:要返回的MFCC数量
n_fft:返回的mfcc数据维数,默认为13维
hop_length:帧移
S:np.ndarray,对数功能梅尔谱图
dct_type:None, or {1, 2, 3} 离散余弦变换(DCT)类型。默认情况下,使用DCT类型2。
norm: None or ‘ortho’ 规范。如果dct_type为2或3,则设置norm =’ortho’使用正交DCT基础。 标准化不支持dct_type = 1。