使用MATLAB识别循环行为

时间:2017-04-06 21:27:15

标签: matlab data-analysis repeat altitude

我正在尝试处理大量数据,寻找周期性行为。换句话说,在两个相应值之间来回跳转的数据。我尝试了许多不同的解决方案,但所有这些解决方案都会在识别行为方面给出误报。如果第一列是时间而第二列是海拔高度,这是我正在寻找的一个例子:[0 1000; 2000年5月; 10 1000; 2000年15月; 20 1000]。在此示例中,高度在1000到2000英尺之间来回循环。如果有人能帮助我,我将不胜感激。我在MATLAB写作。

1 个答案:

答案 0 :(得分:0)

如果仅用于两个顺序元素,则可以使用1D过滤:

A =  [-5 8000; 0 1000; 5 2000; 10 1000; 15 2000; 20 1000; 25 3000; 30 1000];
b = A(:,2);
% filtering with 2 elemnts vector. the imaginary part is to avoid
% false-positives from adding different numbers to the same sum
x = conv(b,[1;1j],'valid');
% find unique values and their number of occurrences
[C,ia,ic] = unique(x,'stable');
counts = histcounts(ic,[1:max(ic),inf]);
multiCounts = counts > 1;
% find the repeating patterns
patternFirstIdxs = ia(multiCounts);
patterns = [b(patternFirstIdxs),b(patternFirstIdxs + 1)];

如果您想查找每个模式的所有匹配项,请查看ia或使用k = strfind(b,pattern)