在 Python 中获取 Log Mel 频谱图
Obtaining the Log Mel-spectrogram in Python
其他问题如How to convert a mel spectrogram to log-scaled mel spectrogram问过如何在python中得到log-scaled mel spectrogram。我下面的代码生成所述频谱图
ps = librosa.feature.melspectrogram(y=y, sr=sr)
ps_db= librosa.power_to_db(ps, ref=np.max)
librosa.display.specshow(ps_db, x_axis='s', y_axis='log')
如果我绘制它,我就会得到我正在寻找的频谱图。
但是,如果我不使用 librosa 的 display.specshow 而只是执行
import matplotlib.pyplot as plt
plt.imshow(ps_db)
我明白了
我的问题是,display.specshow 做了什么转换来生成第一个图,我如何才能仅使用 ps_db 和 numpy 重新创建它,以便我的 plt.imshow() 调用对齐display.specshow?
按照评论中的建议,您需要将原点更改为更低,将颜色图更改为岩浆(我猜;也可以是 "plasma"
或 "inferno"
,选择 here )
import matplotlib.pyplot as plt
fig, ax = plt.figure()
plt.imshow(ps_db, origin="lower", cmap=plt.get_cmap("magma"))
关于对数刻度,据我所知,你得到的数据已经是对数刻度了,只是刻度不对。如果不是这种情况,您需要使用改编自 here:
的 meshgrid
对数据重新采样
h, w = ps_db.shape
x = np.linspace(0, 2, w)
y = np.logspace(1, 8, h)
X, Y = np.meshgrid(x,y)
其他问题如How to convert a mel spectrogram to log-scaled mel spectrogram问过如何在python中得到log-scaled mel spectrogram。我下面的代码生成所述频谱图
ps = librosa.feature.melspectrogram(y=y, sr=sr)
ps_db= librosa.power_to_db(ps, ref=np.max)
librosa.display.specshow(ps_db, x_axis='s', y_axis='log')
如果我绘制它,我就会得到我正在寻找的频谱图。
但是,如果我不使用 librosa 的 display.specshow 而只是执行
import matplotlib.pyplot as plt
plt.imshow(ps_db)
我明白了
我的问题是,display.specshow 做了什么转换来生成第一个图,我如何才能仅使用 ps_db 和 numpy 重新创建它,以便我的 plt.imshow() 调用对齐display.specshow?
按照评论中的建议,您需要将原点更改为更低,将颜色图更改为岩浆(我猜;也可以是 "plasma"
或 "inferno"
,选择 here )
import matplotlib.pyplot as plt
fig, ax = plt.figure()
plt.imshow(ps_db, origin="lower", cmap=plt.get_cmap("magma"))
关于对数刻度,据我所知,你得到的数据已经是对数刻度了,只是刻度不对。如果不是这种情况,您需要使用改编自 here:
的meshgrid
对数据重新采样
h, w = ps_db.shape
x = np.linspace(0, 2, w)
y = np.logspace(1, 8, h)
X, Y = np.meshgrid(x,y)