音频信号处理库librosa

news2024/10/7 17:33:14

参考:
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)]

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度linux社区版 20.8 安装 nvidia-docker,启动Stable Deffision WebUI docker 容器

以下为失败的记录&#xff0c;成功方法直接跳到末尾。 环境 说明&#xff1a; 深度apt 源中无法直接安装nvidia-docker 下载源码 github地址&#xff1a; GitHub - NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs 下载最新release https:…

Win10系统D盘满了怎么清理隐藏的垃圾文件?

Win10系统D盘满了怎么清理隐藏的垃圾文件&#xff1f;电脑磁盘满了之后&#xff0c;就无法存在其它的文件了&#xff0c;有用户的电脑D盘空间满了&#xff0c;那么这个情况怎么去将里面隐藏的一些垃圾文件进行清理呢?接下来我们一起来看看解决的方法分享吧。 方法一&#xff1…

Java EE 初阶---多线程(三)

五、阻塞队列 目录 五、阻塞队列 5.1 阻塞队列是什么 &#xff1f; 5.1.1 生产者消费者模型 ​编辑 5.1.2 标准库中的阻塞队列 5.1.3 消息队列 5.1.4 消息队列的作用 5.2 实现一个阻塞队列 虚假唤醒 六、线程池 6.1 线程池是什么&#xff1f; 6.2 怎么使用线程池&#xf…

5G通信-帧结构及RE和RB

一.NR的帧结构&#xff08;可以参考38.211&#xff09; NR的时间单位由大到小依次为帧&#xff0c;子帧&#xff0c;时隙&#xff0c;符号。 其中一帧数据&#xff08;10ms&#xff09;由10个子帧组成&#xff0c; 一个子帧&#xff08;1ms&#xff09;由若干个时隙组成&#…

3个方案,绕过微信小程序官方审核

描述 虽然绕过官方审核&#xff0c;是不推荐的行为&#xff0c;但是官方的做法有点难以接受。偶尔会碰见奇葩理由被拒绝。例如&#xff1a;类目不对、功能过于简单、涉及金融(其实没有)、涉及官方素材等等。之前小程序不多的时候&#xff0c;你总是求着我加入开发&#xff1b;…

MYSQL相关之不常见变量、排序函数、JDBC数据库与Java连接

用户自定义变量 局部变量--->只在当前begin/end代码块中有效 sql 复制代码 create procedure add ( in a int, in b int ) begin declare c int default 0; set c a b; select c as c; end; 2.用户变量--->在客户端链接到数据库实例整个过程中用户变量都是有效的。…

商户查询的缓存——缓存穿透

4.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库 解决方案&#xff1a; 1.缓存空对象&#xff08;简单粗暴&#xff09; 2.布隆过滤 代码实现&#xff1a; Autowired private String…

在米文动力 EVO Orin 设备 Jetson AGX Orin 下配置 YOLOV5 的环境说明

声明&#xff1a;本博文的配置大部分参考 Jetson AGX Orin安装Anaconda、Cuda、Cudnn、Pytorch、Tensorrt最全教程 1 前言 本文设备内置的模组是 Nvidia Jetson AGX Orin 32GB&#xff0c;算力达到 200 TOPS&#xff0c;aarch64 架构 本文主要参考《Jetson AGX Orin安装Anac…

发明专利公开 -- CSS动画精准实现时钟

上一篇【setTimeout不准时&#xff0c;CSS精准实现计时器功能】的博文&#xff0c;最后提到了通过 CSS 动画实现计时器的方式。 本文详情描述如何通过 CSS 完整实现时钟效果&#xff0c;这也是团队 21 年专利的一项内容&#xff08;专利公布号&#xff1a;CN114003087A&#x…

Docker安装CentOS7

Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 本教程是关于在CentOS上安装社区版Docker的方法&#xff08;Docker C…

SCTP:记录一次Diameter消息卡顿延迟问题

