• 大小: 8.04KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2024-05-07
  • 语言: Python
  • 标签: MFC  提取  特征  

资源简介

提取mfcc特征

资源截图

代码片段和文件信息

# coding=utf-8
# 计算每一帧的MFCC系数

import numpy
from sigprocess import audio2frame
from sigprocess import pre_emphasis
from sigprocess import spectrum_power
from scipy.fftpack import dct

# 首先,为了适配版本3.x,需要调整xrange的使用,因为对于版本2.x只能使用range,需要将xrange替换为range
try:
    xrange(1)
except:
    xrange = range


def calcMFCC_delta_delta(signal samplerate=16000 win_length=0.025 win_step=0.01 cep_num=13 filters_num=26
                         NFFT=512 low_freq=0 high_freq=None pre_emphasis_coeff=0.97 cep_lifter=22
                         appendEnergy=True):
    ‘‘‘计算13个MFCC+13个一阶微分系数+13个加速系数一共39个系数
    ‘‘‘
    feat = calcMFCC(signal samplerate win_length win_step cep_num filters_num NFFT low_freq high_freq
                    pre_emphasis_coeff cep_lifter appendEnergy)  # 首先获取13个一般MFCC系数
    result1 = derivate(feat)
    result2 = derivate(result1)
    result3 = numpy.concatenate((feat result1) axis=1)
    result = numpy.concatenate((result3 result2) axis=1)
    return result


def calcMFCC_delta(signal samplerate=16000 win_length=0.025 win_step=0.01 cep_num=13 filters_num=26 NFFT=512
                   low_freq=0 high_freq=None pre_emphasis_coeff=0.97 cep_lifter=22 appendEnergy=True):
    ‘‘‘计算13个MFCC+13个一阶微分系数
    ‘‘‘
    feat = calcMFCC(signal samplerate win_length win_step cep_num filters_num NFFT low_freq high_freq
                    pre_emphasis_coeff cep_lifter appendEnergy)  # 首先获取13个一般MFCC系数
    result = derivate(feat)  # 调用derivate函数
    result = numpy.concatenate((feat result) axis=1)
    return result


def derivate(feat big_theta=2 cep_num=13):
    ‘‘‘计算一阶系数或者加速系数的一般变换公式
    参数说明:
    feat:MFCC数组或者一阶系数数组
    big_theta:公式中的大theta,默认取2
    ‘‘‘
    result = numpy.zeros(feat.shape)  # 结果
    denominator = 0  # 分母
    for theta in numpy.linspace(1 big_theta big_theta):
        denominator = denominator + theta ** 2
    denominator = denominator * 2  # 计算得到分母的值
    for row in numpy.linspace(0 feat.shape[0] - 1 feat.shape[0]):
        tmp = numpy.zeros((cep_num))
        numerator = numpy.zeros((cep_num))  # 分子
        for t in numpy.linspace(1 cep_num cep_num):
            a = 0
            b = 0
            s = 0
            for theta in numpy.linspace(1 big_theta big_theta):
                if (t + theta) > cep_num:
                    a = 0
                else:
                    a = feat[int(row)][int(t + theta - 1)]
                if (t - theta) < 1:
                    b = 0
                else:
                    b = feat[int(row)][int(t - theta - 1)]
                s += theta * (a - b)
            numerator[int(t - 1)] = s
        tmp = numerator * 1.0 / denominator
        result[int(row)] = tmp
    return result


def calcMFCC(signal samplerate=16000 win_length=0.025 win_step=0.01 cep_num=13 filters_num=26 NFFT=512
             low_freq=0 high_freq=None pre_emphasis_coeff=0.97 cep_lifter=22 ap

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-12-09 19:36  MFCC\
     文件        9286  2020-11-10 16:19  MFCC\calcmfcc.py
     文件         920  2020-11-19 17:08  MFCC\getWave.py
     文件        4526  2020-11-22 22:58  MFCC\MFCC_test.py
     文件        5878  2020-11-10 15:20  MFCC\sigprocess.py

评论

共有 条评论