Avoiding load and/or for loop - speed up

4 vues (au cours des 30 derniers jours)
Ann Gerber
Ann Gerber le 19 Oct 2020
Commenté : Mathieu NOE le 20 Oct 2020
Hi everyone!
I have a directory containing mat-files. they all contain vectors A and B.
I would like to find the maximum value A.*B out of all the mat files. However loading all the .mat files and checking if the maximum value from all the last files is crossed is very timeconsuming:
for i = first:last
load(filename{i})
U = lowpass(A,wpass)*U_scale; % [V] Lowpass-filtered & scaled voltage data
I = lowpass(B,wpass)*I_scale; % [A] Lowpass-filtered & scaled current data
E = abs(U.*I)*t_S;
E_quant = quantile(E,0.9);
if E_max < max(E_quant)
E_max = max(E_quant);
end
end
How do I do this efficiently?
Thanks a lot!
Ann
  8 commentaires
Ann Gerber
Ann Gerber le 19 Oct 2020
I get the final data and have no influence on how they are generated unfortunately. Thanks anyway! When profiling the script I noticed that filtering is very timeconsuming...
Mathieu NOE
Mathieu NOE le 20 Oct 2020
maybe you could decimate the data inside the loop before doing the low pass filtering
depends what is the original sampling rate and what bandwith must be kept for U and I ( for your computation E = abs(U.*I)*t_S;)
as decimation applies also low pass filtering , you have your lowpass effect plus you reduce the size of U and I.
=> help decimate

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Loops and Conditional Statements 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