1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 自动寻峰:获取多条曲线上所有峰值数据

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

时间:2021-08-31 06:42:35

相关推荐

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

来源丨编辑之谭← 关注TA在实验中,我们经常需要读取曲线上的峰值。利用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))<0,B6,"")

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

我们以间隔19为例:

=IF((B41-B22)/(A41-A22)-(B22-B3)/(A22-A3)<0.0001,B22,"")

得到下图:

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

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

华算科技专注理论计算模拟服务,是唯一拥有VASP商业版权及其计算服务资质、唯一拥有海外高层次全职技术团队正规机构采用第一性原理计算与分子动力学、蒙特卡罗等方法相结合,对电池、催化、纳米材料、生物医药等进行多尺度设计与模拟,专注为海内外催化、纳米及能源领域科研人员提供材料计算模拟整体技术解决方案。客户群体:已为清华、北大、天大、北理、北航、西交、华工、同济、复旦以及中科院各大院所等百余个高校院所提供超过1000个解决方案。

点击阅读原文,提交计算需求!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。