python:find_peaks

需求

已知一条曲线(x, y),想要找到各个peak或dip,以及对应的x值。

应用:已知一幅频谱图,要求找到各个peak及对应的频率

解决方案

1、直接利用已有的方法
scipy.signal.find_peaks

2、自己写一个方法
思路:1.利用sort(list(zip(y,x)))全部排序;2.再根据各个条件筛出结果,比如y值大小,相邻peak的间距等。这样看与方法1思路是可能是相同的。故先直接利用已有方法1。

方案1

直接利用方法:scipy.signal.find_peaks。

方法说明:

 scipy.signal.find_peaks(x, height=None, 
threshold=None, distance=None, prominence=None, width=None, wlen=None, 
rel_height=0.5, plateau_size=None)

输入

  • x: 数据
  • 其他参数:各种筛选条件。方法将根据这些筛选条件来筛选peak。各输入参数意义详见官方文档

输出:

  • peaks: ndarray,找到的peaks的索引id
  • properties:dict,包含找到的peaks的各种信息,比如properties[‘peak_heights’]

实例

from scipy.signal import find_peaks
# 已导入需要处理的数据(x,y)
plt.plot(x,y)
plt.xlabel('freq/Hz')
plt.ylabel('amp')

peak_id,peak_property = find_peaks(y, height=2000, distance=20)
peak_freq = x[peak_id]
peak_height = peak_property['peak_heights']
print('peak_freq',peak_freq)
print('peak_height',peak_height)

输出结果:正确。

peak_freq [1.2125e+08 3.0000e+08 4.2125e+08]
peak_height [9277.83035228 4566.30860382 4744.32457053]

在这里插入图片描述

  • 12
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
find_peaks函数是scipy库中的一个信号处理函数,用于寻找数组中的峰值。它可以帮助我们找到波峰或波谷的位置,并提供一些有用的属性信息。在给定的例子中,使用了find_peaks函数来找到给定数组中的峰值。 在示例代码中,首先导入了find_peaks函数,然后创建了一个数组x。接下来,使用find_peaks(x, prominence=0)来寻找数组x中的峰值,并将结果存储在peaks和properties两个变量中。最后,打印出peaks和properties的值,分别表示找到的峰值的位置和属性信息。 关于prominence参数,它是用来控制峰值的突出程度的阈值。如果设置为0,则所有的峰值都会被找到。如果设置为较大的值,则只有突出程度超过该阈值的峰值才会被找到。 在另一个例子中,使用find_peaks函数来寻找心电图信号中的峰值。在这个例子中,先导入了matplotlib.pyplot和numpy库,然后使用electrocardiogram()函数生成了一个心电图信号,再从该信号中截取了一段作为输入数组x。接着调用find_peaks(x, prominence=1, width=20)来寻找x中的峰值,同时指定了prominence和width参数来限制峰值的突出程度和宽度。最后,使用matplotlib库来绘制出心电图和找到的峰值,并展示出来。 总结来说,find_peaks函数是一个用于寻找数组中峰值的函数,可以根据需要设置突出程度和宽度的阈值来筛选峰值。它在信号处理和数据分析中有广泛的应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python中峰值识别算法find_peak原理介绍](https://blog.csdn.net/qq_43251445/article/details/130125713)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [scipy.signal.find_peaks(峰值检测)](https://blog.csdn.net/chehec2010/article/details/117336967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值