Advertisement

音频特征建模:音频特征提取

阅读量:

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,其余部分丢弃。

梅尔音阶

  • 梅尔音阶将纯音的感知频率或音高与其实际测量的频率相关联。
ZgY9P2yneCG47ou

步骤

  • 从语音信号开始,假设以16kHz采样。
t8DXNZOm6P73KlG

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

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

计算梅尔滤波器组

upj1shJYZNqmeSl
gDAzCMxcihj81tN

微分系数和加速度系数

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

全部评论 (0)

还没有任何评论哟~