python语音信号时频分析_librosa-madmom:音频和音乐分析
读取音频
提取特征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:音频和音乐分析相关推荐
- 频域参数 matlab,基于MATLAB的语音信号时频域参数分析
22 科技广场 2007.9 基于MATLAB的语音信号时频域参数分析 the Character Analysis of Speech Signal with Time and Frequency ...
- python语音信号快速傅里叶变换
python语音信号快速傅里叶变换 文章目录 python语音信号快速傅里叶变换 快速傅里叶变换的理解 引入必要的库 快速傅里叶变换函数用法 快速傅里叶变换的理解 快速傅里叶变换 (fast Four ...
- 同步挤压s变换matlab,同步挤压广义S变换信号时频分解与重构方法与流程
本发明涉及信号处理领域,是一种高精度的同步挤压广义S变换信号时频分解与重构方法. 背景技术: 信号是指携带信息的一元函数或多元函数.在实际的生活中,我们每天都会接触大量的信号,例如,某医院每天看病的人 ...
- 4G5G 信号时频结构的一些总结
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 4G5G 信号时频结构的一些总结 前言 4G LTE时域结构描述 4G LTE频域结构 5G NR时域结构描述 5G SSB的时频结构 ...
- python判定固定时长固定频率的音频是否连续
我有一段时长大约为3.34 s 频率为1khz 的连续音频.该音频输入一个设备,经转换输出后,我想判断该音频是否还连续. 好了,这就是我的需求,看起来比较棘手,但我们稍稍了解音频采样率,码流,音频格式 ...
- 信号能量密度公式_信号时频分析方法汇总
No.1短时傅里叶变换(Short-Time Fourier Transform (Spectrogram)) (1)方法说明ü 短时傅里叶变换是一种线性时频表示方法,可用于非平稳多分量信号的分析. ...
- 语音的时频分析(一)
一.实验目标 1.用matlab完成一个短句的预处理(读取数据.预加重.分帧.加hamming窗),只用基本语句: 2.接着用matlab提取该段语音的短时能量.短时平均幅度和短时平均过零率,利用ma ...
- 信号时频图的横纵坐标对调
博客1:如何翻转信号的时频图 论文有时候需要绘制信号的时频图.Matlab有专用的函数spectrogram可以用来帮助我们绘制信号的时频图.默认的图例是横轴为频率,纵轴为时间.如果希望将横轴和纵轴对 ...
- 基于Matlab模拟常见信号时频分析与模糊函数图
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
最新文章
- GitHub的MySQL高可用性实践
- MDNICE使得你只需要关注内容
- WOrd ,excel实现打印功能
- java中optionnull_用 option 代替 null
- python读excel乱码_Python读写excel练习_去除excel中乱码行,并添加列
- aix 5.3 安装oracle 10g r2,AIX 5.3 安装 Oracle 10g R2(64)
- Win:如何查看自己的电脑是否通过代理服务器进行上网
- python中的__call__和__repr__魔术方法
- PHP的global与GLOBAL
- 2021年,推荐你使用.NET 5的7大原因
- [vue] vue父子组件双向绑定的方法有哪些?
- 服务器的可维护性,可靠性和可维护性
- 入门机器学习(十九)--推荐系统(Recommender Systems)
- 由于找不到appvisvsubsystems32.dll_ftp软件搜索不到,ftp软件搜索不到的2种原因
- 计算机网络令牌总线在哪一页,计算机网络应用基础综合练习
- macOS平台安装metasploit
- 20172304 2017-2018-2 《程序设计与数据结构》第五周学习总结
- VBA代码片之获取行列号
- 背景透明及引发的文字透明问题
- html与js的相互转化,JS和HTML互转