我有几个1D信号,显示两个或更多波段。一个例子如下所示。
我需要提取属于单个波段的数据点。
我的第一个简单方法是获取数据的移动平均值,并得到数据大于平均值的索引。
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
绘制这些并且平均曲线看起来像这样,其中红色表示上部,蓝色表示下部带。
对于这个例子,这非常有效,但是当存在多于两个波段和/或波段没有很好地分离时,它会失败。
我正在寻找更强大和通用的解决方案。我正在研究scikit-learn,并想知道是否可以使用其中一种聚类算法来实现这一点。
答案 0 :(得分:3)
查看时间序列相似性度量。
实际上,我已经看到你在那里尝试过的二进制阈值,称为“阈值交叉”,还有更多。
一般来说,没有“一刀切”的时间序列相似性。不同类型的信号需要不同的措施。这可能最好的结果是,在FFT之后有些事情要好得多,而对于其他人来说,FFT绝对没有意义。