Time-Series
平滑時間序列數據
我正在構建一個在睡眠期間記錄加速度計數據的 android 應用程序,以便分析睡眠趨勢並可選擇在淺睡眠期間在所需時間附近喚醒用戶。
我已經構建了收集和存儲數據以及警報的組件。我仍然需要以一種真正有意義和清晰的方式來解決顯示和保存睡眠數據的問題,這種方式最好也適合分析。
幾張圖說兩千字:(因為rep少只能發一個鏈接)
編輯)兩個圖表都反映了校準 - 有一個最小“噪聲”濾波器和最大截止濾波器,以及一個警報觸發水平(白線)
不幸的是,這兩個都不是最佳解決方案——第一個對於普通用戶來說有點難以理解,而第二個更容易理解,隱藏了很多真正發生的事情。特別是平均消除了運動尖峰的細節——我認為這些可能是有意義的。
那麼為什麼這些圖表如此重要呢?這些時間序列在整個晚上作為反饋顯示給用戶,並將被存儲以供以後查看/分析。平滑將理想地降低內存成本(RAM 和存儲),並使這些資源匱乏的手機/設備上的渲染速度更快。
顯然有一種更好的方法來平滑數據——我有一些模糊的想法,例如使用線性回歸來找出運動中的“急劇”變化,並據此修改我的移動平均平滑。在我一頭扎進可以更優化解決的問題之前,我真的需要更多的指導和輸入。
謝謝!
首先,壓縮和分析/呈現的要求不一定相同——事實上,對於分析,您可能希望保留所有原始數據並能夠以各種方式對其進行切片和切塊。什麼最適合你,很大程度上取決於你想從中得到什麼。但是您可以嘗試一些標準技巧:
- 使用差異而不是原始數據
- 使用閾值去除低級噪聲。(結合差分忽略小的變化。)
- 使用某個時間窗口的方差而不是平均值來捕捉活動水平而不是運動
- 將時基從固定間隔更改為可變長度運行,並累積成單個數據點序列的變化,某些標準適用於這些變化(例如,相同方向的差異,達到某個閾值)
- 將數據從實際值轉換為序數(例如低、中、高);您也可以在時間箱而不是單個樣本上執行此操作 - 例如,每 5 分鐘的活動水平
- 使用適當的捲積核* 比移動平均線更巧妙地平滑,或挑選出感興趣的特徵,例如急劇變化。
- 使用FFT庫計算功率譜
對於您的目的,最後一個可能有點貴,但可能會為您提供一些非常有用的演示選項,例如“睡眠節奏”等。(我對 Android 幾乎一無所知,但可以想像一些/許多/所有手機可能內置了您可以利用的 DSP 硬件。)
- 考慮到中央卷積對數字信號處理的影響,很難在網上找到可訪問的介紹。或者至少在 3 分鐘的谷歌搜索中。歡迎提出建議!