【问题标题】:Librosa's inverse mel spectrogram to stft taking a long timeLibrosa 的逆梅尔谱图到 stft 需要很长时间
【发布时间】:2020-11-27 08:28:40
【问题描述】:

我目前正在尝试将 mel 频谱图转换回音频文件,但是,librosa 的 mel_to_stft 函数需要很长时间(最多 15 分钟)才能读取以 384kHz 采样的 30 秒 .wav 文件。

以下是我的代码:

# Code for high pass filter
def butter_highpass(cutoff, fs, order=5):
    nyq = 0.5 * fs
    normal_cutoff = cutoff / nyq
    b, a = butter(order, normal_cutoff, btype='high', analog=False)
    return b, a

def butter_highpass_filter(data, cutoff, fs, order=5):
    b, a = butter_highpass(cutoff, fs, order=order)
    y = filtfilt(b, a, data)
    return y

def high_pass_filter(data, sr): 
    # set as a highpass filter for 500 Hz
    filtered_signal = butter_highpass_filter(data, 500, sr, order=5)
    return filtered_signal

example_dir = '/Test/test.wav'
sr, data = wavfile.read(example_dir)
des_sr = 44100
data_resamp = samplerate.resample(data, des_sr/sr, 'sinc_best')
data_hp = high_pass_filter(data_resamp, des_sr)
mel_spect = librosa.feature.melspectrogram(y=data_resamp, sr=des_sr)
S = librosa.feature.inverse.mel_to_stft(mel_spect)
y = librosa.griffinlim(S)

【问题讨论】:

  • 你确定它的 mel_to_stft 需要花费时间,而不是 griffinlim 调用吗?
  • 通过转换为 mel-spectrogram 然后再返回波形,您的目标是什么?在给出的示例中,我没有看到(mel)光谱域有任何进展
  • @jonnor 我可以确认是逆运算本身需要很长时间:更准确地说,是对librosa.util._nnls的调用

标签: python audio spectrogram librosa mfcc


【解决方案1】:

Griffin-Lim 是一种迭代方法,用于估计从仅幅度频谱图获取所需的相位信息。 librosa 实现中的迭代次数可以调整 (n_iter)。减少它会稍微加快速度,但通常速度很慢。

频谱处理后返回波形可以通过以下方式加速:

  1. 使用一次性近似方法,例如神经网络。例如Fast Spectrogram Inversion using Multi-head Convolutional Neural Networks
  2. 通过使用原始相位信息而不是根据修改后的幅度谱图进行估计。这要求相位频谱图可用(不仅仅是幅度),但在对音频文件进行频谱处理时通常会出现这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2019-05-24
    • 2018-07-19
    • 1970-01-01
    • 2013-09-07
    • 2020-08-26
    • 2014-10-09
    相关资源
    最近更新 更多