语音识别之其他谱图

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/

❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我

语音识别之其他谱图

  • 其他谱图
    • 一、任务需求
    • 二、任务目标
          • 1、掌握梅尔频谱图
          • 2、掌握音名修饰
          • 3、掌握Chroma特征表示
          • 4、掌握音符表示
          • 5、掌握非谱数据可视化
          • 6、掌握颜色映射方法
    • 三、任务环境
          • 1、jupyter开发环境
          • 2、python3.6
          • 3、tensorflow2.4
    • 四、任务实施过程
      • 1、梅尔频谱图
      • 2、音符名修饰的频谱图
      • 3、Chroma特征表示
      • 4、音符
      • 5、非谱数据可视化
      • 6、颜色映射
    • 五、任务小结
  • 说明

其他谱图


一、任务需求

常见的谱图,除了频谱图以外,还包含很多其他类型,例如 梅尔频谱, constant-Q, variable-Q, 色谱图, 时频图 等等。在本实验中,我们将学习了解这些频谱图。

要求:学习梅尔频谱图,Chroma特征表示等其他谱图展现方式

二、任务目标

1、掌握梅尔频谱图
2、掌握音名修饰
3、掌握Chroma特征表示
4、掌握音符表示
5、掌握非谱数据可视化
6、掌握颜色映射方法

三、任务环境

1、jupyter开发环境
2、python3.6
3、tensorflow2.4

四、任务实施过程

加载工具和数据

import numpy as np
import matplotlib.pyplot as plt

import librosa
import librosa.display
y, sr = librosa.load('/home/jovyan/datas/sorohanro_-_solo-trumpet-06.ogg')

对音频数据做短时傅里叶变换

# 短时傅里叶变换
D = librosa.stft(y)
S_db = librosa.amplitude_to_db(np.abs(D), ref=np.max)

1、梅尔频谱图

fig, ax = plt.subplots()
# 获取梅尔倒谱系数
M = librosa.feature.melspectrogram(y=y, sr=sr)
# 将功率转化为分贝
M_db = librosa.power_to_db(M, ref=np.max)
# 绘制频谱图
img = librosa.display.specshow(M_db, y_axis='mel', x_axis='time', ax=ax)
ax.set(title='Mel spectrogram display')
fig.colorbar(img, ax=ax, format="%+2.f dB")

上图展示的是梅尔频谱图,并将功率谱转换为db,其纵坐标刻度为对数刻度。

2、音符名修饰的频谱图

可以使用频率 (Hz) 或它们在科学音高符号中的音符名称来修饰频谱图,如下:

C = librosa.cqt(y=y, sr=sr)
# 将振幅转化为分贝
C_db = librosa.amplitude_to_db(np.abs(C), ref=np.max)

fig, ax = plt.subplots()
# 绘制指数坐标频谱图
librosa.display.specshow(C_db, y_axis='cqt_hz', x_axis='time', ax=ax)
ax.set(title='Frequency (Hz) axis decoration')

fig, ax = plt.subplots()
# 绘制音名频谱图
librosa.display.specshow(C_db, y_axis='cqt_note', x_axis='time', ax=ax)
ax.set(title='Pitch axis decoration')

[Text(0.5, 1.0, ‘Pitch axis decoration’)]

在这里插入图片描述
在这里插入图片描述
留意第二个谱图的纵坐标,被替换为八度的音高符号,在这种情况下,底层数据表示仍以 Hz 为单位;仅更改刻度标签。

3、Chroma特征表示

所谓chroma,是指一个八度中的十二个音级(对应钢琴的七个白键音符及之间的五个黑键)。

Chroma特征表示没有固定的频率轴,而是汇总与给定音级对应的所有频率的信息。specshow 也可以绘制这些:

# 获取chroma特征表示
chroma = librosa.feature.chroma_cqt(y=y, sr=sr)
fig, ax = plt.subplots()
img = librosa.display.specshow(chroma, y_axis='chroma', x_axis='time', ax=ax)
ax.set(title='Chromagram demonstration')
fig.colorbar(img, ax=ax)

现在我们将频谱纵坐标转换为音名格式,由于音名是离散的,因此我们看到的频谱图就是一个一个小格子的样子。

4、音符

如果您还碰巧知道正在分析的乐曲的调,您可以将其传递给 specshow,它会正确拼写音符:

fig, ax = plt.subplots()
# 将频谱图Y轴设置为音调
img = librosa.display.specshow(chroma, y_axis='chroma', x_axis='time',
                               key='Eb:maj', ax=ax)
ax.set(title='Chromagram explicitly in Eb:maj')
fig.colorbar(img, ax=ax)

如你所见,这其实和Chroma特征表示没什么区别,只不过把纵坐标换成了更常见的乐谱的调。

5、非谱数据可视化

specshow 也可用于不完全是光谱时间的数据。一种常见的应用是递归(自相似性)图,它是逐时间呈现的,如下图所示。

