特定丢弃点算法 - Matlab

时间:2016-07-27 14:58:45

标签: algorithm matlab

我开发了一个脚本,它基本上利用了一堆硬编码函数来减少我的数据,并以data_ #min的形式提出不同变量的图,如图所示。变量以这样的名字命名,然后根据试验持续的分钟数进行更改。

我想要做的是确定我用箭头指向的这些图的下降点。例如,点之间存在巨大的变化,从行50,018到50,019的变化约为-68%。所有似乎都出现在100,000行第6列(由蓝色绘制线标识)的行(49000:51000)内的这些液滴出现在数据10列×100000row阵列中。它们在变量中设置,例如称为data_10min。

所以我想找到的是

中显示的具体丢弃点
    data_10MIN(49000:51000,6) 

data_10min是变量,然后显示绘制图形的参数。

使用硬编码函数进行自动化并使用硬编码轻松找到这一点会很酷,唯一的问题是每个试验左右移动并且它们不一致,因此不同的试验会在不同的情况下降低时间(行号)。

    findpeaks(data) 

此功能提供了本地最小分析类型的分析,但我不认为它确实适用于我的特定场景。如果有人可以帮助我解决这个问题,并试图想出第一步它会真的帮助我。谢谢!

Picture of data_10Min drop point

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的说明,您会对数据curvature的最大值感兴趣。

为简单起见,我假设您的数据是等距的,y由x参数化。然后定义

x=data_10MIN(49000:51000,1);
y=data_10MIN(49000:51000,6);

dx = diff(x);
dydx = diff(y)./dx;
ddyddx = diff(dydx)./dx(1:end-1);
kappa = ddyddx./(1+dydx(1:end-1).^2).^1.5;
[~,locs] = findpeaks(kappa);
locs = locs+1; % index shifted because of diff

plot(x,y,'.-')
plot(x(locs),y(locs),'ro')

findpeaks(kappa)将获得曲率向量上的位置,这些位置对应于图中的水滴。