自动寻峰

落花生雪 2014-02-28 03:03:15
通过仪器扫描,获取到一组离散数据,并依据这些数据点画出一条曲线,该曲线波形具有两个相互独立的波峰。
现在的问题是,我想让程序具备自动寻峰的能力,就是根据获取的数据自动识别波峰,并标示出峰高等参数。
不知道哪位前辈做过类似的项目,还望指点一二!
...全文
690 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的小游侠 2014-03-05
  • 打赏
  • 举报
回复
如果不会VC就直接用matlab.大把的各种运算工具给你。如果你不会matlab就自学完再说。
勤奋的小游侠 2014-03-05
  • 打赏
  • 举报
回复
你这个问题没那么简单的:一个峰300点起,400点最大值,500点终点。这么容易定义? 中间有毛刺怎么办? 你求的是一个大波峰,但毛刺可能和波峰差不多,一个峰有二个小山头,你算它是二个峰还是一个峰? 我给一个具体的方案给你: 1、滤波,将峰值太突出的全部滤掉。具体就是将在小区间内峰值起落太大的变光滑。各种滤波算法自己找。 2、大尺度求拐点,比如你的数据是1000个点,将它变成100个点,求这100个点的拐点,这个基本就可以定出峰的起点,峰值,和终点范转。各种求拐点的算法自己找 3、在2步的上缩小尺度,求出上述三个范围内的真正拐点。 这就是你要求的。 你的问题应该提练得更简单一些,那一步骤你有问题?有什么具体的问题?这样别人才会给你具体的答案。 你给一个这么大的问题,自己也没有抽象成数学模型,就想直接问VC代码,谁会写给你?
落花生雪 2014-03-04
  • 打赏
  • 举报
回复
大哥大姐们,能不能抽时间给个具体的方案啊,整个简单不麻烦有个毛用啊。。。。无语
heraldww 2014-03-04
  • 打赏
  • 举报
回复
这个很容易计算的
zhoujk 2014-03-03
  • 打赏
  • 举报
回复
引用 9 楼 limingmcu 的回复:
我查了下资料,网上说有二阶导数寻峰,还有零卷积寻峰,再有就是根据数据点的变化趋势同时考虑数据噪声水平确定峰位等各种方法;但都是一些理论知识,我不知道该怎么用VC编程去实现,不知前辈有什么经验没有。 我之前说的“波峰的起点和终点”可能表达不明确,这句话本意是指 一个全能峰的起点和终点,依此确定该峰的跨度,比如说第300个数据点波形起来了,400点的时候达到了最大值,500点的时候又恢复到了背景值,那这个峰的跨度就是200个数据点。
你先把峰顶找到,然后再从峰顶向两侧分别扩展,得到峰的主体
洗洗睡去 2014-03-03
  • 打赏
  • 举报
回复
怎么看 一趟比较都能搞出来啊
落花生雪 2014-03-03
  • 打赏
  • 举报
回复
我查了下资料,网上说有二阶导数寻峰,还有零卷积寻峰,再有就是根据数据点的变化趋势同时考虑数据噪声水平确定峰位等各种方法;但都是一些理论知识,我不知道该怎么用VC编程去实现,不知前辈有什么经验没有。 我之前说的“波峰的起点和终点”可能表达不明确,这句话本意是指 一个全能峰的起点和终点,依此确定该峰的跨度,比如说第300个数据点波形起来了,400点的时候达到了最大值,500点的时候又恢复到了背景值,那这个峰的跨度就是200个数据点。
zhoujk 2014-03-03
  • 打赏
  • 举报
回复
引用 6 楼 worldy 的回复:
卷积运算,要多少运算量
先解决问题,再想办法优化吧,我一般是这么做的
zhoujk 2014-03-03
  • 打赏
  • 举报
回复
这种1维的要不了多少,平移后不是累加,是减去出界的下标,然后加上新进入的下标,O(N)就可以了
worldy 2014-03-03
  • 打赏
  • 举报
回复
引用 5 楼 zhoujk 的回复:
000011110000 111111111111 用这两个模板对源数据进行卷积。然后返回两个结果之商的图像来看一下 两个模板只是举例,要根据实际数据进行宽度调整。这与你定义的峰的宽度有关
卷积运算,要多少运算量
zhoujk 2014-03-03
  • 打赏
  • 举报
回复
000011110000 111111111111 用这两个模板对源数据进行卷积。然后返回两个结果之商的图像来看一下 两个模板只是举例,要根据实际数据进行宽度调整。这与你定义的峰的宽度有关
worldy 2014-03-01
  • 打赏
  • 举报
回复
引用 2 楼 limingmcu 的回复:
我获取的只是一组离散数据,有几百个。我问一下,前辈说要进行一阶求导,是不是先要根据这些数据用曲线拟合或者样条差值算法计算出一个符合数据曲线走势的函数来,然后再根据这个函数求导? 我之前认为离散函数的一阶导数就是相邻两个数值做减法,但要是这样的话,由于我的数据波动比较大,可能效果不太好。再者就是,根据此方法找到了拐点,确定了峰高的位置,那这个波峰的起点和终点又怎么确定呢?
单纯寻峰(2个),只要使用2个点,最大1,最大2两个变量,逐个比较. 如果当前点比最大大 则最大1=当前 最大2=最大1 如果当前点比最大1小,比最大2大,则最大=当前 否则,最大1最大2不变 循环结束,即可直到两个波峰的位置
schlafenhamster 2014-03-01
  • 打赏
  • 举报
回复
没听说过"这个波峰的起点和终点", "数据波动比较大," 要先平滑. 再 "离散函数的一阶导数就是相邻两个数值做减法" 最好 "计算出一个符合数据曲线走势的函数来" 不过 可能不是 "一个", 而要逐段.
落花生雪 2014-03-01
  • 打赏
  • 举报
回复
我获取的只是一组离散数据,有几百个。我问一下,前辈说要进行一阶求导,是不是先要根据这些数据用曲线拟合或者样条差值算法计算出一个符合数据曲线走势的函数来,然后再根据这个函数求导? 我之前认为离散函数的一阶导数就是相邻两个数值做减法,但要是这样的话,由于我的数据波动比较大,可能效果不太好。再者就是,根据此方法找到了拐点,确定了峰高的位置,那这个波峰的起点和终点又怎么确定呢?
schlafenhamster 2014-02-28
  • 打赏
  • 举报
回复
就是 曲线的拐点 , 一届 导数 =0 处。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