首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Excel】自动寻峰:获取多条曲线上所有峰值数据

Excel教程

【导读】在实验中,我们经常需要读取曲线上的峰值。利用Origin软件可以自动寻峰(后续推出教程),在前面的多峰拟合教程中略有提及。

今天,谭编以5条CV曲线为例,利用编程思维,提出一个算法,教大家用Excel实现对曲线上峰值的自动提取。

【寻峰原理】我们检测曲线上一定间隔的3个点的Y值,Excel中对于B列数据,第2、11、20行的3个点B2、B11、B20彼此间隔9个点,如下图所示:

我们比较这3个点的大小,只要满足中间点B11都比其他两个点大(绝对值大小比较),就可以认为是一个峰值。

这里为什么要有一定的间隔?

如上图所示,由于仪器测试精度的原因,相邻两个点之间,会存在波动情况,如果比较相邻3个点的大小,很难寻找真实的峰值。

【Excel寻峰】我们以间隔数2为例,在Excel中,插入一个空列,在E5单元格,输入

=IF(AND(ABS(B5)>ABS(B2),ABS(B5)>ABS(B8)),B5,"")

确定,

点击刚才E5单元格,双击它右下角的+,向下填充公式,即可在E列产生间断的数据,这些数据就是满足条件时,读取的B列的峰值。我们绘制出图形如下,红色点就是峰值点。

我们发现,部分峰值并没有被识别(上图虚线圆圈所示)。

以间隔数8为例:

=IF(AND(ABS(B11)>ABS(B2),ABS(B11)>ABS(B20),B11,"")

进行前述相同的操作后,得到下图:

同样,漏掉了一些峰,也误读一些峰。

以间隔数3为例

=IF(((B6-B2)/(A6-A2))*((B10-B6)/(A10-A6))

但是,是不是间隔数越大越好呢?

我们以间隔19为例:

=IF((B41-B22)/(A41-A22)-(B22-B3)/(A22-A3)

得到下图:

所以,可以根据寻峰结果,不断调整间隔数,来达到相对较高的寻峰效果。

这种方法只是一个编程思维的雏形,如果需要准确寻峰,还需要在上述公式中增加判断条件,用以排误读、补遗漏。

基于本算法,可以开发一个网页工具,方便大家使用,当然不局限于CV曲线,任何需要寻峰的都可以使用。如果非常有必要,请在下方留言。如果本教程有用,感谢分享转发朋友圈。

多点'在看',多发文章

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200820A0FP2I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券