繪制音頻信號的各種頻譜圖,包括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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82041.shtml
英文地址,請注明出處:http://en.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; 是用…