将梅尔谱图归一化为单位峰值幅度?

sab*_*bri 2 python signal-processing spectrogram mfcc librosa

我是 python 和 librosa 的新手。我正在尝试按照这种方法进行语音识别:声学前端

我的代码:

import librosa
import librosa.display
import numpy as np

y, sr = librosa.load('test.wav', sr = None)
normalizedy = librosa.util.normalize(y)

stft = librosa.core.stft(normalizedy, n_fft = 256, hop_length=16)
mel = librosa.feature.melspectrogram(S=stft, n_mels=32)
melnormalized = librosa.util.normalize(mel)
mellog = np.log(melnormalized) - np.log(10**-5)
Run Code Online (Sandbox Code Playgroud)

问题是,当我将 librosa.util.normalize 应用于变量 mel 时,我希望值介于 1 和 -1 之间,但实际上并非如此。我错过了什么?

jon*_*nor 5

如果您希望对输出进行对数缩放并标准化为 -1 到 +1 之间,则应先对数缩放,然后再标准化:

import librosa
import librosa.display
import numpy as np

y, sr = librosa.load('test.wav', sr = None)
normalizedy = librosa.util.normalize(y)

stft = librosa.core.stft(normalizedy, n_fft = 256, hop_length=16)
mel = librosa.feature.melspectrogram(S=stft, n_mels=32)
mellog = np.log(mel + 1e-9)
melnormalized = librosa.util.normalize(mellog)
# use melnormalized
Run Code Online (Sandbox Code Playgroud)