moving average considering the first and end data points without changing window size, cyclic window

조회 수: 9 (최근 30일)
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.

채택된 답변

Ameer Hamza
Ameer Hamza 2020년 3월 20일
편집: Ameer Hamza 2020년 3월 21일
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
Rik
Rik 2020년 3월 21일
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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by