Why does librosa STFT show wrong frequencies?
我使用numpy生成了200 Hz的正弦波,然后使用librosas
下图显示了librosas谱图和matplotlibs频谱的结果。
最小工作示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | import matplotlib.pyplot as plt from matplotlib import mlab %matplotlib inline import numpy as np import librosa import librosa.display sr = 20000 freq1 = 200 n_fft=2000 x = np.linspace(0, 1, sr) y = 0.5*np.sin(freq1 * 2 * np.pi * x) no_window = np.linspace(1, 1, n_fft) D = np.abs(librosa.stft(y, n_fft=n_fft, hop_length=int(n_fft/2), window=no_window, center=False,)) plt.figure(figsize=(9, 4)) librosa.display.specshow(D, y_axis='linear') plt.xlabel('Time [s]') plt.ylabel('Frequency [Hz]') plt.ylim(0, 250) plt.tight_layout() plt.show() plt.figure(figsize=(9, 4)) plt.magnitude_spectrum(y, Fs=sr, color='C1', window=mlab.window_none) plt.xlim(0, 250) plt.xlabel('Frequency [Hz]') plt.ylabel('Amplitude [-]') plt.tight_layout() plt.show() |
仅将结果传递到
1 | librosa.display.specshow(D, y_axis='linear', sr=sr) |
如果不这样做,则默认为
这类似于此处给出的答案。