Hi There, How can I calculate a moving average for a column of data. For instance i want to average the 50 points either side of each data point in my column. Thanks

 채택된 답변

Andrei Bobrov
Andrei Bobrov 2013년 6월 28일

1 개 추천

A - your data
L = filter(ones(101,1)/101,1,[A(:) zeros(50,1)]);
out = L(51:end);

추가 답변 (5개)

Image Analyst
Image Analyst 2013년 6월 28일
편집: Image Analyst 2013년 6월 28일

4 개 추천

For a 1D column vector:
movingAverage = conv(yourSignal, ones(101,1)/101, 'same');
For a 2D array of columns:
movingAverage = conv2(yourSignal, ones(101,1)/101, 'same');
If you don't want the central pixel to be included in the average and have ONLY the 50 on either side, use
kernel = ones(101,1)/100;
kernel(51) = 0;
movingAverage = conv(yourSignal, kernel, 'same');
Same for a 2D matrix except use conv2 instead of conv. conv() and conv2() are highly optimized and very fast.

댓글 수: 4

Nuchto
Nuchto 2017년 11월 29일
Thanks. Why do you divide by 101?
Image Analyst
Image Analyst 2017년 11월 29일
You divide by however many 1's there are in the kernel. If you don't then you're not getting the average. Remember the average is the sum divided by the number of elements in the sum. If you didn't have 101, then you'd simply be summing 101 values and the resulting image would be 101 times as bright rather than in the same intensity range as the original.
Nuchto
Nuchto 2017년 11월 30일
So you could use ones(101,1) first, and onces it is convolved you can divide by 101?
Image Analyst
Image Analyst 2017년 11월 30일
Yes.

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

Grzegorz Knor
Grzegorz Knor 2017년 4월 7일
편집: Adam Danz 2021년 9월 19일

3 개 추천

From MATLAB R2016a there is a function movmean which does not require additional toolboxes.

댓글 수: 1

Image Analyst
Image Analyst 2017년 4월 7일
True, and it offers some edge handling options ('shrink', 'discard', 'fill') that conv2() does not have.
conv2() also does not require any toolboxes because it's in base MATLAB.

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

Marc
Marc 2013년 6월 28일

1 개 추천

If you have the financial toolbox, doc movavg()....
[Short, Long] = movavg(Asset, Lead, Lag, Alpha)
the cyclist
the cyclist 2013년 6월 28일

1 개 추천

This page of the MATLAB documentation has an example of using the filter() command to calculate a moving average:

댓글 수: 1

Dirk
Dirk 2013년 6월 28일
Thanks. The filter function is set to average data from the previous n measurements. Is there a simple way to specify a different averaging criteria? Thanks

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

Jan
Jan 2013년 6월 28일

1 개 추천

There are many moving average filters in the FileExchange. Whenever a standard problem occurs, looking in the FEX is a good idea:

카테고리

질문:

2013년 6월 28일

편집:

2021년 9월 19일

Community Treasure Hunt

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

Start Hunting!

Translated by