如何在频谱图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中找到峰值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 绘制所有峰值

如何有效地生成和连接频谱图

在matplotlib中绘制频谱图颜色条的问题[重复]

使用 CNN 将固定长度的频谱图嵌入到张量的方法

计算频谱分析仪的值 [重复]

使用python为音调添加随机噪声