moving average considering the first and end data points without changing window size, cyclic window
    5 views (last 30 days)
  
       Show older comments
    
How can you calculate moving average, where for edges, it uses the first and last data (cyclic) points instead of decreasing the window size. For example, if my window size = 10, and number of data points = 100, then for an moving average at point 1, it uses end 5 values at 100,99,98,97,96 and 2,3,4,5,6. Similarly, at point 2, it uses, 1,100,99,98,97 and 3,4,5,6,7 so on and so forth. 
0 Comments
Accepted Answer
  Ameer Hamza
      
      
 on 20 Mar 2020
        
      Edited: Ameer Hamza
      
      
 on 21 Mar 2020
  
      Try this
x = 1:100;
window_size = 11;
window = ones(1, window_size)/window_size;
y = cconv(x, window, numel(x));
y = circshift(y, -floor(window_size/2));
Without cconv
x = 1:100;
window_size = 11;
left_window = floor((window_size-1)/2);
right_window = floor((window_size)/2);
x = [x(end-left_window+1:end) x x(1:right_window)];
y = movmean(x, [left_window right_window], 'Endpoints', 'discard');
3 Comments
  Rik
      
      
 on 21 Mar 2020
				I didn't know about the cconv function, so my first thought was to extend both side with the data from the other side (so your second option). I you keep learning
More Answers (0)
See Also
Categories
				Find more on Data Distribution Plots in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

