Segmenting sinusoidal time-series data
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ben
am 2 Feb. 2016
Kommentiert: Star Strider
am 4 Feb. 2016
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 Kommentare
Akzeptierte Antwort
Star Strider
am 2 Feb. 2016
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 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Time Series finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!