python 提取MFCC特征、一阶差分及二阶差分

该博客介绍了一个Python脚本,用于读取wav音频文件,计算梅尔频率倒谱系数(MFCC)特征,并进行一阶和二阶差分。脚本使用python_speech_features库,参数包括窗口大小和步长,最终将MFCC特征保存为npy格式的文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖库:
python-speech-features-0.6

import python_speech_features
import numpy as np
import scipy.io.wavfile
from matplotlib import pyplot as plt
import os

'''
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个倒谱系数替换为总帧能量的对数。 
'''

def get_mfcc(data, fs, winSize, winStep):
    # MFCC
    wav_feature = python_speech_features.mfcc(data, fs,
                  numcep=13, winlen=winSize, winstep=winStep,  # winstep = 0.01
                  nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97)
    # 一阶差分 二阶差分 MFCC 
    d_mfcc_feat = python_speech_features.delta(wav_feature, 1)
    d_mfcc_feat2 = python_speech_features.delta(wav_feature, 2)
    feature = np.hstack((wav_feature, d_mfcc_feat, d_mfcc_feat2))
	# 三者叠加 尺寸为 【len:39】
    return feature


def readWavToMFCCnpy(path, destination, win=0.025, step=0.025):
    idx = 0
    for wav in os.listdir(path):
        idx += 1
        if idx % 100 == 1:
            print("======= ",idx,"MFCC npy done =======")
        sample_rate, signal = scipy.io.wavfile.read(path +"/"+ wav)
        mfcck = get_mfcc(signal, sample_rate, win, step)
        np.save(destination + "/" + "win{}step{}-{}.npy"
                .format(win*1000, step*1000, wav.split(".wav")[0]), mfcck)

    print("----------------------finish get_mfcc----------------------")


if __name__ == '__main__':
	# 源wav路径 和 npy存放路径 和 窗长 和 移动长
    source_path = "D:/ASVsproof/2017v2/ASVspoof2017_V2_train"
    des_path = "D:/ASVsproof/2017v2npy/train"
    readWavToMFCCnpy(source_path, des_path, win=0.025, step=0.01)
### 使用Python实现MFCC特征提取的方法 以下是通过Python实现MFCC特征提取的具体方法及相关代码示例: #### 方法说明 MFCC(Mel-Frequency Cepstral Coefficients)是一种常用的音频特征表示方式,在语音识别和音乐分类等领域有广泛应用。可以通过`librosa`库或`python_speech_features`库来实现MFCC特征提取。 --- #### 示例代码1:基于 `librosa` 的 MFCC 特征提取 以下代码展示了如何利用 `librosa` 库加载音频文件并提取MFCC特征[^2]: ```python import librosa import numpy as np def extract_mfcc_librosa(audio_file, num_mfcc=13): # 加载音频文件 audio, sr = librosa.load(audio_file, sr=None) # 提取MFCC特征 mfcc_features = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=num_mfcc) return mfcc_features # 调用函数提取MFCC特征 audio_file = 'path/to/your/audio/file.wav' mfcc_features = extract_mfcc_librosa(audio_file) # 打印MFCC特征及其形状 print("MFCC Shape:", mfcc_features.shape) # (num_mfcc, time_steps) print(mfcc_features) ``` 此代码片段中,`n_mfcc` 参数指定了要提取MFCC系数的数量,默认为13维。 --- #### 示例代码2:基于 `python_speech_features` 的 MFCC 特征提取 另一种常用的方式是使用 `python_speech_features` 库,它提供了更灵活的功能支持,如下所示[^1]: ```python from python_speech_features import mfcc import librosa def extract_mfcc_python_speech(audio_file, num_mfcc=13): # 加载音频文件 audio, sr = librosa.load(audio_file) # 提取MFCC特征 mfcc_features = mfcc(signal=audio, samplerate=sr, numcep=num_mfcc) return mfcc_features # 调用函数提取MFCC特征 audio_file = 'path/to/your/audio/file.wav' mfcc_features = extract_mfcc_python_speech(audio_file) # 打印MFCC特征及其形状 print("MFCC Shape:", mfcc_features.shape) # (time_steps, num_mfcc) print(mfcc_features) ``` 在此代码中,`numcep` 参数定义了输出的MFCC维度数量,通常设置为13维。 --- #### 示例代码3:扩展到更高维度的MFCC特征 为了增加特征表达能力,可以将一阶差分二阶差分加入原始MFCC特征中,形成39维特征向量[^3]: ```python from python_speech_features import delta import librosa def extract_extended_mfcc(audio_file, base_num_mfcc=13): # 加载音频文件 audio, sr = librosa.load(audio_file) # 基础MFCC特征 mfcc_base = mfcc(signal=audio, samplerate=sr, numcep=base_num_mfcc) # 计算一阶差分 mfcc_delta_1 = delta(mfcc_base, 1) # 计算二阶差分 mfcc_delta_2 = delta(mfcc_base, 2) # 合并三个部分 extended_mfcc = np.hstack((mfcc_base, mfcc_delta_1, mfcc_delta_2)) return extended_mfcc # 调用函数提取扩展后的MFCC特征 audio_file = 'path/to/your/audio/file.wav' extended_mfcc = extract_extended_mfcc(audio_file) # 打印扩展后的MFCC特征及其形状 print("Extended MFCC Shape:", extended_mfcc.shape) # (time_steps, 39) print(extended_mfcc) ``` 上述代码实现了从基础13维MFCC扩展至39维特征的过程。 --- #### 总结 以上三种方法分别适用于不同的需求场景。如果追求简单易用,则可以选择 `librosa`;而需要更多灵活性时可考虑 `python_speech_features` 或者进一步扩展特征维度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值