Python librosa mel频谱图Hz缩放问题

Python librosa mel频谱图Hz缩放问题,python,audio,wav,librosa,spectrogram,Python,Audio,Wav,Librosa,Spectrogram,我对librosa.feature.melspectrogram()有一些奇怪的垂直缩放问题。似乎当我使用sr=None的librosa.load()时,Hz刻度与预期的光谱特征不一致。为了进一步研究这个问题,我看了一个1000赫兹的纯音 我不确定为什么1kHz的音调在两个光谱图中都没有排列。我怀疑sr=None的那个更准确,因为它使用的是文件中的实际采样器。有人知道为什么会有不同吗?左图中的特征显然不是1kHz,而是更像800Hz左右。谢谢。您检查过sr1和sr2的值吗?我已经更新了代码,以

我对librosa.feature.melspectrogram()有一些奇怪的垂直缩放问题。似乎当我使用sr=None的librosa.load()时,Hz刻度与预期的光谱特征不一致。为了进一步研究这个问题,我看了一个1000赫兹的纯音


我不确定为什么1kHz的音调在两个光谱图中都没有排列。我怀疑sr=None的那个更准确,因为它使用的是文件中的实际采样器。有人知道为什么会有不同吗?左图中的特征显然不是1kHz,而是更像800Hz左右。谢谢。

您检查过sr1和sr2的值吗?我已经更新了代码,以在绘图中指示sr1和sr2。sr1=44100Hz是wav文件的实际sr。左图使用此sr,因此它的源频率应为1kHz,而不是1kHz。两种情况下的奈奎斯特频率(nqf1=22050Hz和nqf2=11025Hz)均远远超过1kHz。因此,两种情况下的sr在拾取1kHz信号时应该没有问题。FFT在离散箱中运行,这可能就是问题所在。对于44100 Hz的情况,尝试将melspectrogram的n_fft和hop_长度增加因子2?我将n_fft=2048*64一直设置到n_fft=len(y1),并且没有任何变化。由于源文件是纯色调的,所以hop_长度不起任何作用。我开始相信librosa有问题。你检查过sr1和sr2的值吗?我已经更新了代码,在绘图中指示sr1和sr2。sr1=44100Hz是wav文件的实际sr。左图使用此sr,因此它的源频率应为1kHz,而不是1kHz。两种情况下的奈奎斯特频率(nqf1=22050Hz和nqf2=11025Hz)均远远超过1kHz。因此,两种情况下的sr在拾取1kHz信号时应该没有问题。FFT在离散箱中运行,这可能就是问题所在。对于44100 Hz的情况,尝试将melspectrogram的n_fft和hop_长度增加因子2?我将n_fft=2048*64一直设置到n_fft=len(y1),并且没有任何变化。由于源文件是纯色调的,所以hop_长度不起任何作用。我开始相信librosa有问题了。
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np

filename = '1kHz_44100Hz_16bit_05sec.wav'
y1, sr1 = librosa.load(filename,sr=None)
y2, sr2 = librosa.load(filename)

fig, ax = plt.subplots(1,2)

S = librosa.feature.melspectrogram(y1, sr=sr1, n_mels=128)
S_DB = librosa.power_to_db(S, ref=np.max)
librosa.display.specshow(S_DB, sr=sr1, y_axis='mel', ax=ax[0]);
ax[0].title.set_text(f"sr1={sr1}\nload(filename,sr=None)")

S = librosa.feature.melspectrogram(y2, sr=sr2, n_mels=128)
S_DB = librosa.power_to_db(S, ref=np.max)
librosa.display.specshow(S_DB, sr=sr2, y_axis='mel', ax=ax[1]);
ax[1].title.set_text(f"sr2={sr2}\nload(filename)")

plt.tight_layout()