Calculate average over each specific interval
    19 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Saad Alqahtani
 el 7 de Jul. de 2021
  
    
    
    
    
    Comentada: Saad Alqahtani
 el 8 de Jul. de 2021
            Hi,
I'm trying to calculate the mean every 5 seconds of data till the end.
so x= (1,63369) % my data in Newton Meter which is about 30.9419 seconds long
t = 5*2048 % 5 seconds interval.
I'd like to have your help in (1- how to make it calculate the mean in increaments from start till the end 2- how to deal with the last posrtion of the data that shorter than 5 seconds)
any help would be appreciate it. Thanks in advance. 
2 comentarios
  Image Analyst
      
      
 el 7 de Jul. de 2021
				Please attach your time and signal data (I'm guessing it's t and x) in a .mat file with the paperclip icon
save('answers.mat', 't', 'x');
so we can try some things.
Respuesta aceptada
  dpb
      
      
 el 7 de Jul. de 2021
        
      Editada: dpb
      
      
 el 8 de Jul. de 2021
  
      2) first -- how to deal with the last posrtion of the data that shorter than 5 seconds" 
How do you WANT to deal with it?  You can either ignore it and have fix(numel/5) samples or average the values that do have in the last segment -- it's your choice.
1)  The classic MATLAB way is to reshape() and use mean() --
a) Ignore last partial segment --
N=5;                                                % number elements to average over
mnX=mean(reshape(x(1:N*fix(numel(x)/N)),N,[]));     % average over N elements ignoring end values
b) Deal with odd end 
x=[x nan(1,N*ceil(numel(x)/N)-numel(x))];           % augment vector to make even
mnX=mean(reshape(x,N,[]),1,'omitnan');              % average over N elements ignoring NaN elements
3 comentarios
  dpb
      
      
 el 8 de Jul. de 2021
				Must've made a typo somewhere; works for me---
>> x=rand(1,63369);
>> numel(x)
ans =
       63369
>> N
N =
     5
>> ceil(numel(x)/5)
ans =
       12674
>> N*ceil(numel(x)/N)
ans =
       63370
>> ans/N
ans =
       12674
>> x=[x nan(1,N*ceil(numel(x)/N)-numel(x))];
>> numel(x)
ans =
       63370
>> mnX=mean(reshape(x(1:5*fix(numel(x)/5)),5,[]));
>> whos mnX
  Name      Size                Bytes  Class     Attributes
  mnX       1x12674            101392  double              
>> 
Más respuestas (0)
Ver también
Categorías
				Más información sobre Logical en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


