2013-04-09 62 views
0

我有幾個1D信號,顯示兩個或多個頻段。一個例子如下所示。 raw data1D信號的聚類

我需要提取屬於一個樂隊的數據點。


我的第一個簡單的方法是獲取數據的移動平均值,並獲得數據大於平均值的指數。

def seperate(x): 
    average = scipy.ndimage.gaussian_filter(x, 10) 
    # this gives me a boolean array with the indices of the upper band. 
    idx = x > average 
    # return the indices of the upper and lower band 
    return idx, ~idx 

繪製這些和平均曲線看起來像這樣,其中紅色表示上部和藍色的低頻帶。 selected bands

這個例子很好地工作,但當兩個以上的頻帶出現和/或頻帶沒有很好地分開時失敗。

我正在尋找更強大和通用的解決方案。我正在研究scikit-learn並想知道是否可以使用其中一種聚類算法來實現這一點。

回答

2

看一看時間序列相似性度量

事實上,我已經看到你在這裏嘗試過的這種二進制閾值稱爲「閾值穿越」,還有更多。

一般來說,沒有「一刀切」的時間序列相似性。不同類型的信號需要不同的措施。這可能是最好的事實,有些FFT後分析得更好,而另外一些FFT則完全沒有意義。