绘制音频信号的各种频谱图,包括Mel频谱图、STFT频谱图等。它不仅能够绘制频谱图librosa.display.specshow

`librosa.display.specshow` 是一个非常方便的函数,用于绘制音频信号的各种频谱图,包括Mel频谱图、STFT频谱图等。它不仅能够绘制频谱图,还能自动设置轴标签和刻度,使得生成的图像更加直观和易于理解。

### 函数签名
```python
librosa.display.specshow(data, x_coords=None, y_coords=None, x_axis=None, y_axis=None, sr=22050, hop_length=512, fmin=0, fmax=None, bins_per_octave=12, key='C:maj', ax=None, **kwargs)
```

### 参数说明
- **`data`**:二维数组,表示频谱数据。例如,`librosa.feature.melspectrogram` 或 `librosa.stft` 的输出。
- **`x_coords`**:一维数组,表示x轴的坐标。如果提供,`x_axis` 参数将被忽略。
- **`y_coords`**:一维数组,表示y轴的坐标。如果提供,`y_axis` 参数将被忽略。
- **`x_axis`**:字符串,指定x轴的类型。常见值包括:
  - `'time'`:时间轴(默认值)。
  - `'s'`:秒。
  - `'ms'`:毫秒。
  - `'lag'`:延迟轴。
  - `'lag_s'`:延迟轴(秒)。
  - `'lag_ms'`:延迟轴(毫秒)。
  - `'cqt_note'`:基于CQT的音符轴。
  - `'cqt_hz'`:基于CQT的频率轴。
  - `'chroma'`:音阶轴。
  - `'tonnetz'`:Tonnetz轴。
  - `'off'`:关闭x轴标签。
- **`y_axis`**:字符串,指定y轴的类型。常见值包括:
  - `'linear'`:线性频率轴(默认值)。
  - `'log'`:对数频率轴。
  - `'mel'`:Mel频率轴。
  - `'cqt_note'`:基于CQT的音符轴。
  - `'cqt_hz'`:基于CQT的频率轴。
  - `'chroma'`:音阶轴。
  - `'off'`:关闭y轴标签。
- **`sr`**:采样率,默认值为22050 Hz。
- **`hop_length`**:帧移,默认值为512。
- **`fmin`**:最小频率,默认值为0 Hz。
- **`fmax`**:最大频率,默认值为`None`,表示采样率的一半(Nyquist频率)。
- **`bins_per_octave`**:每八度的二进制数量,默认值为12。
- **`key`**:键名,默认值为`'C:maj'`。
- **`ax`**:`matplotlib`的轴对象,默认值为`None`。如果提供,将在指定的轴上绘制图像。
- **`**kwargs`**:其他关键字参数,将传递给`matplotlib.pyplot.imshow`。

### 返回值
- 返回一个`matplotlib.image.AxesImage`对象,表示绘制的图像。

### 示例代码
以下是一个完整的示例,展示如何使用`librosa.display.specshow`绘制Mel频谱图:

```python
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np

# 加载音频文件
y, sr = librosa.load('example.wav', sr=16000)

# 计算Mel频谱
mel = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
log_mel = librosa.power_to_db(mel, ref=np.max)

# 绘制Mel频谱图
plt.figure(figsize=(10, 4))
librosa.display.specshow(log_mel, sr=sr, x_axis='time', y_axis='mel')
plt.colorbar(label='Log Mel Spectrogram (dB)')
plt.xlabel('Time')
plt.ylabel('Mel Frequency')
plt.title('Mel Spectrogram')
plt.tight_layout()
plt.show()
```

### 详细解释

1. **加载音频文件**
   ```python
   y, sr = librosa.load('example.wav', sr=16000)
   ```
   - 使用`librosa.load`加载音频文件,`sr`表示采样率。

