Segmenting sinusoidal time-series data
4 ビュー (過去 30 日間)
古いコメントを表示
I have some data that was collected by a mobile phone's gyroscope sensors. I would like to be able to chunk out one "repetition" of the motion. An example of a sample run is shown here (apparently the MathWorks image upload didn't work right): http://i.imgur.com/GuEgK2y.png
I would like to be able to determine how long a period is, and where they start (doesn't matter if the starting point is max or min amplitude or a center amplitude). I tried using xcorr, which resulted in a plot with some waves centered around 50, whereas manual inspection of the data shows a period of about 2000 between the first two peaks. What should I be looking into to figure out how to do this?
0 件のコメント
採用された回答
Star Strider
2016 年 2 月 2 日
Without your actual data, I can only guess at an approach. I would begin by detrending it (I used polyfit and polyval, there are several options), then use circshift to identify the zero-crossings, and from them the periods and frequencies:
t = 0:1.3E+4;
s = 60 + 5*exp(-5*t/1.3E+4) + sin(2*pi*t/3000); % Create Data
figure(1)
plot(t, s); % Original Data
p = polyfit(t, s, 3);
sd = s - polyval(p, t); % Detrend
xci = find(sd.*circshift(sd, [0 -1]) <= 0);
xci = xci(1:end-1); % Find Inices Of Zero-Crossings
figure(2)
plot(t, sd)
hold on
plot(t(xci), sd(xci), '+r')
hold off
4 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Multirate Signal Processing についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!