2013-01-04 138 views
3

我有一個記錄頻率的時間序列,我想從中計算其次的意思。但是採樣率不是恆定的,這意味着簡單的算術平均值是錯誤的。我實際上想要計算的是每個第二區間內的階梯函數(由時間序列描述)的積分。如何以最簡單的方式計算階梯函數的積分?

例如考慮此時間序列:

08:11:23.400 -> 49.9 Hz 
08:11:24.200 -> 50.1 Hz 
08:11:24.600 -> 50.15 Hz 
08:11:24.800 -> 50.05 Hz 
08:11:25.100 -> 49.95 Hz 

第二08:11:24.000 - 08:11:25.000的算術平均值將是(50.1 + 50.15 + 50.05)/ 3 = 50.1。但這不是那秒測量的平均頻率。它是: (200 * 49.9 + 400 * 50.1 + 200 * 50.15 + 200 * 50.05)/ 1000 = 50.06,因爲測量的頻率對於不同的時間量是成立的。

這是計算加權平均值(以保持時間爲權數)或等效地計算階梯函數的積分(然後按時間分開)。

首先:這個具體的計算是否有名字?這對我來說似乎是一個相當標準的時間序列計算。不知道這個名字使得它很難谷歌。

第二:哪個java庫支持這樣的計算?我想避免自己實現這個。我拒絕相信沒有好的標準Java庫提供這個。我正在研究Apache Commons數學庫,但沒有任何運氣(但又是:也許我只是錯過了正確的術語來尋找)。

+0

我很困惑---你說你不想自己實現加權平均?就是這樣。這只是幾行代碼。或者你的意思是你想要的東西需要時間序列,間隔參數,並返回加權平均值?雖然我對此稍微表示同情,但仍然沒有太多工作。爲什麼你想避免自己做呢? –

+0

那麼,爲什麼重新發明輪子,如果它已經存在?在我的車輪中有任何類型的錯誤的可能性都比較高,而標準庫在大多數情況下都會得到很好的測試。其次,我想要做更多的標準統計數據,這可能會受到適當的庫的限制,並且可以統一處理不同的統計數據。 – benjamin

回答

2

我不確定公式200 * 49.9 + 400 * 50.1 + ...是否正確。這意味着頻率49.9從08:11:23.400到08:11:24.200生效,就像頻率傳感器測量未來頻率一樣。我寧願認爲它表示過去的頻率。那麼,頻率真的是一個階梯函數?或者是更接近現實的鋸齒功能?甚至是一個平滑的函數,用樣條重建?

因此,我建議您自己計算積分,並準備更改計算公式。對於錯誤,您同樣可以在從庫中選擇函數時以及設置參數時發生錯誤。

+0

是的,我認爲頻率49.9從08:11:23.400到08:11:24.200有效(請注意,上面給出的數值是作爲示例編寫的)。每當頻率發生變化時頻率計都會推動更新(達到一定滯後,即忽略低於某些標準的變化)。這就是爲什麼它看起來好像是在衡量未來。關於bug:實際上並沒有那麼多的bug來實現這樣簡單的東西,但是我發現在存在並適用的地方使用已建立的庫是一個很好的原則。 – benjamin

0

Java中沒有太多的庫可以正確執行此操作。但是你要找的基本的東西是數字信號處理。

這裏有一個類似的問題:Signal processing library in Java?

+0

雖然DSP庫 - 如果它存在 - 可能會包括我的需求,我不認爲這正是我所期待的,因爲我不關心FFT,低通濾波等。我正在考慮一些統計軟件包。你知道我描述的階梯函數的一個通用名嗎? – benjamin