2. **计算Mel频谱**
   ```python
   mel = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
   log_mel = librosa.power_to_db(mel, ref=np.max)
   ```
   - 使用`librosa.feature.melspectrogram`计算Mel频谱。
   - 使用`librosa.power_to_db`将Mel频谱转换为对数尺度。

3. **绘制频谱图**
   ```python
   plt.figure(figsize=(10, 4))
   librosa.display.specshow(log_mel, sr=sr, x_axis='time', y_axis='mel')
   ```
   - 创建一个`matplotlib`图形。
   - 使用`librosa.display.specshow`绘制频谱图。`x_axis='time'`表示x轴为时间轴,`y_axis='mel'`表示y轴为Mel频率轴。

4. **添加颜色条和标签**
   ```python
   plt.colorbar(label='Log Mel Spectrogram (dB)')
   plt.xlabel('Time')
   plt.ylabel('Mel Frequency')
   plt.title('Mel Spectrogram')
   ```
   - 添加颜色条,表示频谱的对数幅度。
   - 设置x轴和y轴的标签。
   - 设置图形的标题。

5. **调整布局并显示**
   ```python
   plt.tight_layout()
   plt.show()
   ```
   - 使用`plt.tight_layout()`调整布局,避免标签和颜色条的重叠。
   - 使用`plt.show()`显示图形。

### 保存图像
如果需要将图像保存到文件中,可以使用`plt.savefig`:
```python
plt.savefig('mel_spectrogram.png')
plt.close()
```

### 总结
`librosa.display.specshow` 是一个非常强大的工具,用于绘制音频信号的各种频谱图。它不仅能够自动处理轴标签和刻度,还能通过参数灵活配置。通过结合`matplotlib`的功能,可以生成高质量的频谱图,适用于数据分析和可视化。

错误的代码,注释部分,   第一个参数需要的是  librosa.load 读取后的二维数组
而不是 经过处理后的数据,频谱数据

# 生成Mel频谱
mel = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=Config.n_mels,n_fft=2048, hop_length=512, power=2
)
log_mel = librosa.power_to_db(mel, ref=np.max)

def save_mel_as_image(filepath, output_dir, denoise=False):mel = audio_to_mel(filepath, denoise)"""将梅尔频谱图保存为PNG图片"""plt.figure(figsize=(10, 4))# librosa提供的功能来自动处理对数转换和轴标签# 这里不需要 ,第一个参数是原始数据,# librosa.display.specshow(mel, sr=Config.sr, x_axis='time', y_axis='mel')plt.colorbar(format='%+2.0f dB')plt.tight_layout()plt.savefig(output_dir)plt.close()

`librosa.feature.melspectrogram` 是一个用于计算Mel频谱图的函数。Mel频谱图是一种将音频信号的频谱表示在Mel频率尺度上的方法,广泛应用于音频处理和机器学习任务中。Mel频率尺度是一种非线性频率尺度,更接近人类听觉系统的感知特性。

### 函数签名
```python
librosa.feature.melspectrogram(
    y=None,
    sr=22050,
    S=None,
    n_fft=2048,
    hop_length=512,
    win_length=None,
    window='hann',
    center=True,
    pad_mode='constant',
    power=2.0,
    n_mels=128,
    fmin=0.0,
    fmax=None,
    htk=False,
    norm='slaney',
    dtype=np.float32
)
```

### 参数说明

#### 输入参数
- **`y`**:音频时间序列。如果提供了`S`,则`y`可以为`None`。
- **`sr`**:采样率,默认值为22050 Hz。
- **`S`**:频谱图(STFT)。如果提供了`S`,则`y`可以为`None`。`S`应该是通过`librosa.stft`计算得到的频谱图。
- **`n_fft`**:FFT窗口大小,默认值为2048。
- **`hop_length`**:帧移,默认值为512。
- **`win_length`**:窗口长度,默认值为`n_fft`。
- **`window`**:窗口函数,默认值为`'hann'`。
- **`center`**:是否将音频时间序列居中,默认值为`True`。
- **`pad_mode`**:填充模式,默认值为`'constant'`。
- **`power`**:功率,默认值为2.0。表示频谱图的功率,通常为2(能量谱)或1(幅度谱)。

