语音识别之线性频谱图

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计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 pltimport 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.mzph.cn/diannao/7417.shtml

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

相关文章

从零开始搭建Springboot项目脚手架1:新建项目

1、技术栈 SpringBoot 3.2.5: 2、 新建项目 使用SpringInitializr 选择Lombok、Configuration Processor、Spring Web,同时IDEA也要安装Lombok插件 删除多余的Maven目录、Maven文件,把HELP.md改成README.md。 当然前提是已经安装好Maven和配…

力扣70 爬楼梯 C语言 动态规划 递归

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2…

node 连接mysql操作mysql的工具类封装,node后端操作mySql、

一、工具类代码如下: /** Description: ------ node连接并操作mysql封装 ------* Creater: snows_l snows_l163.com* Date: 2023-04-12 15:38:57* LastEditors: snows_l snows_l163.com* LastEditTime: 2024-04-09 16:16:04* FilePath: /Website/Server/utils/conn…

Java多线程:常见的线程的创建方法及Thread类详解

目录 一.并发编程相关概念 线程与进程 多线程 Java中线程的状态 二.线程的创建方法 方法一:继承Thread类 方法二:实现Runnable接口 其他方法 三.Thread类详解 Thread常见构造方法 Thread常见属性 Thread常见方法 start() 与 run() sleep(…

Redis教程——主从复制

在上篇文章我们学习了Redis教程——管道,这篇文章学习Redis教程——主从复制。 主从复制 为了数据更加安全可靠,在实际的项目中,肯定是有多个Redis服务,主机Redis以写为主,从机Redis以读为主,当主机Redis…

长难句打卡5.7

In December 2010 America’s Federal Trade Commission (FTC) proposed adding a “do not track” (DNT) option to Internet browsers, so that users could tell advertisers that they did not want to be followed. 2010年12月,美国美国联邦贸易委员会(FTC)提…

在数字化转型的浪潮中,CBDB百数服务商如何破浪前行?

在信息化时代,传统咨询企业面临着数字化转型的挑战与机遇。如何利用数字化技术提升业务效率、增强客户黏性,成为了行业关注的焦点。云南析比迪彼企业管理有限公司(CBDB)作为云南地区的企业咨询服务提供商,率先与百数展…

Springai入门

一、概述 1.1发展历史 1.2大模型 大模型,是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。其设计目的在于提高模型的表达能力和预测性能,以应对更加复杂的任务和数据&…

CSS 样式清单整理:css 绘制三角形

css 绘制三角形 div {width: 0;height: 0;border-width: 0 40px 40px;border-style: solid;border-color: transparent transparent red; }实现带边框的三角形 <div id"blue"><div>#blue {position:relative;width: 0;height: 0;border-width: 0 40px …

虚幻引擎5 Gameplay框架(二)

Gameplay重要类及重要功能使用方法&#xff08;一&#xff09; 配置LOG类及PlayerController的网络机制 探索验证GamePlay重要函数、类的执行顺序与含义 我们定义自己的日志&#xff0c;专门建立一个存放自己日志的类&#xff0c;这个类继承自BlueprintFunctionLibrary 然后…

零基础怎么学鸿蒙开发?

对于零基础的学习者来说&#xff0c;掌握鸿蒙开发不仅是迈向新技术的第一步&#xff0c;更是开拓职业道路的重要机遇。随着鸿蒙系统在各行各业的应用逐渐扩展&#xff0c;对于掌握这一项技术的开发人员需求也随之增长。下文将为大家提供针对零基础学习鸿蒙开发的逻辑&#xff0…

提高曝光率与点击率:海外KOL推广与社交媒体算法的完美结合

在当今数字化时代&#xff0c;社交媒体已经成为了企业和品牌推广的重要渠道之一&#xff0c;海外KOL也在各个领域拥有着庞大的粉丝群体和影响力。然而&#xff0c;想要在众多内容中脱颖而出&#xff0c;提高推广内容的曝光率和点击率&#xff0c;仅仅依靠KOL的影响力是不够的&a…

vue + vite 使用onchange和prettier 进行文件变化监视和格式化

在现代的前端开发中&#xff0c;文件的格式化和实时监视是一个必不可少的环节。为了提高开发效率&#xff0c;我们可以利用一些工具来自动化这个过程。本文将介绍如何使用 onchange 和 prettier 来监视文件变化并进行格式化。 concurrently和onchange concurrently 是一个用于…

论文阅读-THE GENERALIZATION GAP IN OFFLINE REINFORCEMENT LEARNING(ICLR 2024)

1.Motivation 本文希望比较online RL、offline RL、序列决策和BC等方法的泛化能力(对于不同的初始状态、transition functions、reward functions&#xff0c;现阶段offline RL训练的方式都是在同一个环境下的数据集进行训练)。实验发现offline的算法相较于online算法对新环境…

Oracle-savepoint相关

总结&#xff1a;在同一个会话下&#xff0c;如果savepoint的名称相同&#xff0c;新的savepoint则会覆盖旧的savepoint&#xff0c;在不同的会话下&#xff0c;savepoint的名称相同&#xff0c;不会相互影响。 为了避免savepoint名称相同&#xff0c;可以在建立savepoint名称时…

特别提醒:2024年软考连考时间再次调整!

近期&#xff0c;辽宁省发布了今年5月软考考试安排&#xff0c;有以下变化&#xff1a; 高级论文单独考试&#xff08;2小时&#xff09;&#xff0c;之前是案例和论文一起考&#xff0c;案例剩下的时间可以给论文用&#xff0c;现在是综合和案例一起考&#xff0c;综合剩下的…

菜鸡学习netty源码(一)——ServerBootStrap启动

1.概述 对于初学者而然,写一个netty本地进行测试的Server端和Client端,我们最先接触到的类就是ServerBootstrap和Bootstrap。这两个类都有一个公共的父类就是AbstractBootstrap. 那既然 ServerBootstrap和Bootstrap都有一个公共的分类,那就证明它们两个肯定有很多公共的职…

Redis集群.md

Redis集群 本章是基于 CentOS7 下的 Redis 集群教程&#xff0c;包括&#xff1a; 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖&#xff1a; yum install -y gcc tcl然后将课前资料提供的Redis安装包上传到虚拟机的任意目录&#xf…

PHP8.2-xlswriter 扩展

https://pecl.php.net/package/xlswriter ### 进入/root/ cd ~ ### 下载扩展 wget https://pecl.php.net/get/xlswriter-1.5.5.tgz ### 解压扩展 tar -zxvf xlswriter-1.5.5.tgz ### 进入扩展目录 cd xlswriter-1.5.5 ### 查找对应php版本的phpize find / -name phpi…

sh: 1: appimagetool: not found

下载 appimagetool&#xff1a; 首先&#xff0c;访问 AppImageHub 或者 AppImage GitHub releases 页面 查找 appimagetool 的最新版本。 安装 appimagetool&#xff1a; 下载完成后&#xff0c;你将获得一个 .AppImage 文件。你需要将这个文件转换为可执行文件&#xff0c…