关于提取峰谷值的程序

xiaokang5280 2019-04-13 09:05:19
void Rainflow::find_peaks(vector<float> * peaks) {
peaks->push_back(_points[0]);


unsigned i;
for (i = 1; i < (_points.size()-1); i++) {
double slope1 = _points[i] - _points[i - 1];
double slope2 = _points[i + 1] - _points[i];

if ((slope1 * slope2) <= 0. && fabs(slope1) > 0.) {
peaks->push_back(_points[i]);
}
}
peaks->push_back(_points.back());
}
以上是一段提取峰谷值的函数,峰谷值就是满足相邻的点不相等,每三个点中的第二个点小于旁边两个点或者大于旁边两个点。
我这段程序提取出来的点多了,有大神帮我看看吗
...全文
441 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaokang5280 2019-04-15
  • 打赏
  • 举报
回复
引用 1 楼 focuslight 的回复:
if ((slope1 * slope2) <= 0. && fabs(slope1) > 0.) 改为 if ((slope1 * slope2) < 0)
这样提取出来的数又少了
昆仑道长 2019-04-14
  • 打赏
  • 举报
回复
刚百度了下,前人已经做的很好了,不需要我重复造轮子了.参见 https://blog.csdn.net/boris_wang2008/article/details/81209849 https://blog.csdn.net/zone53/article/details/77942341
昆仑道长 2019-04-14
  • 打赏
  • 举报
回复
我还想到一个绝妙的算法,准备鼓捣一下,发表篇论文.
昆仑道长 2019-04-14
  • 打赏
  • 举报
回复
将你提取出来的波峰数据点从大到小排序,取排在前面的几个数据就是你想要的.
Isnis-fallen 2019-04-14
  • 打赏
  • 举报
回复
if ((slope1 * slope2) <= 0. && fabs(slope1) > 0.) 改为 if ((slope1 * slope2) < 0)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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