• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

相关算法的原理参考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开始)

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi-Windows自动计划任务与ParamStr详解发布时间:2022-07-18
下一篇:
delphiBerlin10.1string、AnsiString及Tbytes等之间的转换发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap