• 读取音频

  • 提取特征Log-Mel Spectrogram

  • MFCC

  • 绘制波形图和梅尔频谱图

  • prerequisites

    • install

  • 起始点检测 onset detection tutorial

librosa

Librosa是一个用于音频、音乐分析、处理的python工具包,一些常见的时频处理、特征提取、绘制声音图形等功能应有尽有,功能十分强大

安装

pip install librosa

分析步骤

-专业名词:- sr:采样率、hop_length:帧移、overlapping:连续帧之间的重叠部分、n_fft:窗口大小、spectrum:频谱、spectrogram:频谱图或叫做语谱图、amplitude:振幅、mono:单声道、stereo:立体声

读取音频

# 加载音频data,sample_rate = librosa.load('./test.wav')print('data:',data.shape,'sample_rate:',sample_rate)

提取特征Log-Mel Spectrogram

  • Log-Mel Spectrogram特征是目前在语音识别和环境声音识别中很常用的一个特征,由于CNN在处理图像上展现了强大的能力,使得音频信号的频谱图特征的使用愈加广泛,甚至比MFCC使用的更多。
# 特征提取:Log-Mel Spectrogram特征melspec = librosa.feature.melspectrogram(data, sample_rate, n_fft=1024, hop_length=512, n_mels=128)# n_fft指的是窗的大小,这里为1024;hop_length表示相邻窗之间的距离,这里为512,也就是相邻窗之间有50%的overlap;n_mels为mel bands的数量,这里设为128print('Mel频率的维度(频域):',melspec.shape[0],'Mel频率的时间帧长度(时域):',melspec.shape[1],'show data:',melspec)# 转化为对数: Log-Mel Spectrogram特征是音频信号的时频表示特征。logmelspec = librosa.power_to_db(melspec)print('Mel频率的维度(频域):',logmelspec.shape[0],'Mel频率的时间帧长度(时域):',logmelspec.shape[1],'show data:',logmelspec)

MFCC

  • MFCC特征是一种在自动语音识别和说话人识别中广泛使用的特征
# MFCC特征是一种在自动语音识别和说话人识别中广泛使用的特征mfccs = librosa.feature.mfcc(y=data, sr=sample_rate, n_mfcc=40)print('mfccs',mfccs.shape,mfccs)

绘制波形图和梅尔频谱图

plt.figure()plt.subplot(2, 1, 1)# 绘制波形图librosa.display.waveplot(data,sample_rate)plt.title('beat waveform')

plt.subplot(2, 1, 2)# 绘制频谱图librosa.display.specshow(logmelspec, sr=sample_rate, x_axis='time', y_axis='mel')plt.title('Mel spectrogram')plt.tight_layout() #保证图不重叠plt.show()

madmom是什么?

  • madmom是专注于music信息抽取的一个python开发包。
  • madmom github

install

prerequisites

python=2.7+ 或python=3.5+

  • numpy>=1.13.4
  • scipy>=0.16
  • cython>=0.25
  • mido>=1.2.6
  • pytest
  • pyaudio
  • pyfftw

install

  • pip install madmom

音频信号处理

  • 读取音频数据
import numpy as npimport matplotlib.pyplot as pltimport madmom

signal,sample_rate = madmom.audio.signal.load_wave_file('data/sample.wav')print('sample',signal,type(signal),' sample rate',sample_rate)

# 读取音频数字信号sig = madmom.audio.signal.Signal('data/sample.wav')print('sig',sig,' sample_rate',sig.sample_rate)

# 将信号重采样framedsignal = madmom.audio.signal.FramedSignal(sig,frame_size=2048,hop_size=441)print('fs',framedsignal,framedsignal.frame_size,' [0]',framedsignal[0],' [10]',framedsignal[10] ,      ' fps',framedsignal.fps,' num_frames',framedsignal.num_frames,'hop_size',framedsignal.hop_size)

