首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在librosa中从mel谱图重建STFT矩阵,以便重建原始音频?

如何在librosa中从mel谱图重建STFT矩阵,以便重建原始音频?
EN

Stack Overflow用户
提问于 2020-08-31 10:06:27
回答 1查看 565关注 0票数 0

我已经使用下面的代码在librosa中生成了一个梅尔谱图

代码语言:javascript
复制
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矩阵,以便将其传递给griffin lim函数。我该怎么做呢?

使用STFT数据生成频谱图

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2020-08-31 10:34:16

我不确定这个问题是否适合这个论坛的当前形式(堆栈交换可能更适合),但由于它与基于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。他们称其为postnet,因为它在Mels被预测后充当后处理器。

若要设置此网络,请将地面实况(目标)音频转化为Mels,然后创建循环网络(CBHG或其他任何内容)以将其转换为STFT等效项。最小化这些短时傅里叶变换预测和我们可以从目标音频创建的实际短时傅立叶变换之间的损失。

1

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63663865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档