首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中获取对数Mel谱图

在Python中获取对数Mel谱图
EN

Stack Overflow用户
提问于 2020-07-22 07:48:44
回答 1查看 2.8K关注 0票数 2

其他问题,如How to convert a mel spectrogram to log-scaled mel spectrogram,已经询问了如何在python中获得对数缩放的mel谱图。我下面的代码生成了上述语谱图

代码语言:javascript
运行
复制
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而只是执行

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
plt.imshow(ps_db)

我明白了

我的问题是,display.specshow正在做什么转换来生成第一个图,我如何只使用ps_db和numpy重新创建它,以便我的plt.imshow()调用与display.specshow对齐?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 18:06:40

正如评论中所建议的,您需要将原点更改为更低,将色彩映射表更改为岩浆(我猜;也可以是"plasma""inferno",选择here)。

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt

fig, ax = plt.figure()
plt.imshow(ps_db, origin="lower", cmap=plt.get_cmap("magma"))

关于对数刻度,据我所知,你得到的数据已经是对数刻度了,只是刻度是错误的。如果不是这样,则需要使用从here改编的meshgrid对数据进行重新采样

代码语言:javascript
运行
复制
h, w = ps_db.shape
x = np.linspace(0, 2, w)
y = np.logspace(1, 8, h)
X, Y = np.meshgrid(x,y)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63024701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档