R = librosa.segment.recurrence_matrix(chroma, mode='affinity')
fig, ax = plt.subplots()
# 绘制自相关图
img = librosa.display.specshow(R, y_axis='time', x_axis='time', ax=ax)
ax.set(title='Recurrence / self-similarity')
fig.colorbar(img, ax=ax)

请注意我们对两个轴标签都使用了“时间”。它显示了一个时序数据(声音)之间的自相关关系。

本质上,这只是一个矩阵而已,因此,任何支持的模式均可用于任一轴,我们还可以绘制每个轴上带有色度装饰的色度协方差图:

ccov = np.cov(chroma)
fig, ax = plt.subplots()
img = librosa.display.specshow(ccov, y_axis='chroma', x_axis='chroma',
                               key='Eb:maj', ax=ax)
ax.set(title='Chroma covariance')
fig.colorbar(img, ax=ax)

<matplotlib.colorbar.Colorbar at 0x7f16a1f5eda0>

在这里插入图片描述
某些图(例如协方差、自相似性)在specshow中会自动平方。可以通过传递auto_scale=False参数来取消。

6、颜色映射

specshow中,颜色可以自动设置,自动颜色映射遵循的逻辑如下:

  • 数据是布尔值,则使用黑白
  • 数据是(大部分)正数或(大部分)负数,使用序列颜色,就是上面常见的颜色条。默认颜色条为magma
  • 如果数据同时包含正值和负值,请使用离散颜色图。

我们可以通过设置cmap参数来手动指定颜色映射。

fig, ax = plt.subplots()
# 修改频谱图的颜色映射
img = librosa.display.specshow(S_db, cmap='gray_r', y_axis='log', x_axis='time', ax=ax)
ax.set(title='Inverted grayscale')
fig.colorbar(img, ax=ax, format="%+2.f dB")

specshow使用matplotlib.pyplot.pcolormesh生成底层图像。因此pcolormesh 的任何参数都可以传递给specshow使用,例如,设置颜色的最小和最大值范围,明确界限。当将离散的颜色图以 0(或其他值)为中心时,这会很有帮助。

max_var = np.max(np.abs(ccov))
fig, ax = plt.subplots()
img = librosa.display.specshow(ccov, vmin=-max_var, vmax=max_var,
                               y_axis='chroma', x_axis='chroma',
                               key='Eb:maj', ax=ax)
ax.set(title='Chroma covariance')
fig.colorbar(img, ax=ax)

<matplotlib.colorbar.Colorbar at 0x7f17f5954828>

在这里插入图片描述

此时我们相当于使用librosa的频谱图绘制了一张热力图。

五、任务小结

本实验中,我们学习了多种其他谱图的绘制方法及修饰方法,具体而言,包括:

1、掌握梅尔频谱图
2、掌握音名修饰
3、掌握Chroma特征表示
4、掌握音符表示
5、掌握非谱数据可视化
6、掌握颜色映射方法

–end–

说明

本实验(项目)/论文若有需要,请后台私信或【文末】个人微信公众号联系我

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

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

相关文章

护眼灯有没有护眼的效果?一键查看这五大护眼效果极佳的护眼台灯

在数字时代&#xff0c;护眼灯已成为保护视力的重要工具。但消费者常问&#xff1a;护眼灯有没有护眼的效果&#xff1f;挑选到技术过关的护眼台灯是能够很好地起到护眼效果的。本文将并重点介绍五款具有卓越护眼功能的台灯。这些精选灯具不仅在照明效果上表现出色&#xff0c;…

leetcode-缺失的第一个正整数-96

题目要求 思路 1.这里的题目要求刚好符合map和unordered_map 2.创建一个对应map把元素添加进去&#xff0c;用map.find(res)进行查找&#xff0c;如果存在返回指向该元素的迭代器&#xff0c;否则返回map::end()。 代码实现 class Solution { public:int minNumberDisappeare…

智慧公厕打造智慧城市新标杆

公共厕所作为城市基础设施的重要组成部分&#xff0c;直接关系到市民的生活品质和城市形象。传统的公厕管理方式存在着许多问题&#xff0c;如环境脏乱、清洁不及时等&#xff0c;给市民带来了诸多不便和不满。而智慧公厕作为一种全新的管理模式&#xff0c;通过物联网、大数据…

Temporary Email邮箱API发送邮件怎么配置?

Temporary Email邮箱API发送邮件的方法&#xff1f;如何使用&#xff1f; 临时邮箱因其便捷性和隐私保护的优势&#xff0c;越来越受到用户的青睐。而在许多场景下&#xff0c;我们可能需要使用临时邮箱API来发送邮件。那么&#xff0c;如何配置Temporary Email邮箱API发送邮件…

Docker 操作redis

命令: docker删除容器命令:docker rm 容器名称 (默认只能删除停止运行的容器) 运行redis服务端并指定窗口: docker run --name mr -p 6379:6379 -d redis redis-server --appendonly yes 运行成功之后运行docker ps 可以查看运行中的所有容器以及状态 docke rexec -it mr b…

