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曲线,任何需要寻峰的都可以使用。如果非常有必要,请在下方留言。如果本教程有用,感谢分享转发朋友圈。
多点'在看',多发文章
领取专属 10元无门槛券
私享最新 技术干货