本文首先是将Speech Processing for Machine Learning: Filter banks, Mel-Frequency Cepstral Coefficients (MFCCs) and What's In-Between这篇2016年4月21号的文章翻译了一下,然后讲出一点自己的理解和注释。
机器学习的语音处理:滤波器组,梅尔频率倒谱系数(MFCC)以及两者之间的区别
语音处理在任何语音系统中都扮演着重要的角色,无论它是自动语音识别(ASR)还是说话者识别等等。 长期以来,梅尔频率倒谱系数(MFCC)是非常受欢迎的功能。 但是最近,滤波器组正变得越来越流行。 在这篇文章中,我将讨论滤波器组和MFCC,以及为什么滤波器组变得越来越流行。
计算滤波器组和MFCC涉及相同的过程,在这两种情况下,都将计算滤波器组,并通过一些额外的步骤可以获得MFCC。 简而言之,信号会通过预加重滤波器。 然后将其切成(重叠的)帧,并将窗口函数应用于每个帧; 之后,我们在每个帧上进行傅立叶变换(或更具体地说是短时傅立叶变换),并计算功率谱; 然后计算滤波器组。 为了获得MFCC,可将离散余弦变换(DCT)应用于滤波器组,以保留多个所得系数,而其余系数则被丢弃。 两种情况的最后一步是平均归一化。
建立
在本文中,我从此处使用了一个16位PCM wav文件,称为“ OSR_us_000_0010_8k.wav”,其采样频率为8000 Hz。 wav文件是干净的语音信号,包括单个语音,在其中说出一些句子,中间有一些停顿。 为简单起见,我使用了信号的前3.5秒,大致相当于wav文件中的第一句话。
我将使用Python 2.7.x,NumPy和SciPy。 这篇文章中使用的一些代码基于该存储库中可用的代码。import numpy import scipy.io.wavfile from scipy.fftpack import dct sample_rate, signal = scipy.io.wavfile.read('OSR_us_000_0010_8k.wav') # File assumed to be in the same directory signal = signal[0:int(3.5 * sample_rate)] #Keep the first 3.5 seconds ''' 显示这个图片 plt.figure(figsize=(20,5)) # 修改坐标显示 plt.xlabel("Time(s)") plt.ylabel("Amplitude") plt.plot(x , signal) plt.show() '''
原始信号在时域中具有以下形式:
强化前
第一步是对信号应用预加重滤波器,以放大高频。 预加重滤波器在几种方面很有用:(1)平衡频谱,因为与低频相比,高频通常具有较小的幅度;(2)避免在傅立叶变换操作期间出现数值问题;(3)还可改善信号 噪声比(SNR)。
可以使用以下等式中的一阶滤波器将预加重滤波器应用于信号xx:
y(t)= x(t)-αx(t-1)
可以使用以下代码轻松实现,其中滤波器系数(αα)的典型值为0.95或0.97,pre_emphasis = 0.97: