控制频谱图大小的参数

时间:2018-07-09 08:51:25

标签: python signal-processing spectrogram librosa

我正在尝试按照以下说明获取频谱图。

  

每个音频段的持续时间为5s。大小相等的框架是   从音频中提取(连续帧之间有重叠),并且每个帧由1024个组成   样品。梅尔秤分为128个档位。因此,   音频片段的频谱图的尺寸为192×128。

据我所知,此指令暗含n_mels=128函数中的n_fft=1024melspectrogram。因此,我尝试使用以下代码获取频谱图:

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,),采样率sr44100,我得到的频谱图形状为(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)

但是,我不确定这是否是获取所需光谱图维度的正确方法。看来这个过程只是反复试验。我想知道是否有一种更科学的方法来获得我想要的形状的光谱图而无需猜测参数值?

1 个答案:

答案 0 :(得分:0)

如果将y_shape的长度除以hop_length,则会得到帧数:

220500 / 512 = 430.6

如果需要192帧,请在193 * 512 = 98816中输入y个样本。