SCTP&#xff1a;记录一次Diameter消息卡顿延迟问题 1、背景 客户端&#xff1a;5个接口机 服务端&#xff1a;2个模拟器&#xff08;模拟HSS&#xff0c;是一个Diameter服务端&#xff09; 5个客户端的地址是&#xff1a; 10.212.27.2910.212.27.5510.212.24.1710.212.24.1…

js编译、执行上下文、作用域链

参考资料 极客时间课程《浏览器工作原理与实践》 – 李兵 《你不知道的JavaScript》-- Kyle Simpson ES5.1规范&#xff1a;https://262.ecma-international.org/5.1/#sec-10.3 ES6规范&#xff1a;https://262.ecma-international.org/6.0/#sec-executable-code-and-execu…

Redis 五大基本数据类型常见命令

一、redis中的常见数据结构 Redis共有5种常见数据结构&#xff0c;分别字符串&#xff08;STRING)、列表&#xff08;LIST&#xff09;、集合&#xff08;SET)、散列&#xff08;HASH&#xff09;、有序集合&#xff08;ZSET)。 二、redis中字符串(String)介绍 String 类型是…

小红书内容种草怎么玩,koc铺量原则

一直以来&#xff0c;小红书平台都以其强大的种草力&#xff0c;而备受品牌关注。许多初创品牌更是将平台看做抢占市场的前沿阵地。那么小红书内容种草怎么玩&#xff0c;koc铺量原则是什么呢?今天来为大家详细介绍一下。 一、什么是koc铺量 要做好新品预热的koc铺量&#xff…

存bean和取bean

准备工作存bean获取bean三种方式 准备工作 bean:一个对象在多个地方使用。 spring和spring boot&#xff1a;spring和spring boot项目&#xff1b;spring相当于老版本 spring boot本质还是spring项目&#xff1b;为了方便spring项目的搭建&#xff1b;操作起来更加简单 spring…

有效和无效的帮助中心区别在哪?如何设计有效的帮助中心?

帮助中心就是一个丰富的知识库&#xff0c;可以对企业的潜在客户进行引导。不仅能够提升用户的使用体验还能为企业塑造更加专业的品牌形象&#xff0c;在使用过程中为用户提供帮助。帮助中心的目的就是为了解决用户在使用过程中遇到的困难&#xff0c;同时为用户的使用提供引导…

DC-9通关详解

信息收集 漏洞发现 result.php处存在sql注入 sqlmap跑信息 python sqlmap.py -u http://192.168.45.146/results.php --data search1 -D users -T UserDetails --dump 拿了几个尝试登录都无效 ssh尝试登录直接拒绝了 再看Staff表 查哈希 进后台 多了一个添加记录的功能 没啥…

数据结构(二叉树)

文章目录 一、树的基础概念1.1 树型结构1.2 树型的概念 二、二叉树2.1 概念 性质2.2 二叉树的存储2.2 二叉树的基本操作&#xff08;1&#xff09;遍历&#xff08;2&#xff09;其他 2.3 二叉树练习 一、树的基础概念 1.1 树型结构 树是一种非线性的数据结构&#xff0c;它…

ChatGPT 由0到1接入 Siri

ChatGPT 由0到1接入 Siri ChatGPT 由0到1接入 Siri第一步:获取 OpenAPI 的 Key第二步:制作快捷指令本教程收集于: AIGC从入门到精通教程 ChatGPT 由0到1接入 Siri 分享如何将 GPT 应用集成到苹果手机的 Siri 中 (当然手机是需要魔法(TZ)的) 第一步:获取 OpenAPI 的…

网络安全可以从事哪些岗位?岗位职责是什么?

伴随着社会的发展&#xff0c;网络安全被列为国家安全战略的一部分&#xff0c;因此越来越多的行业开始迫切需要网安人员&#xff0c;也有不少人转行学习网络安全。那么网络安全可以从事哪些岗位?岗位职责是什么?相信很多人都不太了解&#xff0c;我们一起来看看吧。 1、安全…