语音识别之线性频谱图

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

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

语音识别之线性频谱图

  • 线性频谱图
    • 一、任务需求
    • 二、任务目标
          • 1、掌握频谱图绘制方法
          • 2、掌握频谱图装饰方法
          • 3、学习修改频谱图轴刻度
          • 4、学习更改频谱图分析参数
    • 三、任务环境
          • 1、jupyter开发环境
          • 2、python3.6
          • 3、tensorflow2.4
    • 四、任务实施过程
      • 1、频谱图
      • 2、装饰频谱图
      • 3、更改轴刻度
      • 4、更改分析参数
    • 五、任务小结
  • 说明

线性频谱图


一、任务需求

本实验深入演示specshow 可以做的所有事情,包括生成多种时、频域(spectro-temporal)数据的可视化。

librosa 的所有绘图函数都依赖于 matplotlib。因此在这里导入 matplotlib 的 pyplot API是有帮助的。

要求:利用librosa生成频谱图

二、任务目标

1、掌握频谱图绘制方法
2、掌握频谱图装饰方法
3、学习修改频谱图轴刻度
4、学习更改频谱图分析参数

三、任务环境

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')

1、频谱图

首先我们要显示一个普通的(线性)频谱图。我们将通过首先计算短时傅立叶变换,然后将幅度映射到分贝尺度来做到这一点。

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

matplotlib有两种主要的绘图方式,pyplot接口和面向对象接口,这两种方式librosa都支持。

接下来我们演示pyplot接口:

plt.figure()
# 绘制频谱图
librosa.display.specshow(S_db)
# 添加颜色条
plt.colorbar()

上图展示了一段声音对应的db频谱图,注意他的数值是负数,这和我们通常理解的分贝不同,音频分析中的db“参照点”不同寻常理解的分贝。

音频分析通常采用满刻度电平,0dBFS(0dB Full Scale),即把16bit采样的±32767允许的最大值作为0dB,这就是参考点。

也就是把有可能出现“数字过载”的临界点作为参照点,在这样的标准下,大多数的实际电平自然都是负值。

然后是面向对象接口

fig, ax = plt.subplots()
img = librosa.display.specshow(S_db, ax=ax)
fig.colorbar(img, ax=ax)

如你所见,两个图形其实是相同的,但它们使用不同的编程接口来构建。

大多数人都会认为 pyplot 界面学起来更快,但面向对象的界面对于复杂的图形可能更灵活一些。

对于本实验的其余部分,我们将使用面向对象的接口。

2、装饰频谱图

上一步表达了频谱图的基本内容,但缺少轴标签。没有这些信息,读者就不可能知道如何解释可视化结论。specshow 提供了许多工具来自动装饰绘图的轴。对于上图,x 轴对应于时间,y 轴对应于由离散傅立叶变换产生的线性间隔频率。我们可以告诉 specshow 相应地轴标签:

fig, ax = plt.subplots()
img = librosa.display.specshow(S_db, x_axis='time', y_axis='linear', ax=ax)
ax.set(title='Now with labeled axes!')
fig.colorbar(img, ax=ax, format="%+2.f dB")

看起来好多了,我们还在颜色条中添加了格式字符串,以便读者了解如何读取色标。

3、更改轴刻度

线性频率标度有时很有用,但通常很难阅读。或者,通常使用对数频率轴。这样做的好处是每个八度音程都占据恒定的垂直范围。

我们可以告诉 specshow 使用对数缩放频率轴,就像上面一样:

fig, ax = plt.subplots()
# 修改为指数坐标
img = librosa.display.specshow(S_db, x_axis='time', y_axis='log', ax=ax)
# 添加标题
ax.set(title='Using a logarithmic frequency axis')
fig.colorbar(img, ax=ax, format="%+2.f dB")

现在纵坐标轴被转换为对数标签,这样做的好处在于音程变成了线性的,例如国际标准音A440,它的下一个八度起始位置是880,再下一个八度是1760。这样指数增加的音程,在现在的坐标轴上,总是等距的。

