2017-04-06 90 views
0

我正在嘗試處理大量的數據以尋找週期性行爲。換句話說,在兩個相應值之間來回跳轉的數據。我嘗試了許多不同的解決方案,但他們都爲識別行爲提供了誤報。如果第一列是時間,第二列是高度,這裏是我正在尋找的一個例子:[0 1000; 5 2000; 10 1000; 15 2000年; 20 1000]。在這個例子中,高度在1000到2000英尺之間來回循環。如果有人能幫我一把,那將不勝感激。我正在寫MATLAB。使用MATLAB識別週期性行爲

回答

0

,如果它是隻爲時序元件可以使用一維過濾這樣的:

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)爲他們每個人。

+0

它不只是兩個連續的元素,可能會有多個值。但我會研究ia或k = strfind(b,pattern)。我很感謝你的迴應! –