音频信号处理库librosa

参考:
1. librosa官网
2. librosa语音信号处理
3. 语音信号处理库 ——Librosa
4. librosa音频处理教程
5. Python音频信号处理库函数librosa介绍

0 谱分析函数

在这里插入图片描述

1. librosa 读取信号

librosa.load(path, sr=22050, mono=True, offset=0.0, duration=None)

读取音频文件。默认采样率是22050,如果要保留音频的原始采样率,使用sr = None。

参数:

  • path :音频文件的路径。

  • sr :采样率,如果为“None”使用音频自身的采样率

  • mono :bool,是否将信号转换为单声道

  • offset :float,在此时间之后开始阅读(以秒为单位)

  • duration:float,仅加载这么多的音频(以秒为单位)
    返回:

  • y :音频时间序列

  • sr :音频的采样率

1. 加载数据

librosa.load(path, *, sr=22050, mono=True, offset=0.0, duration=None, dtype=<class 'numpy.float32'>, res_type='soxr_hq')

** 读取音频文件。默认采样率是22050,如果要保留音频的原始采样率,使用sr = None。默认单通道,如果要保留原始通道数,使用mono=False**

参数:

  • path :音频文件的路径。
  • sr :采样率,如果为“None”使用音频自身的采样率
  • mono :bool,是否将信号转换为单声道
  • offset :float,在此时间之后开始阅读(以秒为单位)
  • duration:float,仅加载这么多的音频(以秒为单位)

返回:

  • y :音频时间序列
  • sr :音频的采样率

在这里插入图片描述

2. STFT 短时傅里叶变换

librosa.stft(y, n_fft=2048, hop_length=None, win_length=None, window='hann', center=True, pad_mode='reflect')

短时傅立叶变换(STFT),返回一个复数矩阵使得D(f,t)

  • 复数的实部:np.abs(D(f,t))频率的振幅
  • 复数的虚部:np.angle(D(f,t))频率的相位

参数:

  • y:音频时间序列

  • n_fft:FFT窗口大小,n_fft=hop_length+overlapping

  • hop_length:帧移,如果未指定,则默认win_length / 4。

  • win_length:每一帧音频都由window()加窗。窗长win_length,然后用零填充以匹配N_FFT。默认win_length=n_fft。

  • window

    :字符串,元组,数字,函数 shape =(n_fft, )

    • 窗口(字符串,元组或数字);
    • 窗函数,例如scipy.signal.hanning
    • 长度为n_fft的向量或数组
  • center

    :bool

    • 如果为True,则填充信号y,以使帧 D [:, t]以y [t * hop_length]为中心。
    • 如果为False,则D [:, t]从y [t * hop_length]开始
  • dtype:D的复数值类型。默认值为64-bit complex复数

  • pad_mode:如果center = True,则在信号的边缘使用填充模式。默认情况下,STFT使用reflection padding。

返回:

  • STFT矩阵,shape =
import librosa
import numpy as np
import matplotlib.pyplot as plt
signal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True)  # sr=none 获取信号的采样频率  否则默认为22050;  mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= False
SSTFT = librosa.stft(signal, n_fft=2048, hop_length=None, win_length=None, window='hann', center=True, pad_mode='reflect')
S = np.abs(SSTFT)
fig,ax = plt.subplots()
img = librosa.display.specshow(librosa.amplitude_to_db(S,ref=np.max),y_axis='log', x_axis='time',ax=ax)
ax.set_title('Power spectrogram')
fig.colorbar(img, ax=ax, format="%+2.0f dB")
plt.show()

fs: 48000

signal:(583680)

在这里插入图片描述

3.istft 短时傅里叶逆变换

librosa.istft(stft_matrix, hop_length=None, win_length=None, window='hann', center=True, length=None)

短时傅立叶逆变换(ISTFT),将复数值D(f,t)频谱矩阵转换为时间序列y,窗函数、帧移等参数应与stft相同

