【发布时间】:2018-12-16 21:34:13
【问题描述】:
我正在尝试按照以下说明获取频谱图。
每个音频片段的持续时间为 5 秒。大小相等的帧是 从音频中提取(连续帧之间有重叠),每帧由 1024 样品。 mel-scale 分为 128 个 bin。因此, 音频段的频谱图尺寸为192×128。
据我所知,这条指令在melspectrogram 函数中暗示了n_mels=128 和n_fft=1024。所以我尝试使用以下代码获取频谱图:
from librosa import load, power_to_db
from librosa.display import specshow
from librosa.feature import melspectrogram
audio_path = r'5s.wav'
y, sr = load(audio_path,sr=44100)
S = melspectrogram(y,sr,n_mels=128,n_fft=1024,hop_length=512)
print(S.shape)
y 的形状是(220500,),sr 的采样率是44100,而我得到的频谱图形状是(128, 431)。 128 mel-scale 大小是正确的,但我得到的帧数是 431 而不是指令中提到的 192 帧。
为了获得 192 帧,我将采样率更改为 22050 并不断调整 hop_lenght,直到频谱图有 192 帧:
audio_path = r'5s.wav'
y, sr = load(audio_path,sr=22050)
S = melspectrogram(y,sr,n_mels=128,n_fft=1024,hop_length=575)
print(S.shape)
但是,我不确定这是否是获得我想要的频谱图维度的正确方法。似乎这个过程只是反复试验。不知道有没有更科学的方法来得到我想要的形状的频谱图而不用猜测参数值?
【问题讨论】:
标签: python signal-processing spectrogram librosa