语音与深度学习(一):python特征提取
准备工作
首先需要在pycharm中安装好python_speech_features和librosa两个包。
建议先安装anaconda,然后在anaconda中创建一个虚拟环境,用于安装Pycharm的所有需要的包,然后再在pycharm中导入在anaconda中创建的虚拟环境即可。(同时使用conda命令安装pycharm包比使用pip命令安装成功率更高)。这样可以在任意一台电脑上在pycharm中导入这个虚拟环境都可以随时调用之前安装的包,而不用再去安装pycharm中繁琐的包了。
1 使用python_speech_features进行mfcc
有两种调用方式:
1 在导入包的时候直接将mfcc,logfbank(dct之前的参数),delta(差分)导入
from python_speech_features import mfcc
接着调用:
mfcc_feature = mfcc(wavedata, framerate, winlen=0.064, winstep=0.032, nfilt=13, nfft=1024) # mfcc系数
#其中wavedata为语音数据
#framerate为采样率
#winlen为帧长,单位为秒
#winstep为帧移,单位为秒
#nfilt为返回的mfcc数据维数,默认为13维(但经过我的实验,nfilt最多也只能返回13维的mfcc参数)
#nfft为fft点数,一般要和帧长对应的采样点数要一样
2 在导入包的时候只导入包,不导入具体函数
import python_speech_features
接着在使用该包时需要导入包和具体函数,使用方法如下:
fbank参数(未进行dct和未取对数之前的参数):
fbank_features=python_speech_features.base.fbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, winfunc=<function >) #fbank参数为未进行dct和取对数之前的mfcc
#signal - 需要用来计算特征的音频信号,应该是一个N*1的数组
#samplerate - 我们用来工作的信号的采样率
#winlen - 分析窗口的长度,按秒计,默认0.025s(25ms)
#winstep - 连续窗口之间的步长,按秒计,默认0.01s(10ms)
#numcep - 倒频谱返回的数量,默认13
#nfilt - 滤波器组的滤波器数量,默认26
#nfft - FFT的大小,默认512
#lowfreq - 梅尔滤波器的最低边缘,单位赫兹,默认为0
#highfreq - 梅尔滤波器的最高边缘,单位赫兹,默认为采样率/2
#preemph - 应用预加重过滤器和预加重过滤器的系数,0表示没有过滤器,默认0.97
#ceplifter - 将升降器应用于最终的倒谱系数。 0没有升降机。默认值为22。
#appendEnergy - 如果是true,则将第0个倒谱系数替换为总帧能量的对数。
#winfunc - 分析窗口应用于每个框架。 默认情况下不应用任何窗口。 你可以在这里使用numpy窗口函数 例如:winfunc=numpy.hamming
#返回: 一个大小为numcep的numpy数组,包含着特征,每一行都包含一个特征向量。
delta(差分):
python_speech_features.base.delta(feat, N)
#feat 为mfcc数据或fbank数据
#N - N为1代表一阶差分,N为2代表二阶差分
#返回:一个大小为特征数量的numpy数组,包含有delta特征,每一行都有一个delta向量
logfbank参数(mfcc进行dct之前的参数):
logfbank_features=python_speech_features.base.logfbank(signal, samplerate=16000, winlen=0.025, winstep=0.01, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97)
#signal - 需要用来计算特征的音频信号,应该是一个N*1的数组
#samplerate - 我们用来工作的信号的采样率
#winlen - 分析窗口的长度,按秒计,默认0.025s(25ms)
#winstep - 连续窗口之间的步长,按秒计,默认0.01s(10ms)
#nfilt - 滤波器组的滤波器数量,默认26
#nfft - FFT的大小,默认512
#lowfreq - 梅尔滤波器的最低边缘,单位赫兹,默认为0
#highfreq - 梅尔滤波器的最高边缘,单位赫兹,默认为采样率/2
#preemph - 应用预加重过滤器和预加重过滤器的系数,0表示没有过滤器,默认0.97
#返回: 一个包含特征的大小为nfilt的numpy数组,每一行都有一个特征向量
参考:
使用python_speech_features提取音频文件特征
2 使用librosa包进行mfcc
librosa使用方法:
import librosa
y, sr = librosa.load('i1.wav',sr=None)
mfccs = librosa.feature.mfcc(y=y, sr=sr,n_mfcc=24) #n_mfcc为返回的mfcc数据维度
其中
librosa.feature.mfcc(y=None, sr=22050, S=None, n_mfcc=20, dct_type=2, norm='ortho', **kwargs)
参数:
#y:np.ndarray [shape=(n,)] 或 None
#音频时间序列
#sr:number > 0 [scalar]
#y的采样率
#S:np.ndarray [shape=(d, t)] or None
#对数功能梅尔谱图
#n_mfcc: int > 0 [scalar]
#要返回的MFCC数量
#dct_type:None, or {1, 2, 3}
#离散余弦变换(DCT)类型。默认情况下,使用DCT类型2。
#norm:None or ‘ortho’
#规范。如果dct_type为2或3,则设置norm =’ortho’使用正交DCT基础。
#标准化不支持dct_type = 1。
#kwargs:额外的关键参数
#参数melspectrogram,如果按时间序列输入操作
#返回: M:np.ndarray [shape=(n_mfcc, t)]
#MFCC序列
常用参数,调用方法
mfcc_features = librosa.feature.mfcc(wavedata, sr=framerate, n_fft=1024, hop_length=512, n_mfcc=13)
#其中wavedata为语音数据
#framerate为采样率
#hop_length为帧移
#n_mfcc为返回的mfcc数据维数,默认为20维