我有一组歌曲,我提取了 STFT(短时傅里叶变换)并使用幅度谱使用 mel filterbank 矩阵计算 mel 频谱图, 所以. 我想知道有什么方法可以逆转这个过程,即从梅尔频谱图转换回频谱图。我对梅尔谱图进行了一些降维,并从较低维度重建了梅尔谱图。现在我想从重建的梅尔频谱图重新生成音频信号,所以我想首先重建频谱图,然后重建音频信号。
问题是梅尔滤波器组矩阵不是方阵,因为我们减少了频率箱的数量,所以逆不能这样使用:. 那么有什么方法可以生成逆映射,比如一些可以从到?
我有一组歌曲,我提取了 STFT(短时傅里叶变换)并使用幅度谱使用 mel filterbank 矩阵计算 mel 频谱图, 所以. 我想知道有什么方法可以逆转这个过程,即从梅尔频谱图转换回频谱图。我对梅尔谱图进行了一些降维,并从较低维度重建了梅尔谱图。现在我想从重建的梅尔频谱图重新生成音频信号,所以我想首先重建频谱图,然后重建音频信号。
问题是梅尔滤波器组矩阵不是方阵,因为我们减少了频率箱的数量,所以逆不能这样使用:. 那么有什么方法可以生成逆映射,比如一些可以从到?
获取幅度谱图和梅尔滤波器组都是有损过程。重建原件所需的重要信息将丢失。因此,您需要返回并使用原始音频样本通过确定与降维等效的时域或频域滤波器来进行重建。
您可以对丢失的信息做出假设,但这些假设本身通常听起来不准确、人为和/或机器人。或者您可以仅使用专门合成的输入,其中假设通过该输入的设计是正确的。
如今,最简单的事情就是librosa
用于此任务。它具有mel_to_stft功能,可以完全满足您的需求。
正如其他人所提到的,这种重建是有损的,只能找到近似解。在librosa 中,它是使用非负租赁平方算法完成的。
记住一件事:如果您使用自己的算法提取了 mel 能量,则必须确保频率扭曲是相似的,否则您最终会得到听起来不和谐的音频(假设稍后您想要合成来自 STFT 的波形) 。在 librosa 中有两个变形函数,您可以通过指定来使用第二个htk=True
。
如前所述,通常不可能完全执行。就像如果你有 3d 场景的 2d 表示,比如汽车的前侧,你原则上不能说它是非常薄的卡通片,类似于汽车,或者它是一些真车的照片,但如果你假设没有人试图愚弄你,你可以对真实数据做一些假设,这就是机器学习生成模型的工作原理。
关于逆变换,由于大多数滤波器是正交的(它们的内积为零),您可以使用滤波器组的转置作为逆变换的近似值,但是您可以轻松验证数据的缩放比例是错误的。您可以使用从每个通道(频率)的某些大型数据集中提取的有关原始 STFT 的一些统计数据,并将拥有“正确”的规模。当仅从幅度信号创建完整的频谱图时,您可以使用 Griffin-Lin 算法进行一些近似。您可以使用 WaveNet 或 Parallel Wavenet 之类的东西来更稳健地执行此操作,因为它已被验证可以很好地处理语音信号和其他音频信号。