如何解决如何更改x轴以从python中的幅度谱中找到峰值
我已经用 librosa 加载了一个音频文件来绘制它的幅度谱
signal,sr = librosa.load(audio_file,sr=44100)
signal_fft = np.fft.fft(signal)
magnitude = np.abs(signal_fft)
frequency = np.linspace(0,sr,len(magnitude))
plt.plot(frequency[:30000],magnitude[:30000]) # cutting the plot at the Nyquist frequency
plt.xlabel("Frequency (Hz)")
plt.ylabel("Magnitude")
plt.title("Magnitude spectrum")
plt.show()
这是幅度谱:
然后我尝试用 scipy.signal.find_peaks
peaks,_ = find_peaks(magnitude[:30000],height=350)
plt.plot(magnitude[:30000])
plt.plot(peaks,magnitude[peaks],"x")
plt.show()
然后我想知道是否可以在频率标度上绘制峰值? 我在定义 x 轴时遇到了麻烦,因为在绘制时它会以另一个比例出现。
解决方法
如matplotlib.pyplot.plot
's documentation所示:
x
值是可选的,默认为 range(len(y))
因此,您的第二个绘图使用 x 轴的索引而不是频率。
要获得以 Hz 为单位的值,您需要每个绘制幅度的频率,幸运的是您通过 frequency
变量获得了该频率。因此,您可以使用以下内容生成与第一个图具有相同比例的第二个图:
peaks,_ = find_peaks(magnitude[:30000],height=350)
plt.plot(frequency[:30000],magnitude[:30000])
plt.plot(frequency[peaks],magnitude[peaks],"x")
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。