参数:

  • stft_matrix :经过STFT之后的矩阵

  • hop_length :帧移,默认为[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bRHd0a0d-1683873363702)(https://math.jianshu.com/math?formula=%5Cfrac%7B%F0%9D%91%A4%F0%9D%91%96%F0%9D%91%9B%F0%9D%91%99%F0%9D%91%92%F0%9D%91%9B%F0%9D%91%94%F0%9D%91%A1%E2%84%8E%7D%7B4%7D)]

  • win_length :窗长,默认为n_fft

  • window

    :字符串,元组,数字,函数或shape = (n_fft, )

    • 窗口(字符串,元组或数字)
    • 窗函数,例如scipy.signal.hanning
    • 长度为n_fft的向量或数组
  • center

    :bool

    • 如果为True,则假定D具有居中的帧
    • 如果False,则假定D具有左对齐的帧
  • length:如果提供,则输出y为零填充或剪裁为精确长度音频

返回:

  • y :时域信号
import librosa
import numpy as np
import matplotlib.pyplot as plt
signal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True)  # sr=none 获取信号的采样频率  否则默认为22050;  mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= False
SSTFT = librosa.stft(signal, n_fft=2048, hop_length=None, win_length=None, window='hann', center=True, pad_mode='reflect')
Y = librosa.istft(SSTFT)
print(np.max(np.abs(Y-signal)))
plt.plot(Y)

out: 1.1920929e-07

在这里插入图片描述

4. ifgram(已取消)

librosa.core.ifgram(y, sr=22050, n_fft=2048, hop_length=None, win_length=None, window=’hann’, norm=False, center=True, ref_power=1e-06, clip=True, dtype=<class ‘numpy.complex64’>, pad_mode=’reflect’)

计算瞬时功率,

librosa 0.8 版本之后,该函数取消了

5. cqt-常数Q变换

librosa.cqt(y, *, sr=22050, hop_length=512, fmin=None, n_bins=84, bins_per_octave=12, tuning=0.0, filter_scale=1, norm=1, sparsity=0.01, window='hann', scale=True, pad_mode='constant', res_type='soxr_hq', dtype=None)

恒Q变换,指中心频率按指数规律分布,滤波带宽不同、但中心频率与带宽比为常量Q的滤波器组。它与傅立叶变换不同的是,它频谱的横轴频率不是线性的,而是基于log2为底的,并且可以根据谱线频率的不同该改变滤波窗长度,以获得更好的性能。

参数:

  • y:音频时间序列
  • sr:采样率,如果为“None”使用音频自身的采样率
  • hop_length :帧移,默认为[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来
  • fmin: 最小频率,默认C1=32.7Hz
  • n_bins:频率箱数
  • bins_per_octave:每个八度的箱数
  • tuning:以箱的分数单位调整偏移量,
    • None:调谐将从信号中自动估计;生成的 CQT 的最小频率将修改为 。fmin * 2**(tuning / bins_per_octave)

返回:

  • 每个频率在每个时刻的恒常Q值
import matplotlib.pyplot as plt
import librosa
import numpy as np
# 1. Generate and plot a constant-Q power spectrum
signal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True)  # sr=none 获取信号的采样频率  否则默认为22050;  mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= False
C1 = np.abs(librosa.cqt(signal, sr=fs))
fig, ax = plt.subplots()
img = librosa.display.specshow(librosa.amplitude_to_db(C1, ref=np.max),
                               sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)
ax.set_title('Constant-Q power spectrum')
fig.colorbar(img, ax=ax, format="%+2.0f dB")
#plt.show()

# 2. Limit the frequency range
C2 = np.abs(librosa.cqt(signal, sr=fs, fmin=librosa.note_to_hz('C2'),
                n_bins=60))
fig, ax = plt.subplots()
img = librosa.display.specshow(librosa.amplitude_to_db(C2, ref=np.max),
                               sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)
ax.set_title('Constant-Q Limit the frequency range power spectrum')
fig.colorbar(img, ax=ax, format="%+2.0f dB")
#plt.show()

# 3. Using a higher frequency resolution
C3 = np.abs(librosa.cqt(signal, sr=fs, fmin=librosa.note_to_hz('C2'),
                n_bins=80, bins_per_octave=12 * 2))
fig, ax = plt.subplots()
img = librosa.display.specshow(librosa.amplitude_to_db(C3, ref=np.max),
                               sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)
