利用python库librosa提取声音信号的mfcc特征及特征融合

  • 前言
  • librosa库介绍
  • librosa 中MFCC特征提取函数介绍
  • 解决特征融合问题
  • 总结

前言

写这篇博文的目的有两个,第一是希望新手朋友们能够通过这篇博文了解到 python 还有这么强大的一个声音处理库;第二则是本人在用该库时发现的一个小问题,就是库由于封装的太完备,在我们想做特征融合时候会出现一点小问题,在这我将指出并提供一种方案。具体的库使用指导还请参照Librosa 0.6

librosa库介绍

Liborsa是python的一个做音乐和声音分析的包,它提供了创建音乐信息检索系统所必要的构建块。这个库包含有丰富的声音信号处理工具,例如声音读取、采样率转换、stft、istft等等。

librosa 中MFCC特征提取函数介绍

# Mel-frequency cepstral coefficients (MFCCs)梅尔倒谱系数
librosa.feature.mfcc(y=None, sr=22050, S=None, n_mfcc=20, dct_type=2, norm='ortho', **kwargs)

参数介绍:
y:声音信号的时域序列
sr:采样频率(默认22050)
S:对数能量梅尔谱(默认为空)
n_mfcc:梅尔倒谱系数的数量(默认取20)
dct_type:离散余弦变换(DCT)的类型(默认为类型2)
norm:如果DCT的类型为是2或者3,参数设置为"ortho",使用正交归一化DCT基。归一化并不支持DCT类型为1
kwargs:如果处理时间序列输入,参照melspectrogram

返回:
M:MFCC序列
例子:

从一个时间序列中计算mfcc

>>> y, sr = librosa.load(librosa.util.example_audio_file(), offset=30, duration=5)
>>> librosa.feature.mfcc(y=y, sr=sr)
array([[ -5.229e+02,  -4.944e+02, ...,  -5.229e+02,  -5.229e+02],[  7.105e-15,   3.787e+01, ...,  -7.105e-15,  -7.105e-15],...,[  1.066e-14,  -7.500e+00, ...,   1.421e-14,   1.421e-14],[  3.109e-14,  -5.058e+00, ...,   2.931e-14,   2.931e-14]])

利用预先计算好的对数能力梅尔谱计算MFCC

>>> S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128,fmax=8000)
>>> librosa.feature.mfcc(S=librosa.power_to_db(S))
array([[ -5.207e+02,  -4.898e+02, ...,  -5.207e+02,  -5.207e+02],[ -2.576e-14,   4.054e+01, ...,  -3.997e-14,  -3.997e-14],...,[  7.105e-15,  -3.534e+00, ...,   0.000e+00,   0.000e+00],[  3.020e-14,  -2.613e+00, ...,   3.553e-14,   3.553e-14]])

解决特征融合问题

采用封装好的函数进行mfcc提取,我们得到的是一个经过分帧加窗及其一系列处理后的数据,要想在每一帧的mfcc后面添加其他特征首先要得到分帧的参数设置,然后对待融合特征采用相同的分帧机制,才能保证二者的融合是在相同帧的情况下进行的。例如我们要对mfcc特征与短时能量特征进行融合,我们在提取二者过程中要保证其分帧方式相同,然后对求得特征进行拼接。mfcc与能量的特征融合代码如下:

import librosa
import matplotlib.pyplot as plt
import numpy as nppath='E:\\Experiment\\soundbank\\cut\\trainall\\screams\\2\\4,00001_2__11.wav' # 声音文件绝对路径
y,sr=librosa.load(path,None) # 以原采样频率读取声音文件数据,并返回该数据及其采样频率
# 设置梅尔滤波器组参数,并设置分帧参数n_fft--帧长,hp_length--帧移
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=60,n_fft=1024, hop_length=512,fmax=16000)
mfcc=librosa.feature.mfcc(y, sr, S=librosa.power_to_db(S),n_mfcc=40) # 提取mfcc系数
stft_coff=abs(librosa.stft(y,1024,512,1024)) #分帧然后求短时傅里叶变换,分帧参数与对数能量梅尔滤波器组参数设置要相同
energy = np.sum(np.square(stft_coff),0) #求每一帧的平均能量
MFCC_Energy = np.vstack((mfcc,energy)) # 将每一帧的MFCC与短时能量拼接在一起

其他特征融合方式与上相同。

总结

python库虽然多,为了以后更好的发展还是建议学习时候从原理开始学起,后面我将会继续补充关于python编程过程中遇到的一些小问题,以及技巧,欢迎关注交流。