4、更改分析参数

librosa 使用的默认参数设置(例如,sr=22050、hop_length=512等)可能不适用于每个信号。如果您更改参数的默认值,例如在计算 STFT 时,您可以将相同的参数传递给specshow。这可确保正确计算轴刻度(例如时间或频率)。

例如,在下面的示例中,我们将hop_length设置为256,n_fft设置为4096.

fig, ax = plt.subplots()
D_highres = librosa.stft(y, hop_length=256, n_fft=4096)
S_db_hr = librosa.amplitude_to_db(np.abs(D_highres), ref=np.max)
# 绘制频谱图,横坐标时间,纵坐标指数坐标
img = librosa.display.specshow(S_db_hr, hop_length=256, x_axis='time', y_axis='log',
                               ax=ax)
ax.set(title='Higher time and frequency resolution')
fig.colorbar(img, ax=ax, format="%+2.f dB")

hop_length决定了相邻两帧之间不重叠的音频样本数量。

五、任务小结

本实验完成了specshow 生成频谱图。通过本实验我们学习到了包括生成多种时、频域(spectro-temporal)数据的可视化的相关知识,需要掌握以下知识点:

  • 掌握频谱图绘制方法
  • 掌握频谱图装饰方法
  • 学习修改频谱图轴刻度
  • 学习更改频谱图分析参数

–end–

说明

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

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

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

相关文章

​XMall商城微信小程序前端技术解析

摘要 随着移动互联网的深入发展,微信小程序以其轻量级、便捷性和即用即走的特点,成为了众多企业和开发者关注的焦点。XMall商城微信小程序前端作为一款开源项目,以其精美的页面设计、丰富的功能和高效的性能,受到了广大开发者和用…

深度学习之基于Matlab BP神经网络烟叶成熟度分类

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 烟叶的成熟度是评估烟叶品质的重要指标之一,它直接影响着烟叶的口感、香气和理化特性。传…

还不懂 RESTful 接口是什么?快进来看看

RESTful是指基于REST(Representational State Transfer,表现层状态转移)架构风格的Web服务。REST是一种设计原则和架构风格,而不是标准,它用于指导如何构建易于交互、高效、可扩展的网络系统。RESTful服务通常使用HTTP…

Oracle Database 23ai Free RPM Installation On Oracle Linux 8 (OL8)

Oracle刚刚发布了最新的Oracle database 23ai版本测试安装包,有兴趣的小伙伴可以安装体验一下。 关于安装的介质可以去如下地址下载: Oracle linux 8.9 Oracle Linux ISOs | Oracle, Software. Hardware. Complete. Oracle database 23ai安装包 Get Star…

Read timed out. (python 安装第三方库超时)

不少人在安装python第三方库的时候经常发生下面情况 解决方法就是往上找 我这里就是 jupyterlab-4.1.8-py3-none-any.whl安装时间过长,失败 那就去国内镜像网站下载下来离线安装 https://pypi.tuna.tsinghua.edu.cn/simple/xxx(xxx就是你的包名&#…

AI绘画Stable Diffusion【艺术写真】:冰雪奇缘,使用ReActor插件实现AI写真

大家好,我是设计师阿威。 前面分享过几篇使用AI绘画Stable DIffusion中的InstantID插件实现AI写真的制作方法。 目前换脸插件有很多,比较典型的有Roop,ReActor,IP-Adapter,InstantID,就目前效果来看,InstantID单张图像换脸的相似…

数据结构:时间复杂度/空间复杂度

