如何从样本/帧到时间更改x轴?

时间:2017-11-12 01:10:10

标签: matplotlib signal-processing

我需要更改此图表上的x轴样本'时间: enter image description here

我使用此过程创建了图表:

y, _ = librosa.load('sound/data/kea-song.mp3', 48000)
y /= y.max()

# compute the rmse
e = librosa.feature.rmse(y=y)[0]
e -= e.min()#what does this really do, guessing a kind of normalisation?
e /= e.max()
plt.plot(e)
plt.show()

如果我不计算rmse,则会将x轴转换为时间:

y, _ = librosa.load('sound/data/kea-song.mp3', 48000)
plt.plot(np.arange(len(y))/48000, y)

但是在rmse函数之后我不知道如何进行转换。我猜它与y *中的样本有关,被分组成帧但是我不能在我的生活中找出如何从这些帧转换(如果它是帧)到时间!

我该怎么做? 提前致谢(:

  • 继承了plt.plot(y)的情节: enter image description here

1 个答案:

答案 0 :(得分:2)

我还没有测试任何这个,但是通过阅读文档,似乎该函数计算帧中的FFT,默认帧长度为2048个样本,跳跃长度为512个样本。

这意味着如果原始音频中有len(y)个样本,则输出中应该有(len(y)-2048)//512个帧。第一帧将是样本0,第二帧将是样本512,等等。所以你可以这样做:

e_time = np.arange(len(e))*512/48000
plt.plot(e_time, e)