MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 233|回复: 4|关注: 0

[已答复] MATLAB寻峰

[复制链接]

新手

12 麦片

财富积分


050


3

主题

7

帖子

0

最佳答案
发表于 2017-6-17 16:27:54 | 显示全部楼层 |阅读模式
哪位前辈能帮我解释下这段求峰值的代码,两个diff和一个sign分别有什么作用?
  1. IndMax=find(diff(sign(diff(data)))<0)+1;
复制代码

论坛优秀回答者

入门

332 麦片

财富积分


50500


0

主题

2492

帖子

78

最佳答案
  • 关注者: 39
发表于 2017-6-17 17:39:06 来自手机 | 显示全部楼层
wx_Sr8AvaNp 发表于 2017-6-17 16:27
哪位前辈能帮我解释下这段求峰值的代码,两个diff和一个sign分别有什么作用?
...

搞不懂为何这么干哦
具体函数你不懂可以查帮助文档
来自: 微社区

论坛优秀回答者

权威

5244 麦片

财富积分



5

主题

6623

帖子

1201

最佳答案
  • 关注者: 261
发表于 2017-6-17 17:55:43 | 显示全部楼层
diff(data):差分,求出来后面的数据减前面的数据
sign(diff(data)):求出来差分后的符号,1或-1
diff(sign(diff(data)):再次差分
find(diff(sign(diff(data)))<0):差分后,凡是负值的后面一个数就是峰值

如果不会同时出现两个峰值,直接data(sign(diff(data))<0)似乎就可以。

论坛优秀回答者

53

主题

1599

帖子

143

最佳答案
  • 关注者: 21
发表于 2017-6-17 21:07:49 | 显示全部楼层
可以用findpeaks这个应该更方便

论坛优秀回答者

权威

5244 麦片

财富积分



5

主题

6623

帖子

1201

最佳答案
  • 关注者: 261
发表于 2017-6-18 15:32:15 | 显示全部楼层
本帖最后由 jingzhaos 于 2017-6-18 15:36 编辑
倔强的笨蛋 发表于 2017-6-17 21:07
可以用findpeaks这个应该更方便

其实findpeaks的核心代码就是楼主的代码:

% take the sign of the first sample derivative
s = sign(diff(yTemp(iTemp)));
% find local maxima
iMax = 1 + find(diff(s)<0);
而且findpeaks好像也无法获得相邻的两个峰值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

快速回复 返回顶部 返回列表