音频特征建模:音频特征提取
Pythonspeechfeatures库用于提取语音特征,特别是梅尔频率倒谱系数(MFCC)。其核心步骤包括:将信号分成短帧,计算功率谱,应用梅尔滤波器组,取对数并进行DCT变换,保留低频系数以增强性能。此外,计算微分系数和加速度系数可进一步提升语音识别性能。代码示例展示了如何使用mfcc、delta和logfbank函数提取特征。
文章目录
梅尔频谱特征(Mel-Frequency Cepstral Coefficients, MFCCs)
滤波器与梅尔频谱系数(MFCCs)
梅尔音阶滤波器
步骤如下
计算梅尔滤波器组的频率响应
一阶和二阶微分系数
python_speech_features
滤波器与MFCC
所有自动语音识别系统的第一步都是提取特征。梅尔频率倒谱系数(MFCC)是一种在自动语音识别和说话者识别中广泛应用的功能。将信号划分为短时帧。假设音频信号在短时间内呈现相对稳定的状态(当我们说信号不变时,实际上是指其统计特性保持平稳,尽管样本在不断变化。即使是短时间尺度)。这正是我们将信号分割成20-40毫秒帧的原因。
对每个帧而言,我们计算其功率谱的周期图估计。通过将梅尔滤波器组应用于功率谱,我们对每个滤波器的能量进行求和。梅尔滤波器组由多个滤波器组成,其中第一个滤波器非常狭窄,能够精确检测0赫兹附近的能量水平。随着频率的增加,滤波器的注意力逐渐减弱,滤波器的宽度也随之扩大。
- 计算所有滤波器组能量的对数值。
- 我们就可以计算它们的对数值。这也是由人类听觉特性所引起的:我们听不到声音强度的线性范围。具体来说,为了使声音的感知音量翻倍,我们需要将能量增加到8倍。那么,为什么选择对数而不是立方根呢?对数运算具有显著的优势:它使得倒谱均值减法成为可能,这是一种在频谱通道中进行归一化的有效技术。
对数滤波器组能量的DCT运算。其原因有两个:其一,滤波器组的重叠性导致能量高度相关。DCT运算用于去相关能量,这使得对角协方差矩阵成为建模HMM分类器特征的有效工具。需要注意的是,仅保留了26个DCT系数中的12个,以减少计算量。这是因为较高的DCT系数表示滤波器组能量的快速变化,而事实证明这些快速变化会降低ASR性能,因此通过减少这些系数可以得到微小的性能提升。
* 保持DCT系数2-13,其余部分丢弃。
梅尔音阶
- 梅尔音阶将纯音的感知频率或音高与其实际测量的频率相关联。

步骤
- 从语音信号开始,假设以16kHz采样。

梅尔间隔的滤波器组由20至40个(共26个)三角形滤波器构成,用于步骤2中计算周期图功率谱的估计。这些滤波器组以26个长度为257的向量形式呈现(假设步骤2中的FFT设置)。每个向量在大部分位置为零,仅在频谱的特定区域具有非零值。为了计算滤波器组的能量,我们将每个滤波器组与功率谱相乘,然后将结果的系数相加。完成此操作后,我们得到26个数字,这些数字可以表示每个滤波器组中的能量。

- 4.计算第3步中26个能量的对数值,从而得到26个log滤波器组能量。
- 5.对26个对数滤波器组能量执行离散余弦变换(DCT),得到26个倒谱系数。对于ASR任务,我们仅保留较低的12-13个系数。这些特征,每帧包含12个数字,被称为梅尔频率倒谱系数(MFCC)。
计算梅尔滤波器组


微分系数和加速度系数
MFCC特征向量主要表征单个帧的功率谱包络信息,然而,值得注意的是,语音信号也具有动态特性,具体表现为MFCC系数随时间的变化轨迹。研究表明,计算MFCC系数的时间序列特征并将其补充到原始MFCC特征向量中,显著提升了语音识别系统的性能。具体而言,若采用12个MFCC系数,系统将同时计算12个delta系数,这些辅助特征将与原始MFCC系数结合,形成一个长度为24的扩展特征向量。

from python_speech_features import mfcc
from python_speech_features import delta
from python_speech_features import logfbank
import scipy.io.wavfile as wav
(rate,sig) = wav.read("english.wav")
mfcc_feat = mfcc(sig,rate)
d_mfcc_feat = delta(mfcc_feat, 2)
fbank_feat = logfbank(sig,rate)
print(fbank_feat[1:3,:])
