首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何记录二维矩阵/图像的刻度

如何记录二维矩阵/图像的刻度
EN

Stack Overflow用户
提问于 2020-11-22 17:49:11
回答 1查看 702关注 0票数 4

我有一个二维数字阵列的音频谱图,我想把它保存为图像。

我用利布罗萨库来获取光谱。我也可以用librosa.display.specshow()函数绘制它。如下所示,有许多不同的缩放类型。

代码语言:javascript
复制
import PIL
import librosa
import librosa.display

def display_spectrogram(spectrum, sampling_rate):
    """
    Frequency types:
    ‘linear’, ‘fft’, ‘hz’ : frequency range is determined by the FFT window and sampling rate.
    ‘log’ : the spectrum is displayed on a log scale.
    ‘mel’ : frequencies are determined by the mel scale.
    ‘cqt_hz’ : frequencies are determined by the CQT scale.
    ‘cqt_note’ : pitches are determined by the CQT scale.
    """

    librosa.display.specshow(spectrum, sr=sampling_rate, x_axis='time', y_axis='log')
    plt.colorbar(format='%+2.0f dB')
    plt.title('Spectrogram')
    plt.show()

我还可以将光谱图(一个数字数组)转换为图像,并保存如下所示。

代码语言:javascript
复制
img = PIL.Image.fromarray(spectrum)
img.save("out.png")

我有原始的光谱图(线性缩放),我想用y轴保存它。我查看了图书馆源代码,以了解它是如何扩展的,但无法理解它。

如何记录图像/二维numpy数组的y轴的缩放?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-03 15:04:03

Y轴的实际对数变换是由matplotlib完成的.您可以通过执行ax.set_yscale('linear')ax.set_yscale('linear')来测试这一点。因此,最简单的选择是调整matplotlib图以删除刻度、边框等。

如果您想自己进行日志缩放,步骤包括

  • 计算Y轴上的电流频率。使用频率
  • 计算Y轴上所需的频率。使用numpy.logspace或类似的
  • 在所需的频率下对光谱图进行采样,例如使用scipy.interpolate (interp1d)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64957506

复制
相关文章

相似问题

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