【问题标题】:Peak counter algorithm峰值计数器算法
【发布时间】:2017-08-26 16:48:46
【问题描述】:

我正在寻找一些有效的峰值 counter 算法,但找不到适合我需要的算法:

  • 类 C 语言(将使用 PHP 但我可以从 JS/C/Cpp 翻译)
  • 数据不可向前遍历
  • 具有静态阈值 - 检测超过 270 瓦的峰值并且这些峰值很短,因此还有时间限制。

我已经在这里检查过: Peak signal detection in realtime timeseries data 但这对我来说似乎不是一个可行的解决方案。

以下是一些示例数据:

数据格式如下:

$a = [
    'timestamp' = 1500391300.342
    'power' => 383.87
];

在这张图表上有 14 个峰值。所以我需要算法来循环count它们。 令人惊讶的是,每个峰可以有超过 10 个点。峰值是不断填充自身的连续数组。可以访问至少 100 个以前的点,但无法访问未来的数据。

我还准备了包含 15 个峰和一些示例数据的 Calc (ODC) 文档。 Here it is

到目前为止,我有一个简单的算法来计算上升斜率,但它不能正常工作(因为可能没有超过 270W 的斜率,它可能被分为 5 个点或跳跃可能太长而不能算作峰值):

if ($previousLog['power'] - $deviceLog['power'] > 270) {
    $numberShots++;
}

提前致谢,任何提示都会有所帮助。

【问题讨论】:

  • 不清楚:您是在要求图书馆推荐(题外话)、对已发布代码的 3 行的评论还是有人为您编写代码(也是题外话)?
  • 无论是库推荐还是现成的算法(已经存在),我并不是要求有人为我编写代码,但纯数学语言的算法不容易翻译成类 C 语言

标签: php c++ algorithm


【解决方案1】:

简单的hysteresis 应该可以工作:

  1. 查找 270W 以上的样品
  2. 当样本高于 240W 时,跟踪所见最大样本, 及其时间戳
  3. 当您找到低于 240W 的样品时,请返回步骤 1

【讨论】:

  • 不完全是,可能有样本是:300 300 500 700 900 700 500 300 300,这将被认为是一个峰值,但它们都不会超过 270W
  • @Kaminari 直接引用您的问题:“具有静态阈值 - 检测超过 270 瓦的峰值”
  • 是的,但是是整个峰,而不是两点之间的差异。我的意思是整个山峰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 2022-09-27
  • 2022-11-02
  • 2012-10-14
相关资源
最近更新 更多