Mel Frequency Cepstral Coefficients (MFCCs)

wiki里说
在声音处理中,梅尔频率倒谱( MFC ) 是声音的短期功率谱的表示,基于非线性梅尔频率标度上的对数功率谱的线性余弦变换。
倒谱和MFC 之间的区别在于,在 MFC 中,频带在梅尔尺度上等距分布,这比正常频谱中使用的线性间隔频带更接近人类听觉系统的响应。这种频率扭曲可以更好地表示声音,例如,在可能会降低传输带宽的音频压缩中以及音频信号的存储要求。
梅尔频率倒谱系数( MFCC ) 是共同构成 MFC 的系数。它们源自音频剪辑的一种倒谱表示。

信号的梅尔频率倒谱系数 (MFCC) 是一小组特征(通常为 10-20),它们简明地描述了 spectral envelope 的​​整体形状。在MIR中,它常被用来描述音色。在应用 Hamming window、 Mel-filterbank、log conversion和离散傅里叶变换 (DCT) 之后,我们通常会得到大小为 12 的特征向量 x i。通常情况下,第零倒谱系数被排除在外即使用1-13个倒谱系数,需要将原始能量的度量添加到特征向量中。
本文参考了Gender identification of a speaker using MFCC and GMM论文中描述的MFCC把语音转换为参数方法
将一个语音信号转换为MFCC要以下几个步骤

在这里插入图片描述

  1. 预加重滤波器 pre-emphasis filter 滤波

让采样后的信号通过一个滤波器,并调整高低频率的强度。浊音区域的频谱通过预加重进行补偿,预加重会放大高频区域并执行滤波。简单描述实现就是:
在这里插入图片描述
α是滤波器的系数,常为0.95-0.97
但是这是很多年前因为有限的计算资源迫使开发人员创建的方法。
对于信号消歧而言,较高的频率比较低的频率更为重要。
在古早的时间里,应用模拟预加重滤波器会更容易获得好结果,因此大家都用了预加重。
预加重的另一个好特性是它有助于处理录音中经常出现的 DC offset 直流偏移,因此它可以改进基于能量的语音活动检测。
而现代语音识别不需要预加重。预加重在后期通过 channel normalization(如倒谱均值归一化)进行补偿,因此可能没有影响。

预加重的好处:

  • 平衡频谱
  • 避免 Fourier transform 操作期间的数值问题
  • 改善信号噪声比 Signal-to-Noise Ratio (SNR)
  1. framing , 汉明窗Hamming window处理

与所有语音分析方法一样,MFCC 方法也适用于语音具有固定声学特征的短部分。即进行分帧framing,一帧有N个采样点,分帧主要是为了简化处理,假设在短时间范围内音频信号变化不大。如果帧很短,就没有足够的样本来获得可靠的频谱估计,如果帧很长,则信号在整个帧中变化太大,因此通常选择的参数为 20-30 毫秒,沿信号偏移 10-15 毫秒。
在大多数情况下,对整个信号进行傅里叶变换没有意义,因为会随着时间的推移丢失信号的频率轮廓(时序信息?)。通过对这个短时间帧进行傅立叶变换,我们可以通过连接相邻帧来获得信号频率轮廓的良好近似(这句话没怎么理解这个良好近似)。每一帧都包含其前一帧的一部分。
语音处理中的典型帧大小范围为 20 到 40 毫秒,连续帧之间有 50% (+/-10%) 的重叠。
通常的设置是:
帧大小为 25 ms,frame_size = 0.025 和 10 ms stride(15ms overlap ),frame_stride = 0.01。
在语音应用中,汉明窗通常是首选。应用汉明窗是这里说可以减少频谱泄露,同时能够平滑信号的边缘,并在对信号进行 DFT 时减少边缘效应,其公式为:
在这里插入图片描述
可以用np.hamming
在这里插入图片描述

  1. 频率频谱图