利用python声音处理库librosa提取声音信号的mfcc特征及特征融合相关推荐

  1. 用python画玫瑰花教程-利用Python的turtle库绘制玫瑰教程

    用Python的turtle库绘图是很简单的,闲来无事就画了一个玫瑰花,下面奉上源码.... 源码: ''' Created on Nov 18, 2017 @author: QiZhao ''' i ...

  2. 利用Python的turtle库画自行车

    利用Python的turtle库画自行车 前言 前言总得说点什么.疫情在家,慕课上学习北理工嵩天等老师的<python语言程序设计>[1],觉得turtle画图,挺有意思,既然骑不了自行车 ...

  3. 利用Python的turtle库绘制四叶草

    利用Python的turtle库绘制四叶草 turtle库的基本使用 turtle库属于Python的标准库,即可以直接用import导入,无需额外安装下载. 这个博主写的蛮好的,我就不献丑了嘿嘿嘿( ...

  4. 下面哪个python库不能用于提取网页信息_利用python的webscraping库采集抓取爱帮网电话号码...

    利用python的webscraping模块抓取爱帮网电话号码,本文采集该页面的标题和2个电话号码, 具体的python代码: # -*- coding: UTF-8 -*- ''' Created ...

  5. Python使用标准库zipfile提取docx文档中所有图片

    清华科技大讲堂免费直播课预告: 免费直播课|Python数据可视化与科学计算可视化案例分享,5月28日晚20:00-21:30 ============ 哔哩哔哩网站免费视频观看地址: 董老师在哔哩哔 ...

  6. python连接opencv库_利用Python和OpenCV库将URL转换为OpenCV格式的方法

    今天的博客是直接来源于我自己的个人工具函数库. 过去几个月,有些PyImageSearch读者电邮问我:"如何获取URL指向的图片并将其转换成OpenCV格式(不用将其写入磁盘再读回)&qu ...

  7. 利用python的turtle库绘制玫瑰的步骤_用python turtle画玫瑰

    1.turtle 库 2.画玫瑰的代码: import turtle turtle.penup() turtle.left() turtle.fd() turtle.pendown() turtle. ...

  8. 利用python的turtle库写生日祝福

    还在简单的写生日祝福吗?自从学了python,我们可以更高大上一点,利用python的海龟画图来"画"个生日祝福. from turtle import * lf=left bd= ...

  9. 利用python的turtle库画一个图形

    今天我们用python的turtle库制作一个简单的图形(新手必看) [注:turtle是python的标准自带库,无需安装!] 好的废话不多说我们开始写代码 #制作人:中将 #一起自学python ...

最新文章

  1. MySQL与MongoDB之SQL语法对比
  2. android文件选择器_Android存储空间的最佳实践(上)
  3. [Vue warn]: Error in render: TypeError: _self.$scopedSlots.default is not a function 错误解决
  4. HEVC代码学习0:HM使用+码流分析教程
  5. Linux zmap安装
  6. 心里窝火无语的图片_很无语的心情说说图片
  7. 现场总线与计算机网络的最大区别,现场总线与局域网的区别是什么
  8. java集合(超详细)
  9. SIM7600模块固件升级(模块自身升级)
  10. 计算机提示存储空间不足怎么办,Win7软件提示"存储空间不足,无法处理此命令"怎么办...
  11. .fire勒索病毒如何删除 .fire后缀文件恢复(Dharma)
  12. 数学建模笔记(十五):多元统计分析及R语言建模(判别分析、聚类分析、主成分分析、因子分析,含数据代码注释,均可供运行)
  13. [转] R 解读逻辑回归结果:回归系数,OR
  14. Windows10安装WDK报错setup cannot locate windows debugging wdk integration-x86_en-us.msi
  15. 美国智能网联最新政策动态(2021年9-11月)
  16. 网络检测,排错的顺序与方法
  17. 计算机二级系统班C语言讲义,计算机二级C语言讲义8
  18. 视频融合平台EasyCVR如何快速更改快照文件的raw后缀?
  19. 【PHP开源产品】Ecshop的商品筛选功能实现分析之一(主要对category.php进行分析)
  20. Windows下载安装docker详细步骤

热门文章

  1. vue 之 路由懒加载
  2. [MySQL] 运算符
  3. smil_SMIL简介-鞋串上的多媒体演示
  4. CISSP 第五章 物理和环境安全
  5. HNOI2008玩具装箱(T_OY)bzoj1010
  6. 英伟达RTX 2080/2080Ti发布及UltraLAB采用最新turing图灵架构深度学习硬件配置推荐
  7. Java并发编程-Executor框架之Callable和Future接口
  8. mysql数据备份管理
  9. 【基于stm32c8t6的智能加湿系统】
  10. 四级网络工程师试题二