For loop to evaluate Root Mean Square

8 visualizaciones (últimos 30 días)
Emiliano Ascenzi
Emiliano Ascenzi el 9 de Abr. de 2020
Comentada: Emiliano Ascenzi el 11 de Abr. de 2020
For every row of C I want to find all the elements in column A that are in a time window (centered on the first element of column A at the first iteration) of 4 minutes. Second iteration is find all the elements in column A that are in a time window (centered on the second element of column A) of 4 minutes. And so on for all rows of C table.
After doing that, I want to delete all outputs that are equal mantaining one for type and compute root mean square on every output remaining.
Attached a dummy table for the code, I think this is relatively easy to do with a for loop but I don't know how to implement it, other solution are well accepted,
Thanks in advance
  6 comentarios
Rik
Rik el 11 de Abr. de 2020
Your code has multiple issues, so it will not run with the data you provided. Either provide working code (and explain how it should be sped up/optimized/extended), or provide a full example where you describe the steps you want to take in words.
Do you want to select all values in a 4-minute window, essentially performing a sliding window operation? If so, why would you need Tstart and Tstop?
Emiliano Ascenzi
Emiliano Ascenzi el 11 de Abr. de 2020
Editada: Emiliano Ascenzi el 11 de Abr. de 2020
I know my code isn't working, i posted it only to explain what i need. I try to describe it in words.
For every row of C I want to find all the elements in column A that are in a time window (centered on the first element of column A at the first iteration) of 4 minutes. Second iteration is find all the elements in column A that are in a time window (centered on the second element of column A) of 4 minutes. And so on for all rows of C table.

Iniciar sesión para comentar.

Respuestas (1)

Jeff Miller
Jeff Miller el 10 de Abr. de 2020
I don't really understand what you mean by conditions, but maybe you can get what you want by thinking of a 2-step process where the first step is to pick out the rows you want and the second step is to get the rms. This code snippet illustrates it:
stopTime = datetime(2020,1,5,8,15,0); % set these according to your conditions, possibly in for loop
startTime = datetime(2020,1,5,7,45,0);
wantRows = (T>startTime) & (T<stopTime);
y = rms(x(wantRows));
  8 comentarios
Emiliano Ascenzi
Emiliano Ascenzi el 11 de Abr. de 2020
Editada: Emiliano Ascenzi el 11 de Abr. de 2020
I don't think the code is doing what I need. If you try to execute it you'll have an output with only one value repeated for every row. But for how the data is build (3 different time arrays concatenated that are far more than 2 minutes each other) I expect at least 3 different values, but there is only one
Emiliano Ascenzi
Emiliano Ascenzi el 11 de Abr. de 2020
I checked the code, there is an error in isbetween, the vector to analyze is C.T and not C.T(i). This is the right code.
Thank you all
rmsA = zeros(height(C),1);
for i=1:height(C)
tf = isbetween(C.T,C.T(i)-minutes(2),C.T(i)+minutes(2));
xA = C.A(tf);
rmsA(i) = rms(xA);
end

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Productos


Versión

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by