2017-08-26 133 views
1

我正在尋找一些有效的峯值計數器算法,但無法找到一個適合我的需求:峯值計數器算法

  • 類C語言(這將是PHP,但我可以翻譯來自JS/C/Cpp)
  • 數據不能正向穿越
  • 具有靜態閾值 - 檢測超過270瓦的峯值並且這些峯值較短,所以也存在時間限制。

我已經選中這裏: Peak signal detection in realtime timeseries data 但是,這似乎並沒有爲我一個可行的解決方案。

下面是一些示例性數據: example chart

的數據已以下格式:

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

在此圖表有14個峯。所以我需要算法計數他們在循環。令人驚訝的是每個峯值可以有10個以上的點數。峯值是連續的數組,保持自己填充。有至少100個以前的點可以訪問,但是不能訪問未來的數據。

我也準備了具有15個峯值和一些示例數據的Calc(ODC)文檔。 Here it is

Spreadsheet

到目前爲止,我有簡單的算法計算的上升斜率,但不能正常工作(因爲有可能超過270W沒有坡度,可以分爲5個點或跳躍可能太長算作峯值):

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

在此先感謝,任何提示可能會有所幫助。

+0

不清楚:您是否要求提供圖書館推薦(偏離主題),對發佈代碼的3行或某人的評論爲你寫代碼(也是題外話)? –

+0

無論是圖書館推薦還是現成算法(已存在),我都不要求某人爲我編寫代碼,但純數學語言的算法不易於翻譯爲類似C的語言 – Kaminari

回答

0

簡單hysteresis應該工作:

  1. 找到一個樣本是上述270W
  2. 雖然樣本高於240W跟蹤最大樣本的看到, 和時間戳
  3. 當你發現一個樣本即低於240W,請返回步驟1
+0

不完全,可能有樣本是:'300 300 500 700 900 700 500 300 300',這將被認爲是一個高峯,但沒有一個會超過270W – Kaminari

+0

@Kaminari直接引用你的問題:*「有靜態閾值 - 檢測超過270瓦的峯值」 * – user3386109

+0

是的,但是整個峯值,而不是兩點之間的差異。我的意思是整個山峯。 – Kaminari