2012-02-01 39 views
1

目前,我试图分析与MATLAB的大型数据集(40个000多个数据点)。这些数据集有很大程度的高频噪声,但幸运的是,与整体信号相比,噪声幅度相对较小。算法找到相关的数据的特定特性而设定

基本上,我希望做的是找到在哪个数据集“踢了”的地步。通过踢起来,我的意思是,它的梯度在一个小区域显着变化。然而,我分析的这些信号受到“漂移”的影响,其中在“启动”点之前信号斜率本质上可能是负的,中性的或正的,然而,“踢”之前和之后的图的形状起“点一般是一样的。

例如:一个 “踢” 点会看起来像这样:

[1.25 2.5 3.75 5 7.5 12 21 36 49 64]

显然这是一个大规模的简化版本,但数据将沿着一条直线如曲线(上面的前5个数据点),然后它将遵循更类似指数的曲线(从点6开始)。

所以我一直在寻找实现一种机器类型的学习算法,借此我可以告诉matlab在哪里“踢起来”点以及数据的“形状”,其中出现一个踢出点,以便将来它可以准确定位“踢出”点。

进出口比较新的Matlab和机器都学习(如机器学习,甚至要去关于解决我的问题的最佳方式),我不知道我应该开始。我希望有人能指出我正确的方向,无论是matlab代码示例和/或一些初学者理论与编码实现。

+0

您是否在寻找潜在的信号的阶梯变化?否则,如果有噪音,那么您会在整个地方检测到“显着”的梯度变化。 – 2012-02-01 20:51:58

回答

4

我相信,ML是在这种情况下矫枉过正。如果数据呈直线状曲线,则意味着它的导数是常数,这意味着第二个数值为零。因此,通过两次使用diff来计算近似二阶导数,并找出它变得多于某个阈值的位置。该阈值应接近于零。

x = [ 1.25 2.5 3.75 5 7.5 12 21 36 49 64 ]; 
plot(diff(diff(x))); 
+2

要添加到您的答案,他基本上需要找到点在加速进入上面一定程度,可能比较,为信号的整体水平,在这些点在噪声系数。 – 2012-02-01 19:46:27