- 滤波器与MFCC
- 梅尔音阶
- 步骤
- 计算梅尔滤波器组
- 微分系数和加速度系数
python_speech_features
滤波器与MFCC
- 任何自动语音识别系统的第一步都是提取特征。
- 梅尔频率倒谱系数(MFCC)是广泛用于自动语音和说话者识别的功能。
- 将信号分成短帧。
- 假设音频信号在短时间范围内变化不大(当我们说它不变时,我们指的是统计上的,即统计上是平稳的,显然样本在不断变化。即使是短时间尺度)。这就是为什么我们将信号分成20–40ms帧的原因。
- 对于每个帧,计算功率谱的周期图估计。
- 将梅尔滤波器组应用于功率谱,对每个滤波器的能量求和。
- 梅尔滤波器组:第一个滤波器非常窄,可以指示0赫兹附近存在多少能量。随着频率的升高,我们对滤波器的关注也越来越小,滤波器也变得越来越宽。
- 取所有滤波器组能量的对数。
- 有了滤波器组能量,我们就可以取它们的对数。这也是由人类听力引起的:我们听不到线性范围的响度。通常,要将声音的感知音量加倍,我们需要将8倍的能量投入其中。为什么是对数而不是立方根?对数允许我们使用倒谱均值减法,这是一种通道归一化技术。
- 取对数滤波器组能量的DCT。
- 这样做有两个主要原因。因为我们的滤波器组都是重叠的,所以滤波器组的能量彼此非常相关。DCT对能量进行去相关,这意味着对角协方差矩阵可用于对HMM分类器中的特征进行建模。但是请注意,仅保留了26个DCT系数中的12个。这是因为较高的DCT系数表示滤波器组能量的快速变化,并且事实证明这些快速变化实际上会降低ASR性能,因此通过降低它们可以得到很小的改进。
- 保持DCT系数2–13,其余部分丢弃。
梅尔音阶
- 梅尔音阶将纯音的感知频率或音高与其实际测量的频率相关联。
- ZgY9P2yneCG47ou
步骤
- 从语音信号开始,假设以16kHz采样。
- t8DXNZOm6P73KlG
- 3.计算梅尔间隔的滤波器组。这是一组20–40(26个标准)三角形滤波器,我们将其应用于步骤2的周期图功率谱估计。我们的滤波器组以26个长度为257的向量的形式出现(假定步骤2中的FFT设置)。每个向量大多为零,但在频谱的特定部分非零。为了计算滤波器组的能量,我们将每个滤波器组乘以功率谱,然后将系数相加。完成此操作后,我们剩下26个数字,这些数字可以指示每个滤波器组中的能量。
- 4.取第3步中26个能量的对数。这使我们剩下26个log滤波器组能量。
- 5.对26个对数滤波器组能量进行离散余弦变换(DCT),得到26个倒谱系数。对于ASR,仅保留26个系数中较低的12–13。产生的特征(每帧12个数字)称为“梅尔频率倒谱系数”。
计算梅尔滤波器组
微分系数和加速度系数
- MFCC特征向量仅描述单个帧的功率谱包络,但似乎语音也将具有动态信息,即MFCC系数随时间变化的轨迹是什么。事实证明,计算MFCC轨迹并将其附加到原始特征向量后,ASR性能会提高很多(如果我们有12个MFCC系数,我们还将获得12个delta系数,这些系数将组合起来得出长度为24的特征向量)。
- wibaxU2AFBMtV4m
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,:])
参考:https://github.com/jameslyons/python_speech_features