Split array of sensor data by indexing

1 vue (au cours des 30 derniers jours)
Eric
Eric le 20 Oct 2020
Commenté : Eric le 20 Oct 2020
Hey all,
Beginner here. Searching for an effective, simple solution to a data prep problem.
I'm building a function to import sensor data (attached). It comes in unsorted, with column "name" as string type (e.g., 'Chest', 'Tib'). This is also mirrored in column "serial", which matches the serial number of that sensor. Other columns timestamp, accx, etc. correspond to one sample measured at that time by each sensor.
I want to automatically detect the unique sensor names (or serial), and then split the array and create a timetable for each sensor. Later, we need to upsample, filter, synchronize, and transform the data of each sensor independently, and I assume that this is simpler when these data are seperated.
I started with this
c=unique(Data.IMU.name)
But am having trouble creating a proper method of indexing or looping for complete this task. Any ideas?
Thanks.
  2 commentaires
Stephen23
Stephen23 le 20 Oct 2020
Modifié(e) : Stephen23 le 20 Oct 2020
"I want to ... split the array and create a timetable for each sensor."
Why do you need to do that?
One of the benefits of using tables/timetables is the ability to group data and apply functions those groups:
Whilst it is certainly possible to split up your data into separate tables/timetables (e.g. in a cell array), most likely a much better use of MATLAB would be to just use the table functionality which lets you group and process data within the table. But it really depends on what you are going to do with this data, which so far you have not explained.
Eric
Eric le 20 Oct 2020
I added a line to my query - later, we need to upsample, filter, synchronize, and transform the data of each sensor independently, and I assume that this is simpler when these data are seperated.
I'm reading through that documentation you linked to- working on it, thanks!

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 20 Oct 2020
Modifié(e) : Stephen23 le 20 Oct 2020
S = load('matlab.mat');
T = S.Data.IMU;
G = findgroups(T.name);
C = arrayfun(@(g)T(g==G,:),1:max(G),'uni',0);
You can then trivially loop over the cells of C and do whatever processing you want:
  1 commentaire
Eric
Eric le 20 Oct 2020
Fantastic, thanks.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by