2013-04-09 28 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则完全没有意义。