簡體   English   中英

如何從 librosa 中的梅爾頻譜圖重建 STFT 矩陣,以便重建原始音頻?

[英]How can I reconstruct the STFT matrix from a mel spectrogram in librosa so I reconstruct the original audio?

我使用以下代碼在 librosa 中生成了一個 melspectrogram

import os
from matplotlib import pyplot as plt
import librosa
import librosa.display
import pylab
import numpy as np


x, sr = librosa.load('audio/example.wav')
mel = librosa.feature.melspectrogram(x,sr)
P = librosa.power_to_db(mel, ref=np.max)
librosa.display.specshow(P)
pylab.savefig("example.png", bbox_inches=None, pad_inches=0)

據我了解,頻譜圖只是音頻信號 STFT 矩陣的直觀表示。 我正在嘗試重建用於生成頻譜圖的 STFT 矩陣,以便通過 griffin lim function 傳遞它。我應該怎么做?

使用 STFT 數據生成頻譜圖

def generate_spectrogram(x, sr):
    X = librosa.stft(x)
    Xdb = librosa.amplitude_to_db(abs(X))
    fig = plt.figure(figsize=(10, 10), dpi=100, frameon=False)
    ax = fig.add_axes([0, 0, 1, 1], frameon=False)
    ax.axis('off')
    librosa.display.specshow(Xdb, sr=sr, cmap='gray', x_axis='time', y_axis='hz')
    plt.savefig('example.png', quality=100, bbox_inches=0, pad_inches=0)
    librosa.cache.clear()

我不確定這個問題是否適合這個論壇的當前形式(堆棧交換可能更合適),但由於它與基於 DNN 的語音合成管道非常相關,我認為擴展它有點。

我們無法從 Mel 頻譜圖中准確重建 STFT。 原因是我們 Mel 是 STFT 的“壓縮”版本,頻率來自 Mel 標度,然后在這些頻率上應用(到 STFT)三角濾波器。 通常,我們會丟失從 STFT 到 mel 的信息。 有關詳細說明,請參閱這篇優秀文章。

https://haythamfayek.com/2016/04/21/speech-processing-for-machine-learning.html

現在,回到您的問題 - 我假設您正在以 Tacotron [1] 工作的方式進行語音合成 - 為了應用 Griffin Lim,正如您正確指出的那樣,我們需要線性頻譜圖。 論文中的做法是使用神經網絡將 Mel 轉換為 STFT。 他們稱其為 pos.net,因為它在預測 Mels 之后用作后處理器。

要設置 this.network,將 ground truth(目標)音頻轉換為 Mels,並創建一個 recurrent.network(CBHG 或其他)以將其轉換為 STFT 等價物。 最小化這些 STFT 預測與我們可以從目標音頻創建的實際 STFT 之間的損失。

[1] https://arxiv.org/abs/1703.10135

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM