精华内容
下载资源
问答
  • python提取MFCC

    2018-04-02 10:16:48
    包括提取MFCC的完整步骤,测试过可直接用,分享给大家
  • python提取mfcc特征

    千次阅读 2019-03-26 16:23:14
    理论部分请看:...这是我认为最完整的、讲解最清楚的python提取mfcc特征的教程。 用到的OSR_us_000_0010_8k.wav数据在这里下载: http://www.voiptroubleshooter.com/open_speec...

    理论部分请看:https://haythamfayek.com/2016/04/21/speech-processing-for-machine-learning.html
    这是我认为最完整的、讲解最清楚的python提取mfcc特征的教程。
    用到的OSR_us_000_0010_8k.wav数据在这里下载:
    http://www.voiptroubleshooter.com/open_speech/american.html
    完整Python代码如下:

    import numpy as np
    import scipy.io.wavfile
    import matplotlib.pylab as plt
    sample_rate, signal = scipy.io.wavfile.read("OSR_us_000_0010_8k.wav")
    signal = signal[0: int(3.5*sample_rate)]
    t = np.linspace(0, 3.5, num=len(signal))
    
    pre_emphasis = 0.97
    emphasized_signal = np.append(signal[0], signal[1:] - pre_emphasis*signal[:-1])
    frame_size = 0.025
    frame_stride = 0.01
    frame_length, frame_step = frame_size*sample_rate, frame_stride*sample_rate
    signal_length = len(emphasized_signal)
    frame_length = int(round(frame_length))
    num_frames = int(np.ceil(float(np.abs(signal_length - frame_length)) / frame_step))
    pad_signal_length = num_frames * frame_step + frame_length
    z = np.zeros(int(pad_signal_length - signal_length))
    pad_signal = np.append(emphasized_signal, z)
    indices = np.tile(np.arange(0, frame_length), (num_frames, 1)) + np.tile(np.arange(0, num_frames*frame_step, frame_step), (frame_length, 1)).T
    frames = pad_signal[indices.astype(np.int32, copy=False)]
    ham = np.hamming(frame_length)
    # plt.plot(ham)
    # plt.show()
    
    frames *= ham
    
    NFFT = 512
    mag_frames = np.absolute(np.fft.rfft(frames, NFFT))
    pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2))  #(348, 257)
    
    nfilt = 40
    low_freq_mel = 0
    high_freq_mel = (2595 * np.log10(1 + (sample_rate/2) / 700))
    
    mel_points = np.linspace(low_freq_mel, high_freq_mel, nfilt + 2)
    
    hz_points = (700 * (10**(mel_points / 2595) - 1))
    
    bin = np.floor((NFFT + 1)*hz_points / sample_rate)
    fbank = np.zeros((nfilt, int(np.floor(NFFT / 2 + 1))))
    for m in range(1, nfilt + 1):
        f_m_minus = int(bin[m-1])
        f_m = int(bin[m])
        f_m_plus = int(bin[m+1])
    
        for k in range(f_m_minus, f_m):
            fbank[m-1, k] = (k-bin[m-1]) / (bin[m]-bin[m - 1])
        for k in range(f_m, f_m_plus):
            fbank[m-1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])
    
    filter_banks = np.dot(pow_frames, fbank.T)
    filter_banks = np.where(filter_banks == 0, np.finfo(float).eps, filter_banks)
    filter_banks = 20 * np.log10(filter_banks)
    
    
    plt.imshow(np.flipud(filter_banks.T), cmap=plt.cm.jet, aspect=0.2, extent=[0,filter_banks.shape[1],0,filter_banks.shape[0]],shape=[11, 9])
    plt.axis("normal")
    plt.savefig('./test2.png')
    plt.show()
    

    运行的结果如下:
    在这里插入图片描述

    展开全文
  • Python提取MFCC(批量操作)

    千次阅读 热门讨论 2019-08-08 14:36:06
    MFCC简介: Mel频率倒谱系数的缩写。Mel频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系 。Mel频率倒谱系数(MFCC)则是利用它们之间的这种关系,计算得到的Hz频谱特征,MFCC已经广泛地应用在语音识别...

    MFCC简介:

      Mel频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系 。Mel频率倒谱系数(MFCC)则是利用它们之间的这种关系,计算得到的Hz频谱特征,MFCC已经广泛地应用在声纹识别和语音识别领域。由于Mel频率与Hz频率之间非线性的对应关系,使得MFCC随着频率的提高,其计算精度随之下降。因此,在应用中常常只使用低频MFCC,而丢弃中高频MFCC,MFCC的提取主要包括以下几个步骤:

    1.预滤波:前端带宽为300-3400Hz的抗混叠滤波器。

    2.A/D变换:8kHz的采样频率,12bit的线性量化精度。

    3.预加重:通过一个一阶有限激励响应高通滤波器,使信号的频谱变得平坦,不易受到有限字长效应的影响。

    4.分帧:为了方便对语音分析,可以将语音分成一个个小段,称之为:帧。先将N个采样点集合成一个观测单位,称为帧。通常情况下N的值为256或512,涵盖的时间约为20~30ms左右。为了避免相邻两帧的变化过大,因此会让两相邻帧之间有一段重叠区域,此重叠区域包含了M个取样点,通常M的值约为N的1/2或1/3。通常语音识别所采用语音信号的采样频率为8KHz或16KHz,以8KHz来说,若帧长度为256个采样点,则对应的时间长度是256/8000×1000=32ms。

    5.加窗:采用哈明窗对一帧语音加窗,以减小吉布斯效应的影响。语音在长范围内是不停变动的,没有固定的特性无法做处理,所以将每一帧代入窗函数,窗外的值设定为0,其目的是消除各个帧两端可能会造成的信号不连续性。常用的窗函数有方窗、汉明窗和汉宁窗等,根据窗函数的频域特性,常采用汉明窗。将每一帧乘以汉明窗,以增加帧左端和右端的连续性

    6.快速傅立叶变换(Fast Fourier Transformation, FFT): 由于信号在时域上的变换通常很难看出信号的特性,所以通常将它转换为频域上的能量分布来观察,不同的能量分布,就能代表不同语音的特性。所以在乘上汉明窗后,每帧还必须再经过快速傅里叶变换以得到在频谱上的能量分布。对分帧加窗后的各帧信号进行快速傅里叶变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率谱。

    7.三角窗滤波: 用一组Mel频标上线性分布的三角窗滤波器(共24个三角窗滤波器),对信号的功率谱滤波,每一个三角窗滤波器覆盖的范围都近似于人耳的一个临界带宽,以此来模拟人耳的掩蔽效应。

    8.求对数:三角窗滤波器组的输出求取对数,可以得到近似于同态变换的结果。

    9.离散余弦变换(Discrete Cosine Transformation, DCT): 去除各维信号之间的相关性,将信号映射到低维空间。

    10.谱加权:由于倒谱的低阶参数易受说话人特性、信道特性等的影响,而高阶参数的分辨能力比较低,所以需要进行谱加权,抑制其低阶和高阶参数。 倒谱均值减(Cepstrum Mean Subtraction, CMS):CMS可以有效地减小语音输入信道对特征参数的影响。

    11.差分参数: 实验表明,在语音特征中加入表征语音动态特性的差分参数,能够提高系统的识别性能。

    12.短时能量:语音的短时能量也是重要的特征参数,短时归一化对数能量及其一阶差分、二阶差分参数

    Python代码说明

      该示例代码调用的是 python_speech_features 包提取MFCC,MFCC基本维数是13维,将其与一阶差分、二阶差分组合,返回的是39维特征的MFCC。

    python代码如下:

    from python_speech_features import *
    import numpy as np
    import scipy.io.wavfile
    from matplotlib import pyplot as plt
    
    
    class WavtoMfcc(object):
    
        def __init__(self, ul, num_wav, numc=13):
    
            self.numc = numc
            self.ul = ul
            self.num_wav = num_wav
    
        def get_mfcc(self, data, fs):
    
            wav_feature = mfcc(data, fs, numcep=self.numc, 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)
            numcep - 倒频谱返回的数量,默认13
            nfilt - 滤波器组的滤波器数量,默认26
            nfft - FFT的大小,默认512
            lowfreq - 梅尔滤波器的最低边缘,单位赫兹,默认为0
            highfreq - 梅尔滤波器的最高边缘,单位赫兹,默认为采样率/2
            preemph - 应用预加重过滤器和预加重过滤器的系数,0表示没有过滤器,默认0.97
            ceplifter - 将升降器应用于最终的倒谱系数。 0没有升降机。默认值为22。
            appendEnergy - 如果是true,则将第0个倒谱系数替换为总帧能量的对数。 
            '''
            d_mfcc_feat = delta(wav_feature, 1)
            d_mfcc_feat2 = delta(wav_feature, 2)
            feature = np.hstack((wav_feature, d_mfcc_feat, d_mfcc_feat2))
            return feature
    
        def readwav(self):
            total_mfcc = []
            total_num, numk = [], []
            m1 = 0
            for i in range(1, 31):
                sample_rate, signal = scipy.io.wavfile.read(self.ul + str(i) + '.wav')
                mfcck = self.get_mfcc(signal, sample_rate)
                m, n = mfcck.shape
                total_mfcc.extend(mfcck)
                m1 = m1 + m
                numk.append(m)
                total_num.append(m1)
            total_mfcc = np.array(total_mfcc)
            plt.figure()
            plt.plot(signal)
            plt.show()
            return total_mfcc, total_num
    
    
    if __name__ == '__main__':
    
        ul = 'D:/PyWork/train_data/'
        k = 30  # 读取音频数量
        mfccdim = 13  # mfcc基本维数
        getmfcc = WavtoMfcc(ul, k, mfccdim)
        mfcc, numk = getmfcc.readwav()
        print(mfcc.shape)
    
    

    信号可视化
    在这里插入图片描述

    展开全文
  • 1.比较代码 import librosa import os ...from python_speech_features import mfcc #读取某文件夹下的所有.wav文件,并返回文件全称 def file_name(file_dir): L = [] for root, dirs, files in

    1.比较代码

    import librosa
    import os
    import time
    import numpy as np
    import scipy.io.wavfile as wav
    import python_speech_features
    from python_speech_features import mfcc
    
    #读取某文件夹下的所有.wav文件,并返回文件全称
    def file_name(file_dir):
        L = []
        for root, dirs, files in os.walk(file_dir):
            for file in files:
                if os.path.splitext(file)[1] == '.wav':
                    L.append(os.path.join(root, file))
            return L
    '''
    调用python_speech_features包
    '''
    def mfcc_1(filename):
        fs, wavedata = wav.read(filename)
        mfcc_feature = mfcc(wavedata, fs, winlen=0.064, winstep=0.032, nfilt=13, nfft=1024)  # mfcc系数     # nfilt为返回的mfcc数据维数,默认为13维
        d_mfcc_feat = python_speech_features.base.delta(mfcc_feature, 1)     # feat 为mfcc数据或fbank数据    # N - N为1代表一阶差分,N为2代表二阶差分     # 返回:一个大小为特征数量的numpy数组,包含有delta特征,每一行都有一个delta向量
        d_mfcc_feat2 = python_speech_features.base.delta(mfcc_feature, 2)
        mfccs = np.hstack((mfcc_feature, d_mfcc_feat, d_mfcc_feat2))
        # 返回 帧数*39 的mfccs参数
        return mfccs
    '''
    调用librosa包
    '''
    def mfcc_2(filename):
        y, sr = librosa.load(filename, sr=None)
        mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=39)  # n_mfcc为返回的mfcc数据维度
        mfccs=np.array(mfccs)#转成numpy类型
        # 返回 帧数*39 的mfccs参数
        return mfccs.T
    
    def main():
    	#定义一些文件路径
        wav_dir="./data"
        filenames=file_name(wav_dir)
        #开始计时
        start_time=time.time()
    	#循环读取文件名称并求取mfcc参数
        for filename in filenames:
            mfccs=mfcc_1(filename)
        #结束计时
        end_time=time.time()
        print("程序运行时长",str(end_time-start_time))
    
    if __name__ == '__main__':
        main()
    
    

    2.结果

    本次测试使用的是1200条语音,分别调用python_speech_features和librosa两个包求取39维MFCC参数,由于在后续的训练中需要提取大量语音的mfcc参数,这里比对了两种方法的运行时间:

    2.1 调用python_speech_features包生成mfccs参数

    程序运行时长 6.4495463371276855 s
    

    2.2 调用librosa包生成mfccs参数

    程序运行时长 9.830938816070557 s
    

    在进行的速度方面,使用python_speech_features包生成的速度较快一些。

    3. mfccs波形比对

    在这里插入图片描述

    4. 后续训练差异

    这一块的内容,后续会补上。

    展开全文
  • MFCC特征提取Python实现

    2018-08-02 15:11:55
    语音特征提取MFCC特征提取Python实现,包括一阶差分和二阶差分系数
  • 如下所示: import scipy.io.wavfile as wav from python_speech_features import mfcc fs, audio = wav.read(abc.wav) feature_mfcc = mfcc(audio, samplerate=fs) ...以上这篇利用python提取wav文件的mfcc方法就是小
  • python提取语音信号MFCC

    千次阅读 多人点赞 2019-12-15 14:53:11
    python提取语音信号MFCC Mel频率倒谱系数(MFCC)的分析是基于人的听觉机理,即依据人的听觉实验结果来分析语音的频谱,期望获得好的语音特性。 一、读取语音信号 import numpy as np import wave import ...

    python提取语音信号MFCC

    Mel频率倒谱系数(MFCC)的分析是基于人的听觉机理,即依据人的听觉实验结果来分析语音的频谱,期望获得好的语音特性。

    一、读取语音信号

    import numpy as np
    import wave
    import matplotlib.pyplot as plt
    from scipy.fftpack import dct
    f = wave.open(r"lantian.wav", "rb")
    params = f.getparams()
    nchannels, sampwidth, framerate, nframes = params[:4]
    str_data = f.readframes(nframes)
    signal = np.fromstring(str_data, dtype=np.short)
    signal=signal*1.0/(max(abs(signal))) #归一化
    

    python读取语音调用wave模块

    nchannels: 声道数 1

    sampwidth:量化位数 2

    framerate:采样频率 8000

    nframes:采样点数 19000

    在这里插入图片描述

    二、预加重

    预加重的目的是为了补偿高频分量的损失,提升高频分量,预加重的滤波器常设为
    H ( z ) = 1 − a z − 1 H(z)=1-az^{-1} H(z)=1az1
    变换后:
    y ( t ) = x ( t ) − a x ( t − 1 ) y(t)=x(t)-ax(t-1) y(t)=x(t)ax(t1)

    signal_add=np.append(signal[0],signal[1:]-0.97*signal[:-1])   #预加重
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pfA54HWO-1576392559693)(C:\Users\jh\AppData\Roaming\Typora\typora-user-images\1576388987768.png)]

    三、分帧、加窗

    分帧处理:由于语音信号是一个准稳态的信号,把它分成较短的帧,在每帧中可将其看做稳态信号,可用处理稳态信号的方法来处理。同时,为了使一帧与另一帧之间的参数能较平稳地过渡,在相邻两帧之间互相有部分重叠。

    加窗函数:加窗函数的目的是减少频域中的泄漏,将对每一帧语音乘以汉明窗或海宁窗。语音信号x(n)经预处理后为xi(m),其中下标i表示分帧后的第i帧。

    wlen=512
    inc=128
    N=512
    if signal_len<wlen:
        nf=1
    else:
        nf = int(np.ceil((1.0 * signal_len - wlen + inc) / inc))
    pad_len=int((nf-1)*inc+wlen)
    zeros=np.zeros(pad_len-signal_len)
    pad_signal=np.concatenate((signal,zeros))
    indices=np.tile(np.arange(0,wlen),(nf,1))+np.tile(np.arange(0,nf*inc,inc),(wlen,1)).T
    indices=np.array(indices,dtype=np.int32)
    frames=pad_signal[indices]
    win=np.hanning(wlen)
    

    四、快速傅里叶变换

    对每一帧信号进行快速傅里叶变换。
    X ( i , k ) = F F T ( x i ( m ) ) X(i,k)=FFT(x_{i}(m)) X(i,k)=FFT(xi(m))

    for i in range(nf): #帧数
        x=frames[i:i+1]
        y=win*x[0]
        a=np.fft.fft(y) #快速傅里叶变换
    

    五、计算能量谱线

    对每一帧数据计算能量谱线。
    E ( i , k ) = [ X ( i , k ) ] 2 E(i,k)=[X(i,k)]^{2} E(i,k)=[X(i,k)]2

    for i in range(nf):
        x=frames[i:i+1]
        y=win*x[0]
        a=np.fft.fft(y)
        b=np.square(abs(a)) #求FFT变换结果的模的平方
    

    六、梅尔滤波器

    ​ 人的听觉系统是一个特殊的非线性系统,它响应不同频率信号的灵敏度是不同的。在语音特征的提取上,人类听觉系统做得非常好,它不仅能提取出语义信息, 而且能提取出说话人的个人特征,这些都是现有的语音识别系统所望尘莫及的。如果在语音识别系统中能模拟人类听觉感知处理特点,就有可能提高语音的识别率。

    ​ 梅尔频率倒谱系数(Mel Frequency Cepstrum Coefficient, MFCC)考虑到了人类的听觉特征,先将线性频谱映射到基于听觉感知的Mel非线性频谱中,然后转换到倒谱上。

    将普通频率转化为mel频率的公式为:
    m e l ( f ) = 2595 ∗ l o g 10 ( 1 + f 700 ) mel(f)=2595*log10(1+\frac{f}{700}) mel(f)=2595log10(1+700f)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BJXSCmBI-1576392559694)(C:\Users\jh\AppData\Roaming\Typora\typora-user-images\1576392519332.png)]

    将mel频率转化为普通频率公式为:
    f = 700 ( 1 0 m e l ( f ) / 1595 − 1 ) f=700(10^{mel(f)/1595}-1) f=700(10mel(f)/15951)
    梅尔滤波器组,每个滤波器的传递函数为:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RT9e3Hab-1576392559694)(C:\Users\jh\AppData\Roaming\Typora\typora-user-images\1576390569317.png)]

    每个滤波器在mel频率上是等带宽的。

    中心频率f(m)可以表示为:
    f ( m ) = ( N f s ) F m e l − 1 ( F m e l ( f l + m F m e l ( f h ) − F m e l ( f i ) M + 1 ) f(m)=(\frac{N}{f_{s}})F_{mel}^{-1}(F_{mel}(f_{l}+m\frac{F_{mel}(f_{h})-F_{mel}(f_{i})}{M+1}) f(m)=(fsN)Fmel1(Fmel(fl+mM+1Fmel(fh)Fmel(fi))
    这里我采用m=24个滤波器

    	mel_high=1125*np.log(1+(framerate/2)/700)  #mel最高频率
        mel_point=np.linspace(0,mel_high,m+2)  #将mel频率等距离分成m+2个点
        Fp=700 * (np.exp(mel_point / 1125) - 1) #将等距分好的mel频率转换为实际频率
        w=int(N/2+1)
        df=framerate/N
        fr=[]
        for n in range(w): #mel滤波器的横坐标
            frs=int(n*df)
            fr.append(frs)
        melbank=np.zeros((m,w))
        for k in range(m+1): #画mel滤波器
            f1=Fp[k-1]  #三角形左边点的横坐标
            f2=Fp[k+1]	#三角形右边点的横坐标
            f0=Fp[k]	#三角形中心点点的横坐标
            n1=np.floor(f1/df)
            n2=np.floor(f2/df)
            n0=np.floor(f0/df)
            for j in range(w):
                if j>= n1 and j<= n0:
                    melbank[k-1,j]=(j-n1)/(n0-n1)
                if j>= n0 and j<= n2:
                    melbank[k-1,j]=(n2-j)/(n2-n0)
            for c in range(w):
                s[i,k-1]=s[i,k-1]+b[c:c+1]*melbank[k-1,c]
            plt.plot(fr, melbank[k - 1,])
    plt.show()
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZkVrw9aq-1576392559695)(C:\Users\jh\AppData\Roaming\Typora\typora-user-images\1576391540230.png)]

    具体过程可参考:

    [梅尔滤波器组的分析与设计思路]: https://blog.csdn.net/tengfei0973/article/details/103182621

    七、离散余弦变换(DCT)

    logs=np.log(s) #取对数
    num_ceps=12
    D = dct(logs,type = 2,axis = 0,norm = 'ortho')[:,1 : (num_ceps + 1)]
    

    因为语音信号特征主要集中在低频部分,所以一般选用每一帧信号的前12个滤波器作为MFCC参数。

    八、总结

    MFCC参数主要用来做语音识别和端点检测。

    总代码:

    import numpy as np
    import wave
    import matplotlib.pyplot as plt
    from scipy.fftpack import dct
    f = wave.open(r"lantian.wav", "rb")
    params = f.getparams()
    nchannels, sampwidth, framerate, nframes = params[:4]
    str_data = f.readframes(nframes)
    signal = np.fromstring(str_data, dtype=np.short)
    signal=signal*1.0/(max(abs(signal)))
    signal_len=len(signal)
    #预加重
    signal_add=np.append(signal[0],signal[1:]-0.97*signal[:-1])   #预加重
    time=np.arange(0,nframes)/1.0*framerate
    #plt.figure(figsize=(20,10))
    #plt.subplot(2,1,1)
    #plt.plot(time,signal)
    #plt.subplot(2,1,2)
    #plt.plot(time,signal_add)
    #plt.show()
    #分帧
    wlen=512
    inc=128
    N=512
    if signal_len<wlen:
        nf=1
    else:
        nf = int(np.ceil((1.0 * signal_len - wlen + inc) / inc))
    pad_len=int((nf-1)*inc+wlen)
    zeros=np.zeros(pad_len-signal_len)
    pad_signal=np.concatenate((signal,zeros))
    indices=np.tile(np.arange(0,wlen),(nf,1))+np.tile(np.arange(0,nf*inc,inc),(wlen,1)).T
    indices=np.array(indices,dtype=np.int32)
    frames=pad_signal[indices]
    win=np.hanning(wlen)
    m=24
    s=np.zeros((nf,m))
    for i in range(nf):
        x=frames[i:i+1]
        y=win*x[0]
        a=np.fft.fft(y)
        b=np.square(abs(a))
        mel_high=1125*np.log(1+(framerate/2)/700)
        mel_point=np.linspace(0,mel_high,m+2)
        Fp=700 * (np.exp(mel_point / 1125) - 1)
        w=int(N/2+1)
        df=framerate/N
        fr=[]
        for n in range(w):
            frs=int(n*df)
            fr.append(frs)
        melbank=np.zeros((m,w))
        for k in range(m+1):
            f1=Fp[k-1]
            f2=Fp[k+1]
            f0=Fp[k]
            n1=np.floor(f1/df)
            n2=np.floor(f2/df)
            n0=np.floor(f0/df)
            for j in range(w):
                if j>= n1 and j<= n0:
                    melbank[k-1,j]=(j-n1)/(n0-n1)
                if j>= n0 and j<= n2:
                    melbank[k-1,j]=(n2-j)/(n2-n0)
            for c in range(w):
                s[i,k-1]=s[i,k-1]+b[c:c+1]*melbank[k-1,c]
            plt.plot(fr, melbank[k - 1,])
    plt.show()
    logs=np.log(s)
    num_ceps=12
    D = dct(logs,type = 2,axis = 0,norm = 'ortho')[:,1 : (num_ceps + 1)]
    print(D)
    print(np.shape(D))
    

    输出结果:一个146×12的矩阵 146代表帧数,12代表每帧的MFCC系数

    [[ 4.84318860e+01 5.43872867e+01 2.97738841e+01 … -1.80842897e+01
    -2.56759247e+01 -3.18041757e+01]
    [-7.09811701e+00 -5.86839796e+00 -4.37673606e+00 … 3.47982198e+00
    4.99207591e+00 6.14210310e+00]
    [-1.46795072e+01 -1.88020165e+01 -9.72372794e+00 … -8.57395667e+00
    -1.24359229e+01 -1.45616032e+01]

    [-2.27406690e-01 -1.80257328e-01 -5.82389817e-01 … -1.26641927e-01
    -2.98866486e-02 -6.72742599e-02]
    [-1.74213838e-01 -2.16393861e-01 -1.68467011e-01 … 4.40449351e-02
    -1.80765461e-02 2.14003905e-02]
    [-1.06398728e-01 -6.37571905e-02 -1.43970643e-01 … 1.37202632e-01
    -7.46614028e-02 8.66251398e-02]]

    MFCC提取流程图:

    img

    matlab代码(来自书本)

    clear all;
    clc;
    clear all;
    [x,fs]=audioread('H:\语音信号处理\speech_signal\bluesky3.wav');
    p=24;
    frameSize=512;
    inc=128;
    bank=melbankm(p,frameSize,fs,0,0.5,'m');
    % 归一化Mel滤波器组系数
    bank=full(bank);
    bank=bank/max(bank(:));
    p2=p/2;
    % DCT系数,p2*p
    for k=1:p2
      n=0:p-1;
      dctcoef(k,:)=cos((2*n+1)*k*pi/(2*p));
    end
    
    % 归一化倒谱提升窗口
    w = 1 + 6 * sin(pi * [1:p2] ./ p2);
    w = w/max(w);
    
    % 预加重滤波器
    xx=double(x);
    xx=filter([1 -0.9375],1,xx);
    
    % 语音信号分帧
    xx=enframe(xx,frameSize,inc);
    n2=fix(frameSize/2)+1;
    % 计算每帧的MFCC参数
    for i=1:size(xx,1)
      y = xx(i,:);
      s = y' .* hamming(frameSize);
      t = abs(fft(s));
      t = t.^2;
      c1=dctcoef * log(bank * t(1:n2));
      c2 = c1.*w';
      m(i,:)=c2';
    end
    
    %差分系数
    dtm = zeros(size(m));
    for i=3:size(m,1)-2
      dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);
    end
    dtm = dtm / 3;
    %合并MFCC参数和一阶差分MFCC参数
    ccc = [m dtm];
    %去除首尾两帧,因为这两帧的一阶差分参数为0
    ccc = ccc(3:size(m,1)-2,:);
    
    展开全文
  • python MFCC特征参数提取

    千次阅读 2019-08-10 14:24:13
    文章参考地址 import numpy as np from scipy import signal from scipy.fftpack import dct import pylab as plt def enframe(wave_data, nw, inc, winfunc): '''将音频信号转化为帧。 参数含义: ...
  • MFCC特征参数提取(一)(基于MATLAB和Python实现)

    万次阅读 多人点赞 2018-05-30 10:09:14
    1、MFCC概述 在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scale FrequencyCepstral Coefficients,简称MFCC)。根据人耳听觉机理的研究发现...
  • 利用python库librosa提取声音信号的mfcc特征前言librosa库介绍librosa 中MFCC特征提取函数介绍解决特征融合问题总结 前言 写这篇博文的目的有两个,第一是希望新手朋友们能够通过这篇博文了解到python还有这么强大...
  • 1、MFCC概述 在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scale FrequencyCepstral Coefficients,简称MFCC)。根据人耳听觉机理的研究发现...
  • python实现mfcc

    千次阅读 2019-09-18 15:57:02
    1、利用python_speech_features库编写MFCC特征提取,生成40维的mfcc向量 import scipy.io.wavfile as wavfile from python_speech_features import mfcc, delta def read_wave_data(filename): """获取语音文件...
  • 提取语音的GFCC特征,不需要搭建环境,可以直接运行,希望大家支持一下。如果下载后不可以使用,可以csdn联系我
  • python 实现MFCC

    万次阅读 多人点赞 2018-06-06 16:52:18
    计算滤波器组的最后一步是nfilt = 40在麦克级上应用三角形滤波器(通常为40个滤波器)来提取功率谱以提取频带。梅尔尺度旨在通过在较低频率处更具辨别性并且在较高频率处较少辨别性来模拟非线性人类耳朵对声音的感知...
  • 输出MFCC特征参数为二维数组,行数表示帧数,12列表示12个MFCC特征参数
  • mfcc的特征提取python 代码实现和解析

    千次阅读 2018-10-15 14:13:00
    /usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 import numpy 5 import scipy.io.wavfile 6 from matplotlib import pyplot as plt 7 from scipy.fftpack import dct 8 9 sample_rate,sig...
  • 本文重点介绍如何提取MFCC特征。 首先创建有一个Python文件,并导入库文件: from scipy.io import wavfile from python_speech_features import mfcc, logfbank import matplotlib.pylab as plt1、首先创建有一...
  • 利用python结合opensmile批量提取mfcc特征
  • 1.对语音数据归一化 如16000hz的数据,会将每个点/32768 2.计算窗函数:(*注意librosa中不进行预处理) 3.进行数据扩展填充,他进行的是镜像填充(”reflect”) 如原数据为 12345 -》 填充为4的,左右各填充4 即:...
  • python 计算MFCC详细步骤

    千次阅读 2019-12-06 14:05:44
    计算滤波器组的最后一步是将三角滤波器(通常为40个滤波器,在Mel等级上为nfilt = 40)应用于功率谱以提取频带。 梅尔音阶的目的是模仿低频的人耳对声音的感知,方法是在较低频率下更具判别力,而在较高频率下则...
  • Python librosa.feature.mfcc提取音频特征

    千次阅读 2019-04-04 11:24:37
    librosa.feature.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] ...
  • 梅尔频率倒谱系数(MFCC)在语音项目中尤其重要,例如在语音识别,声纹识别等中都有他的身影.具体细节可以参看博客https://www.cnblogs.com/BaroC/p/4283380.html 话不多说,直接上代码. *******开始讲解几个重要函数,...
  • 利用python提取wav文件的mfcc

    千次阅读 2018-06-13 11:32:20
    import scipy.io.wavfile as wavfrom python_speech_features import mfccfs, audio = wav.read(&...)feature_mfcc = mfcc(audio, samplerate=fs)print(feature_mfcc)print(feature_mfcc.shape)注:python_speech...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 925
精华内容 370
关键字:

python提取mfcc

python 订阅