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;
end
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

 채택된 답변

per isakson
per isakson 2020년 4월 23일
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;
end
end
Every second value of a will be zero

추가 답변 (1개)

Muthu
Muthu 2020년 4월 23일
편집: Muthu 2020년 4월 23일
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;
end
end
Hope this helps.
Good Luck.

댓글 수: 1

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

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터 및 File Exchange에서 Simulink에 대해 자세히 알아보기

태그

질문:

2020년 4월 23일

댓글:

2020년 5월 4일

Community Treasure Hunt

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

Start Hunting!

Translated by