• 语音与深度学习(一):python特征提取


    准备工作

    首先需要在pycharm中安装好python_speech_features和librosa两个包。
    建议先安装anaconda,然后在anaconda中创建一个虚拟环境,用于安装Pycharm的所有需要的包,然后再在pycharm中导入在anaconda中创建的虚拟环境即可。(同时使用conda命令安装pycharm包比使用pip命令安装成功率更高)。这样可以在任意一台电脑上在pycharm中导入这个虚拟环境都可以随时调用之前安装的包,而不用再去安装pycharm中繁琐的包了。

    python_speech_features安装方法

    librosa安装方法

    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维
  • 相关阅读:
    javascript 详解数组
    javascript ES5 Object对象
    JavaScript的检测属性、属性特性、枚举属性
    javascript之值传递与引用传递
    数据分析--数据可视化
    Mysql基础知识
    Excel-数据透视表
    如何做一份好的分析报告?
    面对问题,如何去分析?(流失问题)
    面对问题,如何去分析?(日报问题)
  • 原文地址:https://www.cnblogs.com/zhangxianrong/p/15924424.html
Copyright © 2020-2023  润新知