#### Mel滤波器参数
- **`n_mels`**:Mel频带的数量,默认值为128。
- **`fmin`**:最小频率,默认值为0.0 Hz。
- **`fmax`**:最大频率,默认值为`None`,表示采样率的一半(Nyquist频率)。
- **`htk`**:是否使用HTK算法计算Mel滤波器,默认值为`False`。
- **`norm`**:归一化方式,默认值为`'slaney'`。可以设置为`None`或`'slaney'`。
- **`dtype`**:数据类型,默认值为`np.float32`。

### 返回值
- 返回一个二维数组,表示Mel频谱图。其形状为`(n_mels, t)`,其中`t`是时间轴的长度。

### 示例代码
以下是一个完整的示例,展示如何使用`librosa.feature.melspectrogram`计算Mel频谱图并绘制:

```python
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np

# 加载音频文件
y, sr = librosa.load('example.wav', sr=16000)

# 计算Mel频谱图
mel = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)

# 将Mel频谱图转换为对数尺度
log_mel = librosa.power_to_db(mel, ref=np.max)

# 绘制Mel频谱图
plt.figure(figsize=(10, 4))
librosa.display.specshow(log_mel, sr=sr, x_axis='time', y_axis='mel')
plt.colorbar(label='Log Mel Spectrogram (dB)')
plt.xlabel('Time')
plt.ylabel('Mel Frequency')
plt.title('Mel Spectrogram')
plt.tight_layout()
plt.show()
```

### 详细解释

1. **加载音频文件**
   ```python
   y, sr = librosa.load('example.wav', sr=16000)
   ```
   - 使用`librosa.load`加载音频文件,`sr`表示采样率。

2. **计算Mel频谱图**
   ```python
   mel = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
   ```
   - 使用`librosa.feature.melspectrogram`计算Mel频谱图。`n_mels=128`表示生成128个Mel频带。

3. **转换为对数尺度**
   ```python
   log_mel = librosa.power_to_db(mel, ref=np.max)
   ```
   - 使用`librosa.power_to_db`将Mel频谱图转换为对数尺度。`ref=np.max`表示以频谱图的最大值为参考值。

4. **绘制频谱图**
   ```python
   plt.figure(figsize=(10, 4))
   librosa.display.specshow(log_mel, sr=sr, x_axis='time', y_axis='mel')
   ```
   - 创建一个`matplotlib`图形。
   - 使用`librosa.display.specshow`绘制频谱图。`x_axis='time'`表示x轴为时间轴,`y_axis='mel'`表示y轴为Mel频率轴。

5. **添加颜色条和标签**
   ```python
   plt.colorbar(label='Log Mel Spectrogram (dB)')
   plt.xlabel('Time')
   plt.ylabel('Mel Frequency')
   plt.title('Mel Spectrogram')
   ```
   - 添加颜色条,表示频谱的对数幅度。
   - 设置x轴和y轴的标签。
   - 设置图形的标题。

6. **调整布局并显示**
   ```python
   plt.tight_layout()
   plt.show()
   ```
   - 使用`plt.tight_layout()`调整布局,避免标签和颜色条的重叠。
   - 使用`plt.show()`显示图形。

### 保存图像
如果需要将图像保存到文件中,可以使用`plt.savefig`:
```python
plt.savefig('mel_spectrogram.png')
plt.close()
```

### 总结
`librosa.feature.melspectrogram` 是一个非常强大的函数,用于计算Mel频谱图。它通过Mel频率尺度将音频信号的频谱表示得更加符合人类听觉系统的感知特性。通过结合`librosa.power_to_db`和`librosa.display.specshow`,可以生成高质量的Mel频谱图,适用于音频分析和机器学习任务。

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

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

