如何在频谱图Python中找到峰值

时间:2018-01-06 15:47:06

标签: python max spectrogram audio-fingerprinting

简介

我试图在我生成的频谱图中找到幅度峰值,该频谱图将时间和幅度作为第三轴绘制。

我已查看并尝试使用scipy.signal.find_peaks_cwt对解决方案进行编码,但官方参考指南并未解释widths参数的含义。

问题:

使用scipy.signal.find_peaks_cwt查找峰值时,它会返回频率 - 时间坐标吗?如果没有,是否有另一个库或方法用于返回局部最大值的坐标?

widths中的scipy.signal.find_peaks_cwt参数是什么?

由于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)       

这是输出的频谱图:

Here is the outputted Spectrogram:

链接: scipy.signal.find_peaks_cwt参考指南:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.signal.find_peaks_cwt.html

1 个答案:

答案 0 :(得分:0)

请您提供更多信息,了解您的数据在您的代码中的确切存储方式?它是一个numpy数组,scipy.signal.spectrogram或简单的python列表?一段代码可以帮助您找到一个好的解决方案。

目前唯一的" easy"我建议的方法是看看numpy.amax(),明智地选择轴参数的值,可以得到你想要的最大值。