MATLAB Answers

how to extract a specific data from struct formatted dataset

4 views (last 30 days)
i have battery dataset in a struct format. i need to extract "capacity" data alone from the dataset. the capacity data is present under 'discharge' only.
here is the dataset structure
i used the following code
z = load('B0005.mat');
for i = 1:length(z.B0005.cycle)
a(i) = z.B0005.cycle(i).data.Capacity;
the problem is, the first field('charge') does not contain 'capacity' data so it throws an error:
Reference to non-existent field 'Capacity'.
Error in Untitled (line 3)
a(i) = z.B0005.cycle(i).data.Capacity;
can anyone please tell me where iam going wrong and help me out in correcing the error. i want to read just the capacity data situated under discharge field


Sign in to comment.

Accepted Answer

per isakson
per isakson on 23 Apr 2020
Try this
z = load('B0005.mat');
len = length(z.B0005.cycle);
a = zeros( len, 1 );
for ii = 1:len
if strcmp( z.B0005.cycle(ii).type, 'discharge' )
a(ii) = z.B0005.cycle(ii).data.Capacity;
Every second value of a will be zero

More Answers (1)

Muthu on 23 Apr 2020
Edited: Muthu on 23 Apr 2020
I assume from the data and image that you have posted, the z.B0005.cycle(i) refers to 'charge' and 'discharge' which is placed consecutively: All 'discharge' in even and all 'charge' in odd indices.
Hence you can modify your code, so that you iterate only through your even indices.
for i = 1:length(z.B0005.cycle)
if mod(i,2)==0
a(i) = z.B0005.cycle(i).data.Capacity;
Hope this helps.
Good Luck.

  1 Comment

Padmamalini  T H
Padmamalini T H on 30 Apr 2020
No the discharge data doesnt come in even indices. What i have shown is the initial recordings. After this there is no order and all charge and discharge recordings are random

Sign in to comment.