相关文章

DDR DFI 5.2 协议接口学习梳理笔记01

备注:本文新增对各种时钟含义做了明确定义区分,避免大家产生误解,这也是5.2版本新引入的。 1. 前言 截止2025年5月,DFI协议最新版本为 5.2,我们首先看一下过去几代的演进: DFI全称DDR PHY Interface,是一种接口协议,定义了 Controller 和 PHY 之间接口的信号、时序以…

windows篡改脚本提醒

✅ 功能简介 该监控系统具备如下主要功能: 📁 目录监控 实时监听指定主目录及其所有子目录内文件的变动情况。 🔒 文件哈希校验 对文件内容生成 SHA256 哈希,确保变更检测基于内容而非时间戳。 🚫 排除机制 支…

文章记单词 | 第102篇(六级)

一,单词释义 apologize /əˈpɒlədʒaɪz/ v. 道歉;认错discharge /dɪsˈtʃɑːrdʒ/ v./n. 排出;释放;解雇; dischargequiver /ˈkwɪvər/ v./n. 颤抖;抖动;箭筒plantation /plnˈteɪʃ…

【DCGMI专题1】---DCGMI 在 Ubuntu 22.04 上的深度安装指南与原理分析(含架构图解)

目录 一、DCGMI 概述与应用场景 二、Ubuntu 22.04 系统准备 2.1 系统要求 2.2 环境清理(可选) 三、DCGMI 安装步骤(详细图解) 3.1 安装流程总览 3.2 分步操作指南 3.2.1 系统更新与依赖安装 3.2.2 添加 NVIDIA 官方仓库 3.2.3 安装数据中心驱动与 DCGM 3.2.4 服务…

主成分分析(PCA)法例题——给定协方差矩阵

已知样本集合的协方差矩阵为 C x 1 10 [ 3 1 1 1 3 − 1 1 − 1 3 ] {\bm C}_x \frac{1}{10} \begin{bmatrix} 3 & 1 & 1 \\ 1 & 3 & -1 \\ 1 & -1 & 3 \end{bmatrix} Cx​101​ ​311​13−1​1−13​ ​ 使用PCA方法将样本向量降到二维 。 求解 计…

uni-app(4):js语法、css语法

1 js语法 uni-app的js API由标准ECMAScript的js API 和 uni 扩展 API 这两部分组成。标准ECMAScript的js仅是最基础的js。浏览器基于它扩展了window、document、navigator等对象。小程序也基于标准js扩展了各种wx.xx、my.xx、swan.xx的API。node也扩展了fs等模块。uni-app基于E…

Idea 配合 devtools 依赖 实现热部署

核心依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency> yaml配置 spring: #…

leetcode513.找树左下角的值:递归深度优先搜索中的最左节点追踪之道

一、题目本质与核心诉求解析 在二叉树算法问题中&#xff0c;"找树左下角的值"是一个典型的结合深度与位置判断的问题。题目要求我们找到二叉树中最深层最左边的节点值&#xff0c;这里的"左下角"有两个关键限定&#xff1a; 深度优先&#xff1a;必须是…

Python入门手册:Python基础语法

Python是一种简洁、易读且功能强大的编程语言&#xff0c;非常适合初学者入门。无论你是编程新手&#xff0c;还是有一定编程基础但想学习Python的开发者&#xff0c;掌握Python的基础语法都是迈向高效编程的第一步。本文将详细介绍Python的基本语法&#xff0c;包括变量和数据…

postgresql 常用参数配置

#01 - Connection-Authentication 优化点&#xff1a; listen_addresses 0.0.0.0 建议&#xff1a;生产环境应限制为具体IP&#xff08;如 192.168.1.0/24,127.0.0.1&#xff09;&#xff0c;避免暴露到公网。 ssl off 建议&#xff1a;启用SSL&#xff08;ssl on&#xf…

POI模板生成EXCEL 64000 style in a .xlsx Workbook

