数据集和代码均已上传到Github中,欢迎大家下载使用。
Github地址:https://github.com/JasonZhang156/Sound-Recognition-Tutorial
如果这个教程对您有所帮助,请不吝贡献您的小星星Q^Q.
特征提取
对于音频特征,相信稍微了解一点的童鞋们都知道有个东西叫MFCC。MFCC全称为Mel Frequency Cepstrum Coefficient,即梅尔频率倒谱系数。 对于声音信号处理领域,MFCC非常重要,几乎在所有声音识别的领域都有应用,包括语音识别、声纹识别、声音场景识别等等。 首先我们先看一下MFCC特征的提取流程:
对上图进行说明:
1)FFT变换的作用是提取声音频谱信息,即将声音的时域序列转换到频域表示,这里得到的是一个复数二维数组,横轴表示时间轴,每个点代表一帧,纵轴表示频率轴;
2)第二步如果取绝对值得到的是幅度谱,取平方值得到的是功率谱,一般是取平方值效果好些;
3)Mel滤波的作用是将声音转换到Mel域表示,使其更加符合人耳听觉特性,这步是对频率轴进行操作,和时间轴无关;
4)取对数增强声音的低频表示,因为声音的很多特性是隐藏在低频信息中的,同时在做DCT变换的时候可以把频谱的包络和细节区分开(这里听不懂没关系Q^Q);
5)DCT变换实际上是做了Fourier的逆变换,这里是通过离散余弦变换来实现,做完DCT后会得到一些系数向量,我们称之为倒谱系数;
6)为了得到更加丰富的信息,我们沿时间轴做一阶偏微分,得到delta信息,做两次偏微分就得到delta-delta信息。
这部分主要使用librosa库的特征提取函数,对原始音频提取MFCC特征。实际上,librosa已经帮我们集成好了上述步骤,不需要我们一步步来写代码:
import numpy as np
import librosa
import random
def extract_mfcc(y, sr, size=3):
"""
extract MFCC feature
:param y: np.ndarray [shape=