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

    2018-04-02 10:16:48
    包括提取MFCC的完整步骤,测试过可直接用,分享给大家
  • 主要介绍了基于MATLAB和Python实现MFCC特征参数提取,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • MFCC特征提取Python实现

    2018-08-02 15:11:55
    语音特征提取MFCC特征提取Python实现,包括一阶差分和二阶差分系数
  • 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): """获取语音文件...

    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):
    	"""获取语音文件信息: sample_rate:帧速率  signal:数据的矩阵形式 """
        fs, wavsignal = wavfile.read(filename)  # 声音文件数据的矩阵形式
        return fs, wavsignal
    
    def extract_mfcc( wav_arr, sample_rate):
        mfcc_feat = mfcc(wav_arr, sample_rate)
        energy = np.sqrt(wav_arr)
        mfcc_feat = np.stack(mfcc_feat, energy)
        delta1 = delta(mfcc_feat, 1)
        delta2 = delta(delta1, 1)
        mfcc_feat = np.stack(mfcc_feat, delta1, delta2)
        return mfcc_feat.T
    

    2、利用librosa库编写mfcc特征提取

    import librosa
        wavsignal,fs = librosa.load(filename)
        mfccs = librosa.feature.mfcc(wavsignal , sr=fs)
        return mfccs
    

    3、python代码直接编写mfcc特征提取模块

    import numpy
    import scipy.io.wavfile
    from matplotlib import pyplot as plt
    from scipy.fftpack import dct
        sample_rate,signal=scipy.io.wavfile.read('OSR_us_000_0010_8k.wav')
        print(sample_rate,len(signal))
        #读取前3.5s 的数据
        signal=signal[0:int(3.5*sample_rate)]
    print(signal)
    
    #预先处理
    pre_emphasis = 0.97
    emphasized_signal = numpy.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])
    
    frame_size=0.025
    frame_stride=0.1
    frame_length,frame_step=frame_size*sample_rate,frame_stride*sample_rate
    signal_length=len(emphasized_signal)
    frame_length=int(round(frame_length))
    frame_step=int(round(frame_step))
    num_frames=int(numpy.ceil(float(numpy.abs(signal_length-frame_length))/frame_step))
    
    pad_signal_length=num_frames*frame_step+frame_length
    z=numpy.zeros((pad_signal_length-signal_length))
    pad_signal=numpy.append(emphasized_signal,z)
    
    
    indices = numpy.tile(numpy.arange(0, frame_length), (num_frames, 1)) + numpy.tile(numpy.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
    
    frames = pad_signal[numpy.mat(indices).astype(numpy.int32, copy=False)]
    
    #加上汉明窗
    frames *= numpy.hamming(frame_length)
    # frames *= 0.54 - 0.46 * numpy.cos((2 * numpy.pi * n) / (frame_length - 1))  # Explicit Implementation **
    
    #傅立叶变换和功率谱
    NFFT = 512
    mag_frames = numpy.absolute(numpy.fft.rfft(frames, NFFT))  # Magnitude of the FFT
    #print(mag_frames.shape)
    pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2))  # Power Spectrum
    
    low_freq_mel = 0
    #将频率转换为Mel
    nfilt = 40
    high_freq_mel = (2595 * numpy.log10(1 + (sample_rate / 2) / 700))
    mel_points = numpy.linspace(low_freq_mel, high_freq_mel, nfilt + 2)  # Equally spaced in Mel scale
    hz_points = (700 * (10**(mel_points / 2595) - 1))  # Convert Mel to Hz
    
    bin = numpy.floor((NFFT + 1) * hz_points / sample_rate)
    
    fbank = numpy.zeros((nfilt, int(numpy.floor(NFFT / 2 + 1))))
    
    for m in range(1, nfilt + 1):
        f_m_minus = int(bin[m - 1])   # left
        f_m = int(bin[m])             # center
        f_m_plus = int(bin[m + 1])    # right
        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 = numpy.dot(pow_frames, fbank.T)
    filter_banks = numpy.where(filter_banks == 0, numpy.finfo(float).eps, filter_banks)  # Numerical Stability
    filter_banks = 20 * numpy.log10(filter_banks)  # dB
    
    num_ceps = 12
    mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1 : (num_ceps + 1)]
    (nframes, ncoeff) = mfcc.shape
    
    n = numpy.arange(ncoeff)
    cep_lifter =22
    lift = 1 + (cep_lifter / 2) * numpy.sin(numpy.pi * n / cep_lifter)
    mfcc *= lift  #*
    
    #filter_banks -= (numpy.mean(filter_banks, axis=0) + 1e-8)
    mfcc -= (numpy.mean(mfcc, axis=0) + 1e-8)
    
    print(mfcc.shape)
    plt.plot(filter_banks)
    
    plt.show()
    
    原文链接:https://blog.csdn.net/TH_NUM/article/details/80597495
    
    展开全文
  • 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

    万次阅读 多人点赞 2018-06-06 16:52:18
    计算滤波器组的最后一步是nfilt = 40在麦克级上应用三角形滤波器(通常为40个滤波器)来提取功率谱以提取频带。梅尔尺度旨在通过在较低频率处更具辨别性并且在较高频率处较少辨别性来模拟非线性人类耳朵对声音的感知...

    语音数据:http://www.voiptroubleshooter.com/open_speech/american.html
    For this post, I used a 16-bit PCM wav file from [here]

    import numpy
    import scipy.io.wavfile
    from matplotlib import pyplot as plt
    from scipy.fftpack import dct
    
    sample_rate,signal=scipy.io.wavfile.read('OSR_us_000_0010_8k.wav')
    
    print(sample_rate,len(signal))
    #读取前3.5s 的数据
    signal=signal[0:int(3.5*sample_rate)]
    
    plt.plot(signal)
    plt.show()

    这里写图片描述

    2 预加重

    y(t)=x(t)−αx(t−1)

    pre_emphasis = 0.97
    emphasized_signal = numpy.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])
    ax2=f1.add_subplot(2,2,2)
    ax2.plot(emphasized_signal)
    
    plt.show()

    这里写图片描述

    3

    预加重后,我们需要将信号分成短时帧。这一步背后的基本原理是信号中的频率随时间而变化,所以在大多数情况下,对整个信号进行傅立叶变换是没有意义的,因为我们会随着时间的推移丢失信号的频率轮廓。为了避免这种情况,我们可以安全地假设信号中的频率在很短的时间内是平稳的。因此,通过在这个短时间帧内进行傅里叶变换,我们可以通过连接相邻帧来获得信号的频率轮廓的良好近似。

    语音处理范围内的典型帧大小范围为20毫秒到40毫秒,连续帧之间重叠50%(+/- 10%)。流行设置25毫秒的帧大小,frame_size = 0.025和一10毫秒的步幅(15毫秒重叠), frame_stride = 0.01。

    frame_size=0.025
    frame_stride=0.1
    frame_length,frame_step=frame_size*sample_rate,frame_stride*sample_rate
    signal_length=len(emphasized_signal)
    frame_length=int(round(frame_length))
    frame_step=int(round(frame_step))
    num_frames=int(numpy.ceil(float(numpy.abs(signal_length-frame_length))/frame_step))
    
    
    pad_signal_length=num_frames*frame_step+frame_length
    z=numpy.zeros((pad_signal_length-signal_length))
    pad_signal=numpy.append(emphasized_signal,z)
    
    indices = numpy.tile(numpy.arange(0, frame_length), (num_frames, 1)) + numpy.tile(numpy.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
    
    frames = pad_signal[numpy.mat(indices).astype(numpy.int32, copy=False)]
    
    ax3=f1.add_subplot(2,2,3)
    ax3.plot(pad_signal)
    plt.show()

    这里写图片描述

    窗口

    在将信号切分为帧后,我们将一个窗口函数(如Hamming窗口)应用于每个帧。汉明窗口具有以下形式:
    这里写图片描述
    有几个原因需要对窗框应用窗函数,特别是为了抵消FFT所假设的数据是无限的,并减少频谱泄漏。

    frames *= numpy.hamming(frame_length)
    # frames *= 0.54 - 0.46 * numpy.cos((2 * numpy.pi * n) / 
    (frame_length - 1))  # Explicit Implementation **

    5 傅立叶变换和功率谱

    我们现在可以做一个在每个帧上计算频谱,这也称为短时傅立叶变换(STFT),其中N通常是256或512 ,NFFT = 512; 然后使用以下等式计算功率谱(周期图):

    6 滤波器组

    计算滤波器组的最后一步是nfilt = 40在麦克级上应用三角形滤波器(通常为40个滤波器)来提取功率谱以提取频带。梅尔尺度旨在通过在较低频率处更具辨别性并且在较高频率处较少辨别性来模拟非线性人类耳朵对声音的感知。
    Hertz (ff)和 Mel (mm) 之间的公式:
    这里写图片描述
    滤波器组中的每个滤波器都是三角形的,在中心频率处响应为1,并朝着0线性减小,直至达到响应为0的两个相邻滤波器的中心频率,如下图所示:
    这里写图片描述
    这里写图片描述

    low_freq_mel = 0
    #将频率转换为Mel
    nfilt = 40
    high_freq_mel = (2595 * numpy.log10(1 + (sample_rate / 2) / 700))
    mel_points = numpy.linspace(low_freq_mel, high_freq_mel, nfilt + 2)  # Equally spaced in Mel scale
    hz_points = (700 * (10**(mel_points / 2595) - 1))  # Convert Mel to Hz
    
    bin = numpy.floor((NFFT + 1) * hz_points / sample_rate)
    
    fbank = numpy.zeros((nfilt, int(numpy.floor(NFFT / 2 + 1))))
    
    for m in range(1, nfilt + 1):
        f_m_minus = int(bin[m - 1])   # left
        f_m = int(bin[m])             # center
        f_m_plus = int(bin[m + 1])    # right
        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 = numpy.dot(pow_frames, fbank.T)
    filter_banks = numpy.where(filter_banks == 0, numpy.finfo(float).eps, filter_banks)  # Numerical Stability
    filter_banks = 20 * numpy.log10(filter_banks)  # dB
    

    7 梅尔频率倒谱系数(MFCC)

    事实证明,前一步计算出的滤波器组系数高度相关,这在某些机器学习算法中可能存在问题。因此,我们可以应用离散余弦变换(DCT)去相关滤波器组系数并产生滤波器组的压缩表示。通常,对于自动语音识别(ASR),所得到的倒谱系数2-13被保留,其余的被丢弃; num_ceps = 12。丢弃其他系数的原因是它们表示滤波器组系数的快速变化,并且这些细节不会有助于自动语音识别(ASR)。

    num_ceps = 12
    mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1 : (num_ceps + 1)]

    可以将正弦升降1应用于MFCC以降低已被声称在噪声信号中改善语音识别的较高MFCC

    (nframes, ncoeff) = mfcc.shape
    
    n = numpy.arange(ncoeff)
    cep_lifter =22
    lift = 1 + (cep_lifter / 2) * numpy.sin(numpy.pi * n / cep_lifter)
    mfcc *= lift  #*
    

    7 平均标准化

    如前所述,为了平衡频谱并改善信噪比(SNR),我们可以简单地从所有帧中减去每个系数的平均值。

    平均归一化滤波器组:

    filter_banks -= (numpy.mean(filter_banks, axis=0) + 1e-8)
    plt.imshow(numpy.flipud(filter_banks.T), cmap=plt.cm.jet, aspect=0.2, extent=[0,filter_banks.shape[1],0,filter_banks.shape[0]]) #画热力图
    plt.show()

    这里写图片描述

    对于MFCC也是如此:
    平均归一化MFCC:

    mfcc -= (numpy.mean(mfcc, axis=0) + 1e-8)
    plt.imshow(numpy.flipud(mfcc.T), cmap=plt.cm.jet, aspect=0.2, extent=[0,mfcc.shape[0],0,mfcc.shape[1]])#热力图
    plt.show()
    

    这里写图片描述

    完整代码:

    import numpy
    import scipy.io.wavfile
    from matplotlib import pyplot as plt
    from scipy.fftpack import dct
    
    sample_rate,signal=scipy.io.wavfile.read('OSR_us_000_0010_8k.wav')
    
    print(sample_rate,len(signal))
    #读取前3.5s 的数据
    signal=signal[0:int(3.5*sample_rate)]
    print(signal)
    
    
    
    #预先处理
    pre_emphasis = 0.97
    emphasized_signal = numpy.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])
    
    
    frame_size=0.025
    frame_stride=0.1
    frame_length,frame_step=frame_size*sample_rate,frame_stride*sample_rate
    signal_length=len(emphasized_signal)
    frame_length=int(round(frame_length))
    frame_step=int(round(frame_step))
    num_frames=int(numpy.ceil(float(numpy.abs(signal_length-frame_length))/frame_step))
    
    
    pad_signal_length=num_frames*frame_step+frame_length
    z=numpy.zeros((pad_signal_length-signal_length))
    pad_signal=numpy.append(emphasized_signal,z)
    
    
    indices = numpy.tile(numpy.arange(0, frame_length), (num_frames, 1)) + numpy.tile(numpy.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
    
    frames = pad_signal[numpy.mat(indices).astype(numpy.int32, copy=False)]
    
    #加上汉明窗
    frames *= numpy.hamming(frame_length)
    # frames *= 0.54 - 0.46 * numpy.cos((2 * numpy.pi * n) / (frame_length - 1))  # Explicit Implementation **
    
    #傅立叶变换和功率谱
    NFFT = 512
    mag_frames = numpy.absolute(numpy.fft.rfft(frames, NFFT))  # Magnitude of the FFT
    #print(mag_frames.shape)
    pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2))  # Power Spectrum
    
    
    
    low_freq_mel = 0
    #将频率转换为Mel
    nfilt = 40
    high_freq_mel = (2595 * numpy.log10(1 + (sample_rate / 2) / 700))
    mel_points = numpy.linspace(low_freq_mel, high_freq_mel, nfilt + 2)  # Equally spaced in Mel scale
    hz_points = (700 * (10**(mel_points / 2595) - 1))  # Convert Mel to Hz
    
    bin = numpy.floor((NFFT + 1) * hz_points / sample_rate)
    
    fbank = numpy.zeros((nfilt, int(numpy.floor(NFFT / 2 + 1))))
    
    for m in range(1, nfilt + 1):
        f_m_minus = int(bin[m - 1])   # left
        f_m = int(bin[m])             # center
        f_m_plus = int(bin[m + 1])    # right
        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 = numpy.dot(pow_frames, fbank.T)
    filter_banks = numpy.where(filter_banks == 0, numpy.finfo(float).eps, filter_banks)  # Numerical Stability
    filter_banks = 20 * numpy.log10(filter_banks)  # dB
    
    num_ceps = 12
    mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1 : (num_ceps + 1)]
    (nframes, ncoeff) = mfcc.shape
    
    n = numpy.arange(ncoeff)
    cep_lifter =22
    lift = 1 + (cep_lifter / 2) * numpy.sin(numpy.pi * n / cep_lifter)
    mfcc *= lift  #*
    
    #filter_banks -= (numpy.mean(filter_banks, axis=0) + 1e-8)
    mfcc -= (numpy.mean(mfcc, axis=0) + 1e-8)
    
    print(mfcc.shape)
    plt.plot(filter_banks)
    
    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)
    
    

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

    展开全文
  • 如下所示: 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方法就是小
  • MFCC特征参数提取(一)(基于MATLAB和Python实现

    万次阅读 多人点赞 2018-05-30 10:09:14
    1、MFCC概述 在语音识别(Speech Recognition)和话者识别(Speaker Recognition)方面,最常用到的语音特征就是梅尔倒谱系数(Mel-scale FrequencyCepstral Coefficients,简称MFCC)。根据人耳听觉机理的研究发现...
  • 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的特征提取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代码

    2019-03-25 16:27:52
    Python语言写的语音的MFCC特征提取代码,用于机器学习、深度学习等音频分类,语音识别,语音情感识别等领域
  • 提取语音的GFCC特征,不需要搭建环境,可以直接运行,希望大家支持一下。如果下载后不可以使用,可以csdn联系我
  • 1.比较代码 import librosa import os ...from python_speech_features import mfcc #读取某文件夹下的所有.wav文件,并返回文件全称 def file_name(file_dir): L = [] for root, dirs, files in
  • 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] ...
  • python提取语音信号MFCC

    千次阅读 多人点赞 2019-12-15 14:53:11
    python提取语音信号MFCC Mel频率倒谱系数(MFCC)的分析是基于人的听觉机理,即依据人的听觉实验结果来分析语音的频谱,期望获得好的语音特性。 一、读取语音信号 import numpy as np import wave import ...
  • 今天小编就为大家分享一篇使用python实现语音文件的特征提取方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 提取语音的 mfcc 特征,根据别人分享的代码,自己做了开发,提取基本特征 ,一级差分,二级差分
  • 输出MFCC特征参数为二维数组,行数表示帧数,12列表示12个MFCC特征参数
  • 利用python结合opensmile批量提取mfcc特征
  • 1.对语音数据归一化 如16000hz的数据,会将每个点/32768 2.计算窗函数:(*注意librosa中不进行预处理) 3.进行数据扩展填充,他进行的是镜像填充(”reflect”) 如原数据为 12345 -》 填充为4的,左右各填充4 即:...
  • 梅尔频率倒谱系数(MFCC)在语音项目中尤其重要,例如在语音识别,声纹识别等中都有他的身影.具体细节可以参看博客https://www.cnblogs.com/BaroC/p/4283380.html 话不多说,直接上代码. *******开始讲解几个重要函数,...
  • python 计算MFCC详细步骤

    千次阅读 2019-12-06 14:05:44
    计算滤波器组的最后一步是将三角滤波器(通常为40个滤波器,在Mel等级上为nfilt = 40)应用于功率谱以提取频带。 梅尔音阶的目的是模仿低频的人耳对声音的感知,方法是在较低频率下更具判别力,而在较高频率下则...
  • 利用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...
  • 利用python库librosa提取声音信号的mfcc特征前言librosa库介绍librosa 中MFCC特征提取函数介绍解决特征融合问题总结 前言 写这篇博文的目的有两个,第一是希望新手朋友们能够通过这篇博文了解到python还有这么强大...
  • 语音识别系统的第一步是进行特征提取mfcc是描述短时功率谱包络的一种特征,在语音识别系统中被广泛应用。 一、mel滤波器 每一段语音信号被分为多帧,每帧信号都对应一个频谱(通过FFT变换实现),频谱表示频率与...

空空如也

空空如也

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

python实现mfcc提取

python 订阅