fs = madmom.audio.signal.FramedSignal(sig, frame_size=2048, fps=200)print('fs',fs,fs.frame_size,' [0]',fs[0],' [10]',fs[10] ,      ' fps',fs.fps,' num_frames',fs.num_frames,'fs.hop_size',fs.hop_size)
  • 短时傅里叶变换STFT

    • 声谱图:对原始信号进行分帧加窗后,可以得到很多帧,对每一帧做FFT(快速傅里叶变换),傅里叶变换的作用是把时域信号转为频域信号,把每一帧FFT后的频域信号(频谱图)在时间上堆叠起来就可以得到声谱图。
    • DCT跟FFT的关系就是:FFT是实现DCT的一种快速算法。
    • STFT短时傅里叶变换,实际上是对一系列加窗数据做FFT。
    • 采样率Fs为16KHz,表示一秒钟内采样16000个点,这个时候如果音频长度是10秒,那么raw waveform中就有160000个值,值的大小通常表示的是振幅。
    • 原始信号
    • STFT
    • DCT(离散傅里叶变换
    • 声谱图
# STFTstft = madmom.audio.stft.STFT(fs)print('stft',stft,type(stft),stft[0])

# 频谱图spec = madmom.audio.spectrogram.Spectrogram(stft)plt.imshow(spec[:, :200].T, aspect='auto', origin='lower')plt.show()

起始点检测 onset detection tutorial

  • SuperFlux onset detection algorithm
from scipy.ndimage.filters import maximum_filter

spec = madmom.audio.spectrogram.Spectrogram('data/sample.wav')print('spec',spec,type(spec))

# calculate the differencediff = np.diff(spec, axis=0)# keep only the positive differencespos_diff = np.maximum(0, diff)# sum everything to get the spectral fluxsf = np.sum(pos_diff, axis=1)

plt.figure()plt.imshow(spec[:, :200].T, origin='lower', aspect='auto')plt.show()

plt.figure()plt.imshow(pos_diff[:, :200].T, origin='lower', aspect='auto')plt.show()

plt.figure()plt.plot(sf)plt.show()

python语音信号时频分析_librosa-madmom:音频和音乐分析相关推荐

  1. 频域参数 matlab,基于MATLAB的语音信号时频域参数分析

    22 科技广场 2007.9 基于MATLAB的语音信号时频域参数分析 the Character Analysis of Speech Signal with Time and Frequency ...

  2. python语音信号快速傅里叶变换

    python语音信号快速傅里叶变换 文章目录 python语音信号快速傅里叶变换 快速傅里叶变换的理解 引入必要的库 快速傅里叶变换函数用法 快速傅里叶变换的理解 快速傅里叶变换 (fast Four ...

  3. 同步挤压s变换matlab,同步挤压广义S变换信号时频分解与重构方法与流程

    本发明涉及信号处理领域,是一种高精度的同步挤压广义S变换信号时频分解与重构方法. 背景技术: 信号是指携带信息的一元函数或多元函数.在实际的生活中,我们每天都会接触大量的信号,例如,某医院每天看病的人 ...

  4. 4G5G 信号时频结构的一些总结

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 4G5G 信号时频结构的一些总结 前言 4G LTE时域结构描述 4G LTE频域结构 5G NR时域结构描述 5G SSB的时频结构 ...

  5. python判定固定时长固定频率的音频是否连续

    我有一段时长大约为3.34 s 频率为1khz 的连续音频.该音频输入一个设备,经转换输出后,我想判断该音频是否还连续. 好了,这就是我的需求,看起来比较棘手,但我们稍稍了解音频采样率,码流,音频格式 ...

  6. 信号能量密度公式_信号时频分析方法汇总

    No.1短时傅里叶变换(Short-Time Fourier Transform (Spectrogram)) (1)方法说明ü 短时傅里叶变换是一种线性时频表示方法,可用于非平稳多分量信号的分析. ...

  7. 语音的时频分析(一)

    一.实验目标 1.用matlab完成一个短句的预处理(读取数据.预加重.分帧.加hamming窗),只用基本语句: 2.接着用matlab提取该段语音的短时能量.短时平均幅度和短时平均过零率,利用ma ...

  8. 信号时频图的横纵坐标对调

    博客1:如何翻转信号的时频图 论文有时候需要绘制信号的时频图.Matlab有专用的函数spectrogram可以用来帮助我们绘制信号的时频图.默认的图例是横轴为频率,纵轴为时间.如果希望将横轴和纵轴对 ...

  9. 基于Matlab模拟常见信号时频分析与模糊函数图

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

最新文章

  1. GitHub的MySQL高可用性实践
  2. MDNICE使得你只需要关注内容
  3. WOrd ,excel实现打印功能
  4. java中optionnull_用 option 代替 null
  5. python读excel乱码_Python读写excel练习_去除excel中乱码行,并添加列
  6. aix 5.3 安装oracle 10g r2,AIX 5.3 安装 Oracle 10g R2(64)
  7. Win:如何查看自己的电脑是否通过代理服务器进行上网
  8. python中的__call__和__repr__魔术方法
  9. PHP的global与GLOBAL
  10. 2021年,推荐你使用.NET 5的7大原因
  11. [vue] vue父子组件双向绑定的方法有哪些?
  12. 服务器的可维护性,可靠性和可维护性
  13. 入门机器学习(十九)--推荐系统(Recommender Systems)
  14. 由于找不到appvisvsubsystems32.dll_ftp软件搜索不到,ftp软件搜索不到的2种原因
  15. 计算机网络令牌总线在哪一页,计算机网络应用基础综合练习
  16. macOS平台安装metasploit
  17. 20172304 2017-2018-2 《程序设计与数据结构》第五周学习总结
  18. VBA代码片之获取行列号
  19. 背景透明及引发的文字透明问题
  20. html与js的相互转化,JS和HTML互转

热门文章

  1. Matlab程序仿真与调试入门
  2. Python命令行实现—查全国7天天气
  3. 单进程服务器(python版)
  4. LeerCode 题 - 14. 最长公共前缀
  5. Python3 字典 items() 方法
  6. 布局网页表格要求其列平均分布的简单操作
  7. 虚拟语气和推测(一)
  8. [NLP]基于IMDB影评情感分析之BERT实战-测试集上92.24%
  9. wordcloud词云使用方法
  10. java变量传递给asp,我应该如何将多个参数传递给ASP.Net Web API GET?