ax.set_title('Constant-Q  higher frequency resolution power spectrum')
fig.colorbar(img, ax=ax, format="%+2.0f dB")
plt.show()

6. ICQT-常数Q逆变换

librosa.icqt(C, *, sr=22050, hop_length=512, fmin=None, bins_per_octave=12, tuning=0.0, filter_scale=1, norm=1, sparsity=0.01, window='hann', scale=True, length=None, res_type='soxr_hq', dtype=None)
import librosa
import numpy as np
import matplotlib.pyplot as plt
signal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True)  # sr=none 获取信号的采样频率  否则默认为22050;  mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= False
C = np.abs(librosa.cqt(signal, sr=fs))
Y= librosa.icqt(C=C, sr=fs)
print(np.max(np.abs(Y-signal)))
plt.plot(Y)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uDqh0ccT-1683873363704)(librosa 使用初探.assets/image-20230512105734836.png)]

7. hybrid_cqt

混合CQT变换

librosa.hybrid_cqt(y, *, sr=22050, hop_length=512, fmin=None, n_bins=84, bins_per_octave=12, tuning=0.0, filter_scale=1, norm=1, sparsity=0.01, window='hann', scale=True, pad_mode='constant', res_type='soxr_hq', dtype=None)
import matplotlib.pyplot as plt
import librosa
import numpy as np
# 1. Generate and plot a constant-Q power spectrum
signal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True)  # sr=none 获取信号的采样频率  否则默认为22050;  mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= False
C1 = np.abs(librosa.hybrid_cqt(signal, sr=fs))
fig, ax = plt.subplots()
img = librosa.display.specshow(librosa.amplitude_to_db(C1, ref=np.max),
                               sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)
ax.set_title('hybrid_cqt power spectrum')
fig.colorbar(img, ax=ax, format="%+2.0f dB")
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JH7buvY7-1683873363704)(librosa 使用初探.assets/image-20230512113619081.png)]

8. pseudo_cqt

librosa.pseudo_cqt(y, *, sr=22050, hop_length=512, fmin=None, n_bins=84, bins_per_octave=12, tuning=0.0, filter_scale=1, norm=1, sparsity=0.01, window='hann', scale=True, pad_mode='constant', dtype=None)
import matplotlib.pyplot as plt
import librosa
import numpy as np
# 1. Generate and plot a constant-Q power spectrum
signal, fs = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True)  # sr=none 获取信号的采样频率  否则默认为22050;  mono 默认为True,获取单通道信息,若要获取所有通道信息,mono= False
C1 = np.abs(librosa.pseudo_cqt(signal, sr=fs))
fig, ax = plt.subplots()
img = librosa.display.specshow(librosa.amplitude_to_db(C1, ref=np.max),
                               sr=fs, x_axis='time', y_axis='cqt_note', ax=ax)
ax.set_title('pseudo_cqt power spectrum')
fig.colorbar(img, ax=ax, format="%+2.0f dB")
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0JymJvce-1683873363704)(librosa 使用初探.assets/image-20230512133843022.png)]

9. vqt

librosa.vqt(y, *, sr=22050, hop_length=512, fmin=None, n_bins=84, intervals='equal', gamma=None, bins_per_octave=12, tuning=0.0, filter_scale=1, norm=1, sparsity=0.01, window='hann', scale=True, pad_mode='constant', res_type='soxr_hq', dtype=None)
import librosa
import numpy as np
import matplotlib.pyplot as plt
y, sr = librosa.load('audio_Data/哈密实地振动.wav',sr=None,mono=True)
C = np.abs(librosa.cqt(y, sr=sr))
V = np.abs(librosa.vqt(y, sr=sr))
fig, ax = plt.subplots(nrows=2, sharex=True, sharey=True)
librosa.display.specshow(librosa.amplitude_to_db(C, ref=np.max),
                         sr=sr, x_axis='time', y_axis='cqt_note', ax=ax[0])
ax[0].set(title='Constant-Q power spectrum', xlabel=None)
ax[0].label_outer()
img = librosa.display.specshow(librosa.amplitude_to_db(V, ref=np.max),
                               sr=sr, x_axis='time', y_axis='cqt_note', ax=ax[1])
