Calculate average over each specific interval
    19 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Saad Alqahtani
 am 7 Jul. 2021
  
    
    
    
    
    Kommentiert: Saad Alqahtani
 am 8 Jul. 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 Kommentare
  Image Analyst
      
      
 am 7 Jul. 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.
Akzeptierte Antwort
  dpb
      
      
 am 7 Jul. 2021
        
      Bearbeitet: dpb
      
      
 am 8 Jul. 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 Kommentare
  dpb
      
      
 am 8 Jul. 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              
>> 
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Logical finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


