您现在的位置是:首页 > 文章详情

C#实现局部峰值查找,功能对应Matlab中的findpeaks.m

日期:2018-07-28点击:495
原文: C#实现局部峰值查找,功能对应Matlab中的findpeaks.m

相关算法的原理参考Ronny,地址:图像分析:投影曲线的波峰查找,这里感谢下原作者。

参照C++的代码实现,我用C#翻译了下,其实原理也很简单的,下面放相关实现代码:

 private double[] oneDiff(double[] data) { double[] result = new double[data.Length - 1]; for (int i = 0; i < result.Length; i++) { result[i] = data[i + 1] - data[i]; } return result; } private int[] trendSign(double[] data) { int[] sign = new int[data.Length]; for (int i = 0; i < sign.Length; i++) { if (data[i] > 0) sign[i] =1; else if (data[i] == 0) sign[i] = 0; else sign[i] = -1; } for (int i = sign.Length - 1; i >=0 ; i--) { if (sign[i] == 0 && i ==sign.Length - 1) { sign[i] = 1; } else if (sign[i] == 0) { if (sign[i+1] >= 0) { sign[i] = 1; } else { sign[i] = -1; } } } return sign; } private int[] getPeaksIndex(int[] diff) { List<int> data = new List<int>(); for (int i = 0; i != diff.Length - 1; i++) { if (diff[i+1] - diff[i] == -2) { data.Add(i + 1); } } int[] result = new int[data.Count]; for (int i = 0; i < result.Length; i++) { result[i] = data[i]; } return result;//相当于原数组的下标 }

调用方法:

double[] data = {25, 8, 15, 5, 6, 10, 10, 3, 1, 20, 7}; int[] index = getPeaksIndex(trendSign(oneDiff(Constant.data)));

返回的int[]数组内容是对应原数组中峰值对应的索引(从0开始)

 

原文链接:https://yq.aliyun.com/articles/678159
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章