“A”分心得:我的云计算HCIE学习之路

大家好&#xff0c;我是誉天云计算HCIE周末班梁同学&#xff0c;在誉天老师和同学们的帮助下&#xff0c;我终于在4月24日顺利通过了云计算3.0 HCIE的认证考试&#xff0c;而且获得了A&#xff0c;这是让我特别惊喜的&#xff0c;功夫不负有心人。 我日常的工作是网络运维&…

nestjs 全栈进阶--自定义装饰器

视频教程 20_nest中自定义装饰器_哔哩哔哩_bilibili nest new custom-decorator -p pnpm pnpm start:dev 在Nestjs 中我们使用了大量装饰器 decorator &#xff0c;所以Nestjs 也允许我们去自定义装饰器。 1. 自定义方法装饰器 nest g decorator aaa --flat 它生产的代码…

基于web的物流管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

操作系统实战(二)(linux+C语言)

实验内容 通过Linux 系统中管道通信机制&#xff0c;加深对于进程通信概念的理解&#xff0c;观察和体验并发进程间的通信和协作的效果 &#xff0c;练习利用无名管道进行进程通信的编程和调试技术。 管道pipe是进程间通信最基本的一种机制,两个进程可以通过管道一个在管道一…

618必买好物清单来袭,这些数码产品值得你考虑!

是不是很多朋友和我一样&#xff0c;已经迫不及待地为618好物节做好了准备&#xff0c;准备开启一场购物盛宴&#xff01;作为一名资深家居与数码爱好者&#xff0c;每年618好物节时我都会尽情挑选心仪的物品&#xff0c;因此今天我想和大家分享一下我的618购物清单&#xff0c…

不是,有你们这么卖东西的?涨价是肯定的,我苟住不浪也是必然的!——早读(逆天打工人爬取热门微信文章解读)

大家说我苟&#xff0c;我笑他人看不穿 引言Python 代码第一篇 洞见 晕船法则&#xff08;深度好文&#xff09;第二篇 九边 宅男之死结尾 理性的讨论能够促进理解 而不仅仅是赢得争论 我们追求的是通过讨论增进理解 而非仅仅证明自己的正确 引言 最近的言论似乎控制得更加严格…

LSS(Lift, Splat, Shoot)算法解析

1.简介 LSS(Lift, Splat, Shoot) 是一个比较经典的自下而上的构建BEV特征的3D目标检测算法&#xff0c;通过将图像特征反投影到3D空间生成伪视锥点云&#xff0c;通过Efficientnet算法提取云点的深度特征和图像特征并对深度信息进行估计&#xff0c;最终将点云特征转换到BEV空…

Minio(官方docker版)容器部署时区问题研究记录

文章目录 感慨&概述补充&#xff1a;MINIO_REGION和容器时间的关系 问题一&#xff1a;minio容器和本地容器时间不一致问题说明原因探究解决方法结果验证 问题二&#xff1a;minio修改时间和本地查询结果不一致具体问题原因探究解决办法时间转化工具类调用测试和验证上传文…

计算机组成结构—虚拟存储器

目录 一、虚拟存储器的基本概念 二、页式虚拟存储器 1.页表 2.快表(TLB) 3.具有 TLB 和 Cache 的多级存储系统 三、段式虚拟存储器 四、段页式虚拟存储器 五、虚拟存储器和Cache比较 早期的计算机&#xff0c;CPU 是直接操作主存的&#xff0c;也就是运行程序时&#xf…

深度学习之基于Vgg16卷积神经网络书法字体风格识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 书法是中国传统文化的重要组成部分&#xff0c;具有深厚的历史底蕴和独特的艺术魅力。在数字化时代&…

第50期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

损失函数详解

1.损失函数 是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误&#xff0c;损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数&#xff08;loss function&#xf…

Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器

Baidu Comate智能编码助手 Baidu Comate 智能编码助手简单介绍安装使用查看Comate插件功能智能代码提示使用飞浆和百度智能小程序进行智能问答使用AutoWork插件实现二次函数图像的生成引用Comate知识库存在的问题结束语 Baidu Comate 智能编码助手简单介绍 Baidu Comate&#x…

设计模式(十一):外观模式

设计模式&#xff08;十一&#xff09;&#xff1a;外观模式 1. 外观模式的介绍2. 外观模式的类图3. 外观模式的实现3.1 创建一个接口3.2 创建接口的实现3.3 创建一个外观类3.4 测试 1. 外观模式的介绍 外观模式&#xff08;Facade Pattern&#xff09;属于结构型模式&#xf…

Jupyter Notebook输入python代码没智能提示

1、在Jupyter中打开控制台 2、再控制台中执行以下两个命令&#xff1a; pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user pip install jupyter_contrib_nbextensions命令需要下载文件&#xff0c;请耐心等待。 3、执行完成后&#xff0…