read specific data from a given row and column from table

I have table of size 28000x3
and i want to biefuracte data which looks like this.
I am using slope condition to collect the data.
function bifercation(Data)
c = 1;
for i= c:length(Data.para)
find((Data.para(i+1)-Data.para(i)) / (Data.Time(i+1)-Data.Time(i)))
end
end
however; i am getting following errors.
Index exceeds the number of array elements. Index must not exceed 28000.
Error in tabular/dotParenReference (line 111)
b = b(rowIndices);
Error in bifercation (line 8)
find((Data.para(i+1)-Data.para(i)) / (Data.Time(i+1)-Data.Time(i)))
diffenrece between time is non zero throughout the period.

1 comentario

AL
AL el 8 de Dic. de 2022
Editada: Rik el 14 de Mzo. de 2023
function bifercation(Data)
c = 0;
para = [0 0];
l = size(Data,1);
for c1 = 1:9
for i= c:l(1)
array = find((Data.para(i+1)-Data.para(i)) / (Data.Time(i+1)-Data.Time(i)));
if array ~= 0
para(i,1) = Data(i,1);
para(i,2) = Data(i,3);
elseif array == 0
c = i;
break;
else
continue;
end
end
end
end
Array indices must be positive integers or logical values.
Error in tabular/dotParenReference (line 111)
b = b(rowIndices);
Error in bifercation (line 7)
array = find((Data.Thrust_Force(i+1)-Data.Thrust_Force(i)) / (Data.Time(i+1)-Data.Time(i)));
updated code

Iniciar sesión para comentar.

 Respuesta aceptada

hello
maybe you need a function to give you start / stop time indexes based on threshold crossing
like this
clc
clearvars
% dummy data
n=1000;
x= 10*(0:n-1)/n;
y1 = sign(sin(2*x -0.5));
y2 = sin(x.^2 -0.5);
threshold = max(y1)/2; % half amplitude
[t0_pos1,s0_pos1,t0_neg1,s0_neg1]= crossing_V7(y1,x,threshold,'linear'); % positive (pos) and negative (neg) slope crossing points
% ind => time index (samples)
% t0 => corresponding time (x) values
% s0 => corresponding function (y) values , obviously they must be equal to "threshold"
[t0_pos2,s0_pos2,t0_neg2,s0_neg2]= crossing_V7(y2,x,threshold,'linear'); % positive (pos) and negative (neg) slope crossing points
% periods
d1 = diff(t0_pos1)
period1 = [d1(1) d1];
d2 = diff(t0_pos2)
period2 = [d2(1) d2];
figure(1)
subplot(3,1,1),plot(x,y1,'b',t0_pos1,s0_pos1,'*r',t0_neg1,s0_neg1,'*g','linewidth',2,'markersize',12);grid on
legend('signal','signal positive slope crossing points','signal negative slope crossing points');
subplot(3,1,2),plot(x,y2,'b',t0_pos2,s0_pos2,'*r',t0_neg2,s0_neg2,'*g','linewidth',2,'markersize',12);grid on
legend('signal','signal positive slope crossing points','signal negative slope crossing points');
subplot(3,1,3),plot(t0_pos1,period1,t0_pos2,period2,'linewidth',2,'markersize',12);grid on
legend('signal 1 period','signal 2 period');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [t0_pos,s0_pos,t0_neg,s0_neg] = crossing_V7(S,t,level,imeth)
% [ind,t0,s0,t0close,s0close] = crossing_V6(S,t,level,imeth,slope_sign) % older format
% CROSSING find the crossings of a given level of a signal
% ind = CROSSING(S) returns an index vector ind, the signal
% S crosses zero at ind or at between ind and ind+1
% [ind,t0] = CROSSING(S,t) additionally returns a time
% vector t0 of the zero crossings of the signal S. The crossing
% times are linearly interpolated between the given times t
% [ind,t0] = CROSSING(S,t,level) returns the crossings of the
% given level instead of the zero crossings
% ind = CROSSING(S,[],level) as above but without time interpolation
% [ind,t0] = CROSSING(S,t,level,par) allows additional parameters
% par = {'none'|'linear'}.
% With interpolation turned off (par = 'none') this function always
% returns the value left of the zero (the data point thats nearest
% to the zero AND smaller than the zero crossing).
%
% check the number of input arguments
error(nargchk(1,4,nargin));
% check the time vector input for consistency
if nargin < 2 | isempty(t)
% if no time vector is given, use the index vector as time
t = 1:length(S);
elseif length(t) ~= length(S)
% if S and t are not of the same length, throw an error
error('t and S must be of identical length!');
end
% check the level input
if nargin < 3
% set standard value 0, if level is not given
level = 0;
end
% check interpolation method input
if nargin < 4
imeth = 'linear';
end
% make row vectors
t = t(:)';
S = S(:)';
% always search for zeros. So if we want the crossing of
% any other threshold value "level", we subtract it from
% the values and search for zeros.
S = S - level;
% first look for exact zeros
ind0 = find( S == 0 );
% then look for zero crossings between data points
S1 = S(1:end-1) .* S(2:end);
ind1 = find( S1 < 0 );
% bring exact zeros and "in-between" zeros together
ind = sort([ind0 ind1]);
% and pick the associated time values
t0 = t(ind);
s0 = S(ind);
if ~isempty(ind)
if strcmp(imeth,'linear')
% linear interpolation of crossing
for ii=1:length(t0)
%if abs(S(ind(ii))) >= eps(S(ind(ii))) % MATLAB V7 et +
if abs(S(ind(ii))) >= eps*abs(S(ind(ii))) % MATLAB V6 et - EPS * ABS(X)
% interpolate only when data point is not already zero
NUM = (t(ind(ii)+1) - t(ind(ii)));
DEN = (S(ind(ii)+1) - S(ind(ii)));
slope = NUM / DEN;
slope_sign(ii) = sign(slope);
t0(ii) = t0(ii) - S(ind(ii)) * slope;
s0(ii) = level;
end
end
end
% extract the positive slope crossing points
ind_pos = find(sign(slope_sign)>0);
t0_pos = t0(ind_pos);
s0_pos = s0(ind_pos);
% extract the negative slope crossing points
ind_neg = find(sign(slope_sign)<0);
t0_neg = t0(ind_neg);
s0_neg = s0(ind_neg);
else
% empty output
ind_pos = [];
t0_pos = [];
s0_pos = [];
ind_neg = [];
t0_neg = [];
s0_neg = [];
end
end

3 comentarios

hello
problem solved ?
tx
AL
AL el 18 de Mzo. de 2023
Extremely sorry for response, Thank you so much for youe efforts, with your help and using concept explained by you was really helpful and solved my doubt. once again I really appriciate your efforts. Thank you so much. Have a wonderful weekend.
Glad I could help
have a great day !

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB en Centro de ayuda y File Exchange.

Productos

Versión

R2022a

Preguntada:

AL
el 8 de Dic. de 2022

Comentada:

el 20 de Mzo. de 2023

Community Treasure Hunt

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

Start Hunting!

Translated by