ax[1].set_title('Variable-Q power spectrum')
fig.colorbar(img, ax=ax, format="%+2.0f dB")
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VjDgfG4-1683873363705)(librosa 使用初探.assets/image-20230512135056199.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/18949.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年5月DAMA-CDGA/CDGP数据治理认证开班啦,我要报名学习

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中&#xff01; 考试开放地区&#xff1a;北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中&#xff0c;报名从速&#xff01; DAMA认证为数据…

06-HTML-列表标签

1、 <ul> 标签定义无序列表。 2、<ol> 标签定义有序列表。 属性值描述compactcompact HTML5 中不支持。HTML 4.01 中不赞成使用。 规定列表呈现的效果比正常情况更小巧。 reversedreversed规定列表顺序为降序。(9,8,7...)startnumber规定有序列表的起始值。type 1A…

QUIC在京东直播的应用与实践 | 京东云技术团队

作者&#xff1a;京东零售 周凯 一. 前言与背景 国内的互联网直播技术从2005年前后兴起&#xff0c;彼时最具代表性的直播产品是由PPLive创始人姚欣在华中科技大学就读期间发起的校园直播项目PPLive。当时的直播技术用的还是基于windows系统自带的mediaplayer内置的COM组件开…

《Linux 内核设计与实现》08. 下半部和推后执行的工作

文章目录 下半部软中断软中断的实现使用软中断 tasklettasklet 的实现使用 tasklet 工作队列工作队列的实现使用工作队列 下半部 中断处理程序的局限性&#xff1a; 中断处理程序以异步方式执行&#xff0c;并且可能打断其它代码&#xff0c;因此为了避免被打断的代码停止时间…

如何实现PLC为主站的开关量自组网无线通信?

本方案是基于Modbus RTU协议下实现的1主多从自组网无线通信形式&#xff0c;主站为S7-1200 PLC&#xff0c;DTD433H作为从站。DTD433H具备输入和输出开关量信号功能&#xff0c;信号传输方向由用户原系统主从设备所实现的功能决定。方案中采用无线开关量信号测控终端DTD433H与欧…

Java实现杨辉三角

1 问题 实现杨辉三角。 2 方法 public class textttt01 { public static void main(String[] args) { //定义了一个长度为10&#xff0c;高度为10的二维数组&#xff0c;数组中的值都为0&#xff1b; int[][] arrnew int[10][10]; for (int i0;i<ar…

TCP四次挥手

TCP四次挥手详解 文章目录 TCP四次挥手详解1. TCP四次挥手过程和状态变迁2. 为什么挥手需要四次&#xff1f;3. 为什么中间的ACK和FIN不可以像三次握手那样合为一个报文段呢&#xff1f;4. 为什么TIME_WAIT等待的时间是2MSL&#xff1f;5. 等待2MSL的意义5.1 保证客户端最后发送…

Linux环境安装iperf3(网络性能测试工具)

[rootlocalhost ]# yum search iperf 已加载插件&#xff1a;fastestmirror Loading mirror speeds from cached hostfile* base: mirrors.tuna.tsinghua.edu.cn* extras: mirrors.huaweicloud.com* updates: mirrors.tuna.tsinghua.edu.cnN/S matched: iperf iperf3-devel.i6…

Otter CTF--Network(web网络1-3)

目录 一.题目 1.Birdmans Data 2.Look At Me 3.Otter Leak 一.题目 网址 OtterCTF 1.Birdmans Data 下载文件&#xff1a; .pcap文件 Wireshark打开&#xff1a; 既然是web 我们就从http分析&#xff1a; 追踪流 HTTP流&#xff1a; 发现两个密钥key&#xff1a; {"…

nas各种共享访问协议的使用(smb,nfs,ftp,ftps,sftp,afp,webdav)

使用群晖、UNRAID、FREENAS等NAS系统的小伙伴肯定会有传输文件的需求&#xff0c;无论是在本地局域网还是远端设备&#xff0c;这种情况下当然可以使用群晖的WEB管理界面中File Station&#xff0c;但是这种方式便捷性不够&#xff0c;于是nas与本地设备文件的传输最好的方式是…

ABAP 好用的事务码工具记录(持续更新)

性能优化类 SM50-某个程序RUNNING时间过长的时候&#xff0c;可以直接跳转到对应程序位置。 使用说明&#xff1a;一般选择仅活动进程&#xff0c;过滤列表中的活动程序和用户名&#xff0c;这样可以快速的定位到进程。 通过管理>>程序>>调试直接跳转到程序运行的…

MySQL备份与恢复

数据库备份的重要性&#xff1a; 备份的主要目的是灾难恢复 在生产环境中&#xff0c;数据的安全性至关重要 任何数据的丢失都可能产生严重的后果 造成数据丢失的原因&#xff1a; 程序错误人为操作错误运算错误磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃 数…

java变量与方法

方法 构造方法 定义&#xff1a;构造方法是一个特殊的成员方法&#xff0c;名字必须与类相同&#xff0c;在创建对象时由编译器自动调用&#xff0c;并且在生命周期内只调用一次 演示&#xff1a; 特性&#xff1a; 1.构造方法名字必须与类名相同&#xff08;如果不同&#…

【Linux】信号的保存

信号的小细节真的很多~ 文章目录 前言一、信号的保存总结 前言 首先我们先引出一个新的概念&#xff0c;叫核心转储。linux系统提供了一种能力&#xff0c;操作系统可以将一个进程在异常的时候将核心代码部分进行核心转储&#xff0c;将内存中进程的相关数据全部dump到磁盘中&…

写文章的软件-一款写作文章的软件

写文章的软件 写文章的软件是一种工具&#xff0c;可以帮助用户轻松快速地创作高质量的文章。该软件一般包括以下几个主要功能&#xff1a; 写作界面&#xff1a;提供简洁、美观的写作界面&#xff0c;让用户专注于文章创作&#xff0c;同时可以进行排版、字体、颜色等调整。 …

函数(1)

文章目录 目录1. 函数是什么2. 库函数3. 自定义函数4. 函数的参数4.1 实际参数&#xff08;实参&#xff09;4.2 形式参数&#xff08;形参&#xff09; 5. 函数的调用5.1 传值调用5.2 传址调用5.3 练习 附&#xff1a; 目录 函数是什么库函数自定义函数函数的参数函数的调用函…

消息队列中的事务消息

大家好&#xff0c;我是易安&#xff01;今天我们谈一谈消息队列中的事务消息这个话题。 一说起事务&#xff0c;你可能自然会联想到数据库。我们日常使用事务的场景&#xff0c;绝大部分都是在操作数据库的时候。像MySQL、Oracle这些主流的关系型数据库&#xff0c;也都提供了…

电阻阻值读取方法、电容容值的读取方法

电阻、电容的数值读取方法 文章目录 电阻、电容的数值读取方法前言1、电阻读数1.1 贴片电阻1.2.直插色环电阻 2、电容读数2.1 电容单位换算2.2 电容读数方法 前言 现在随着电子产品的不断升级优化&#xff0c;做到体积越来越小了&#xff0c;以前发现还是用得很多直插电阻和一…

GDD471A001 PLC / DCS维护日志

​ GDD471A001 PLC / DCS维护日志 PLC维护日志 PLC/DCS 维护日志将帮助您跟踪过去的故障、解决方案、零件更换。如果以后再次出现同样的问题&#xff0c;跟踪日志将帮助您立即解决。 您的控制系统的可靠性可以通过参考维护日志来确定。 使用 PLC/DCS 维护日志可以识别频繁出…

WGCNA | 不止一个组的WGCNA怎么分析嘞!?~(一)(共识网络分析-第一步-数据整理)

1写在前面 最近又是忙碌的一米&#xff0c;做不完的手术&#xff0c;收不完的病人&#xff0c;前途堪忧&#xff0c;收入更是不堪入目。&#x1f972; 把之前的WGCNA教程再补一补吧&#xff0c;之前介绍的是雌性鼠的表型数据分析&#xff0c;只有一组&#xff0c;相对简单。&am…