Librosa的逆mel谱图到stft需要很长时间

2024-09-27 07:28:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

以下是我的代码:

# 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)


Tags: datareturndeforderpassfilterfscutoff
1条回答
网友
1楼 · 发布于 2024-09-27 07:28:42

Griffin Lim是一种迭代方法,用于从仅幅度谱图估计所需的相位信息。librosa实现中的迭代次数可以调整(n_iter)。减少这一点会使事情加快一点,但总体来说是缓慢的

通过以下方法可以加快频谱处理后返回波形的速度:

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

相关问题 更多 >

    热门问题