Separating Data of Exercises

조회 수: 2 (최근 30일)
Muhammad Hadyan Utoro
Muhammad Hadyan Utoro 2022년 1월 25일
편집: VINAYAK LUHA 2024년 1월 8일
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

답변 (1개)

VINAYAK LUHA
VINAYAK LUHA 2024년 1월 8일
편집: VINAYAK LUHA 2024년 1월 8일
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

카테고리

Help CenterFile Exchange에서 Descriptive Statistics에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by