如何在频谱图Python中找到峰值[重复]
Posted
技术标签:
【中文标题】如何在频谱图Python中找到峰值[重复]【英文标题】:How to find peaks in a spectrogram Python [duplicate] 【发布时间】:2018-06-16 04:11:22 【问题描述】:简介
我试图在我生成的频谱图中找到振幅峰值,该频谱图中将频率与时间和振幅作为第三轴进行绘制。
我查看并尝试使用scipy.signal.find_peaks_cwt
编写解决方案,但官方参考指南没有解释widths
参数的含义。
问题:
当使用scipy.signal.find_peaks_cwt
查找峰值时,它会返回频率-时间坐标吗?如果没有,是否有其他库或方法可用于返回局部最大值的坐标?
scipy.signal.find_peaks_cwt
中的widths
参数是什么?
scipy.signal.find_peaks_cwt
处理数组,为什么您仍然需要绘制频谱图才能找到局部最大值?
这是我用来创建频谱图的代码:
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile
from scipy import signal
def create_spectrogram(audio):
rate, data = scipy.io.wavfile.read(audio)
data_1D = data.flatten()
plt.specgram(data_1D, NFFT = 64, Fs = 64, noverlap=32)
plt.savefig("melody")
plt.show()
if __name__ == '__main__':
audio = "melody.WAV"
create_spectrogram(audio)
这是输出的频谱图:
链接:
scipy.signal.find_peaks_cwt
参考指南:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.find_peaks_cwt.html
【问题讨论】:
请阅读如何创建minimal reproducible example 并通过编辑将缺少的信息添加到您的帖子中:) 如果您还没有阅读How to Ask,我建议您这样做:) 我强烈推荐遵循我链接的 2 个指南,因为当帖子遵循这些指南时,SO 上的人更有可能回答问题。我特别缺少的是 - 到目前为止你尝试了什么?您面临哪些错误/问题?您是否有 coden-ps 可以显示您到目前为止尝试过的内容?find_peaks_cwt
用于一维数组。如果您想在二维频谱图中找到局部峰值,请阅读以下内容:***.com/questions/3684484/…
【参考方案1】:
您能否提供更多信息,说明您的数据是如何存储在您的代码中的?它是一个 numpy 数组、一个 scipy.signal.spectrogram 还是简单的 python 列表?一段 sn-p 代码将有助于您找到一个好的解决方案。
目前,我建议的唯一“简单”方法是查看numpy.amax(),明智地选择赋予轴参数的值,应该可以得到你想要的最大值。
【讨论】:
以上是关于如何在频谱图Python中找到峰值[重复]的主要内容,如果未能解决你的问题,请参考以下文章