MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

[已答复] MATLAB寻峰

[复制链接]

新手

12 麦片

财富积分


050


3

主题

7

帖子

0

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

入门

276 麦片

财富积分


50500


0

主题

1829

帖子

64

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

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

论坛优秀回答者

权威

4740 麦片

财富积分



5

主题

6126

帖子

1082

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

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

论坛优秀回答者

52

主题

1579

帖子

141

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

论坛优秀回答者

权威

4740 麦片

财富积分



5

主题

6126

帖子

1082

最佳答案
  • 关注者: 239
发表于 5 天前 | 显示全部楼层
本帖最后由 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 下一条

联系我们|版权保护|小黑屋|Archiver|手机版|MATLAB中文论坛 ( 苏ICP备08100737号

GMT+8, 2017-6-23 21:37 , Processed in 0.251962 second(s), 61 queries , XCache On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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