业务场景&#xff1a; 项目需要生成多个EXCEL表格&#xff0c;每个表格根据数据列表的大小动态增加Excel的行数&#xff0c;要保证新插入行的样式与模板完全一致 考虑使用以下方法保证样式的统一 cloneStyleFrom(templateStyle); 但是由于数据量比较大&#xff0c;抛出如下的…

HJ106 字符逆序【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ106 字符逆序 一、题目描述 二、测试用例 三、解题思路 基本思路&#xff1a;   考虑到可能会有多个空格&#xff0c;使用使用 getline 函数直接读取一行。   如果可以直接打印的…

CI/CD的演进之路

CI/CD的演进之路 一、CI/CD的成长演变 早期起源与初步实践&#xff1a;CI/CD的概念可以追溯到软件开发的早期阶段&#xff0c;但真正开始受到关注是在敏捷开发方法兴起之后。在传统的瀑布模型开发模式下&#xff0c;软件开发周期长、发布频率低&#xff0c;更新往往需要数月甚…

制作一款打飞机游戏55:扩散

子弹模式 ‌疯狂的子弹地狱‌&#xff1a; 嘿&#xff0c;伙计们&#xff0c;今天我们要创造一些令人印象深刻的子弹模式。这就是所谓的“子弹地狱”&#xff01; ‌问题与挑战‌&#xff1a; 在之前的开发中&#xff0c;我们遇到了一些问题。特别是关于如何处理子弹的角度问题…

Vortex GPGPU的github流程跑通与功能模块波形探索(三)

文章目录 前言一、./build/ci下的文件结构二、基于驱动进行仿真过程牵扯的文件2.1 blackbox.sh文件2.2 demo文件2.3 额外牵扯到的ramulator2.3.1 ramulator简单介绍2.3.2 ramulator使用方法2.3.3 ramulator的输出2.3.4 ramulator的复现2.3.4.1 调试与验证&#xff08;第 4.1 节…

公有云AWS基础架构与核心服务:从概念到实践

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 (初学者技术专栏) 一、基础概念 定义:AWS(Amazon Web Services)是亚马逊提供的云计算服务,包含计算、存储、网络、数据库等核心能力,通过全球数据中心为用户提供灵活…

wsl2 不能联网

wsl2 安装后用 wifi 共享是能联网&#xff0c;问题出在公司网络限制 wsl2 IP 访问网络&#xff0c;但是主机可以上网。 解决办法&#xff0c;在主机用 nginx 设置代理&#xff0c;可能需要开端口权限 server {listen 9000;server_name localhost;location /ubuntu/ {#…

HarmonyOS鸿蒙应用规格开发指南

在鸿蒙生态系统中&#xff0c;应用规格是确保应用符合系统要求的基础。本文将深入探讨鸿蒙应用的规格开发实践&#xff0c;帮助开发者打造符合规范的应用。 应用包结构规范 1. 基本配置要求 包结构规范 符合规范的应用包结构正确的HAP配置文件完整的应用信息 示例配置&…

异步日志分析:MongoDB与FastAPI的高效存储揭秘

title: 异步日志分析:MongoDB与FastAPI的高效存储揭秘 date: 2025/05/22 17:04:56 updated: 2025/05/22 17:04:56 author: cmdragon excerpt: MongoDB与FastAPI集成构建日志分析系统,通过Motor驱动实现异步操作,提升数据处理效率。使用Pydantic进行数据验证,配置环境变量…

[原理理解] 超分使用到的RAM模型和LLAVA模型

文章目录 前述RAM 模型介绍LLAVA 模型介绍 前述 最近在研究基于diffusion的超分模型&#xff0c;发现基本都文本编码的时候都需要用到RAM模型或者LLAVA模型&#xff0c;两个有什么区别呢&#xff1f; RAM 模型介绍 RAM&#xff08;Recognize Anything Model&#xff09; 是用…