Separating Data of Exercises

2 views (last 30 days)
Muhammad Hadyan Utoro
Muhammad Hadyan Utoro on 25 Jan 2022
Edited: VINAYAK LUHA on 8 Jan 2024
Hello everyone!
I have data for CoM (Center of Mass) movement of a subject while performing an exercises (see attachment). I'd like to sort it into each repetitions (e.g., repetitions 1, 2 ... 5). I tried to use peak and min values to determine each repetitions but as I used min function it only showed one value. So, far I can only cut from the start until the end of the exercises. Here's a part of my code:
if (string(filenames{j})) == 'Bridge_2_0001';
Data.CoM.(filenames{j}) = Data.Markers.(filenames{j})(4,3,:);
[pks.(filenames{j}), loc.(filenames{j}), wid.(filenames{j})] = findpeaks(Data.CoM.(filenames{j})(1,:), 'MinPeakDistance', 100, 'MinPeakDistance', 100, 'Annotate', 'extents');
Cut.(filenames{j}) = loc.(filenames{j})(:,2):loc.(filenames{j})(:,14);
elseif (string(filenames{j})) == 'Lunge_R_0001';
Data.CoM.(filenames{j}) = sum(Data.Markers.(filenames{j})(1:4,3,:))./4;
[pks.(filenames{j}), loc.(filenames{j}), wid.(filenames{j})] = findpeaks(-Data.CoM.(filenames{j})(1,:), 'MinPeakDistance', 100, 'MinPeakDistance', 100, 'Annotate', 'extents');
Cut.(filenames{j}) = loc.(filenames{j})(:,1):loc.(filenames{j})(:,10);
elseif (string(filenames{j})) == 'Lunge_L_0001';
Data.CoM.(filenames{j}) = sum(Data.Markers.(filenames{j})(1:4,3,:))./4;
[pks.(filenames{j}), loc.(filenames{j}), wid.(filenames{j})] = findpeaks(-Data.CoM.(filenames{j})(1,:), 'MinPeakDistance', 100, 'MinPeakDistance', 100, 'Annotate', 'extents');
Cut.(filenames{j}) = loc.(filenames{j})(:,1):loc.(filenames{j})(:,12);
else
Data.CoM.(filenames{j}) = sum(Data.Markers.(filenames{j})(11:14,3,:))./4;
[pks.(filenames{j}), loc.(filenames{j}), wid.(filenames{j})] = findpeaks(-Data.CoM.(filenames{j})(1,:), 'MinPeakDistance', 100, 'MinPeakDistance', 100, 'Annotate', 'extents');
Cut.(filenames{j}) = loc.(filenames{j})(:,2):loc.(filenames{j})(1,end);
end
I really appreciate your help

Answers (1)

VINAYAK LUHA
VINAYAK LUHA on 8 Jan 2024
Edited: VINAYAK LUHA on 8 Jan 2024
Hi Muhammad,
I understand that you want to segment a time series data of Center of Mass (CoM) movement from an exercise routine into individual repetitions in MATLAB.
Here are the steps to accomplish your objective:
  1. Use the MATLAB "findpeaks" function to identify peaks, and invert the signal (multiply by -1) to find troughs using the same function. This will give you the start and end points of each repetition.
  2. It's critical to adjust parameters like "MinPeakDistance", "MinPeakHeight", and "MinPeakProminence" to suit the specific traits of your CoM dataset for precise peak and trough detection.
  3. With the peak and trough locations identified, you can then divide the dataset into individual repetitions. Typically, a repetition starts at a trough and concludes at the following peak, or the other way around.
Additionally you may refer to the following article to know more about the findpeak function
Hope this answers your query.
Regards,
Vinayak Luha

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!