目录 一、时间复杂度 定义 常见的时间复杂度 如何计算时间复杂度 计算方法 三、实例分析 二、空间复杂度 定义 重要性 常见的空间复杂度 二、空间复杂度 定义 重要性 常见的空间复杂度 计算方法 三、实例分析 大O的渐进表示法 最好情况(Best Case…

【前端】实现表格简单操作

简言 表格合并基础篇 本篇是在上一章的基础上实现,实现了的功能有添加行、删除行、逆向选区、取消合并功能。 功能实现 添加行 添加行分为在上面添加和在下面追加行。 利用 insertAdjacentElement 方法实现,该方法可以实现从前插入元素和从后插入元…

一起长锈:3 类型安全的Rust宏(从Java与C++转Rust之旅)

讲动人的故事,写懂人的代码 故事梗概:在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而…

【C语言】动态分配内存

内存的五大分区 1、堆区(heap)——由程序员分配和释放, 若程序员不释放,程序结束时一般由操作系统回收。注意它与数据结构中的堆是两回事 2、栈区(stack)——由编译器自动分配释放 ,存放函数的…

力扣刷题:四数相加Ⅱ

题目详情: 解法一:暴力枚举 对于这道题,我们的第一思路就是暴力枚举,我们可以写一个四层的for循环进行暴力匹配,只要相加的结果等于0就进行统计。但是我们会发现,我们的事件复杂度为O(N^4)事件复杂度非常大…

vue使用pdfjs-dist在电脑上展示PDF文件

安装 安装的时候一定要带上版本号,这里采用的是2.0.943(因为这个版本对于我目前的项目比较合适可以正常使用,其他版本大概率会报错),当前项目使用的是vue2,vue的版本是2.5.10 npm install pdfjs-dist@2.0.943 查看版本发现这玩意版本非常之多 使用 在使用pdfjs-dist库…

张大哥笔记:自媒体人10种赚钱方法

很多人都在做自媒体,比如平台广告分成、广告收入、公关宣传、品牌植入、演讲、会员制、出书、线下活动。那么本文介绍了自媒体人10种赚钱方法,供大家参考: 1、打造个人IP 什么是个人IP?在百度百科上是这样解释的:指个…

深度学习之基于YOLOv5目标检测可视化系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着深度学习技术的快速发展,目标检测在多个领域中的应用日益广泛,包括…

字节人都用的婚恋交友相亲平台有哪些?聊聊互联网大厂的人是怎么脱单的!

虽然在字节这样的公司上班,也算是人中之人了。但是也耐不住29岁了,快成大龄剩女了。迫于长辈的催婚压力,所以带着任务体验了一遍各大相亲交友平台,以下是我的使用感受。 1、青藤之恋:偏相亲定位,曾经高学历…

libcity 笔记:libcity/executor/traj_loc_pred_executor.py

1 构造函数 2 _build_optimizer 根据配置中指定的优化器类型创建并返回一个适合用于模型训练的优化器对象 3 _build_scheduler 构建一个学习率调度器(scheduler) 4 train 5 run 6 _valid_epoch 7 load_model & save_model 保存/加载模型的状态字…

一起长锈:4 默认不可变的变量绑定与引用(从Java与C++转Rust之旅)

讲动人的故事,写懂人的代码 故事梗概:在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而…

Oceanbase all-in-one单机版部署,通过MySQL客户端连接OB租户,DBEAVER 客户端连接MySQL租户。

一.Oceanbase all-in-one单机版部署 1.修改资源限制。 vim /etc/security/limits.conf root soft nofile 655350 root hard nofile 655350 * soft nofile 655350 * hard nofile 655350 * soft stack unlimited * hard stack unlimited * soft nproc 655360 * hard nproc 6553…

【ElasticSearch】IK分词器中停用词问题

问题描述 在ES中进行部分关键词搜索时,搜索无结果,如搜索 【IT】 环境描述 中文分词插件 这里使用的是 analysis-ik 分词调试 POST test_index/_analyze {"text":"IT Manager","analyzer": "ik_max_word"…

ChatGPT4 Turbo 如何升级体验?官网如何使用最新版GPT-4 Turbo?

本文会教大家如何教大家升级自己的GPT4到GPT4 Turbo,同时检验自己的GPT4 Turbo是否是最新版本的GPT-4-Turbo-2024-04-09 说明 新版GPT-4 Turbo再次重夺大模型排行榜王座,超越了Claude 3 Opus。 最新版本的GPT-4 Turbo被命名为GPT-4-Turbo-2024-04-09。…
最新文章