【问题标题】:How to plot librosa STFT output properly如何正确绘制 librosa STFT 输出
【发布时间】:2020-06-30 07:24:35
【问题描述】:

我正在创建一个 100Hz 的正弦波并尝试绘制它的 stft:

import scipy.io
import numpy as np
import librosa
import librosa.display
#%matplotlib notebook
import matplotlib.pyplot as plt


A = 1                      # Amplitude
f0 = 100                     # frequency
Fs = f0 * 800                   # Sampling frequency
t = np.arange(Fs) / float(Fs)
X = np.sin(2*np.pi*t*f0)
plt.plot(t, X)
plt.xlabel("Time")
plt.ylabel("Amplitude")
plt.show()

D = np.abs(librosa.stft(X))
librosa.display.specshow(librosa.amplitude_to_db(D,ref=np.max),y_axis='log', x_axis='time')

我期待的是一条 100Hz 的单线。

另外,我如何绘制频率(X 轴)与幅度(Y 轴)图以查看 100Hz 的峰值?

【问题讨论】:

    标签: python matplotlib signal-processing fft librosa


    【解决方案1】:

    您需要使用sr 关键字参数将采样率传递给specshow。否则它会默认为 22kHz,这会给出错误的结果。

    D = np.abs(librosa.stft(X))
    db = librosa.amplitude_to_db(D,ref=np.max)
    librosa.display.specshow(db, sr=Fs, y_axis='log', x_axis='time')
    

    【讨论】:

      猜你喜欢
      • 2017-10-08
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2021-02-02
      相关资源
      最近更新 更多