功率谱是由人类耳蜗启发的,它根据传入声音的频率在不同的位置振动。根据振动的耳蜗位置,不同的神经会发出信号,通知大脑存在某些频率。周期频谱图估计执行类似的操作,用来识别帧中存在哪些频率。
语音信号被划分成分析窗口,通过FFT从时域变换到频域。这种表示语音信号频率分布的符号称为幅度谱。
amplitude spectrum / magnitude spectrum
我们现在可以做一个 N- 对每一帧进行点FFT计算频谱,也称为短时傅立叶变换(STFT),其中 N通常为 256 或 512,NFFT = 512;然后使用以下公式计算功率谱
在这里插入图片描述
也就是对每一帧进行FFT变换,这是为了padding

  1. Mel-Frequency Warping

为了将获得的振幅谱转换为 mel-scale,使用相对于 mel-scale 线性放置的滤波器组。该组由重叠 50% 的三角形带通滤波器组成。一般滤波系数取值在20~30之间。

  1. 创建mel filter bank

mel filter的公式:
在这里插入图片描述
滤波组的公式:

band filter频带分析以模拟耳朵的掩蔽效应以及非线性频率和带宽分配,使用 DFT 计算每个频带中的能量
在这里插入图片描述

关于mel scale:mel scale将纯音的感知频率或音调与其实际测量频率相关联。与高频相比,人类更善于辨别低频音高的微小变化。结合这个尺度使音频的特征更接近人类听到的。

先把hz转成mel单位

def freq2mel(freq):
	"""Convert Frequency in Hertz to Mels

	Args:
		freq: A value in Hertz. This can also be a numpy array.

	Returns
		A value in Mels.
	"""
	return 2595 * np.log10(1 + freq / 700.0)

再转回去

def mel2freq(mel):
	"""Convert a value in Mels to Hertz

	Args:
		mel: A value in Mels. This can also be a numpy array.

	Returns
		A value in Hertz.
	"""
	return 700 * (10 ** (mel / 2595.0) - 1)
  1. 计算log mel spectrum

计算滤波器组和频率频谱图的内积,对每个滤波器中的能量求和,再进行log计算。
一旦算出了滤波器组的能量,就取它们的对数。这也是受人类听觉的启发,人类听不到线性尺度的响度。通常要将声音的感知音量加倍,需要投入将近 8 倍的能量。这意味着如果声音一开始就很大,那么能量的巨大变化听起来可能并没有什么不同。这种压缩操作使滤波器组的特征更接近于人类实际听到的声音。
为什么用对数而不是立方根?对数允许使用倒谱均值减法,这是一种通道归一化技术

有点不懂的是他算的公式是20 * np.log10(fbank),有点不太清楚这个公式是哪里来的。感觉用librosa库的会多一些

  1. 离散余弦变换 (DCT)的 liftering

滤波器组都是重叠的,DCT 对频谱系数去相关,并允许使用对角高斯分布对它们进行建模,同时表示语音帧所需的参数数量减少了。这反过来又减少了内存和计算需求。26 个 DCT 系数中只保留了 12 个是因为较高的 DCT 系数表示滤波器组能量的快速变化,但这些快速变化实际上会降低 ASR 性能,因此通过舍弃这些DCT系数让性能小幅增加。DCT 的一个特性是去相关并将大部分信息保留在前几个系数中。

主要作用是对滤波器组进行去相关操作,舍弃除了自己设定的num_ceps以外的值,这些值代表滤波器组系数的快速变化,而这些细节对自动语音识别 (ASR) 没有什么帮助,然后将lift与mfcc相乘计算外积,以弱化较高的 MFCC,据称可以改善噪声信号中的语音识别

cep_lifter 是 Cepstral liftering order
num_ceps 是 number of cepstral coefficients (C1-C12, omitting C0)

lift = 1 + (cep_lifter / 2.0) * np.sin(np.pi * np.arange(num_ceps) / cep_lifter)
mfcc = dct(fbank,norm=‘ortho’)[1:num_ceps+1]
mfcc *= lift

通常在自动语音识别的时候,并不关心信号的音调信息(声带),更感兴趣的是与音素相关的信息或由于产生声音的声道形状而产生的信息。音高值通常有一个低周期,当移动到倒谱域(使用 DCT 或 IDFT)时,会在mid到end范围。这就是为什么大多数只选择前 12 或 13 个 MFCC,而不包括音高信息的原因。

如果正在构建一个音调信息很重要的系统,应该增加 MFCC 的数量(人声识别)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值