Create a moving average

23 visualizaciones (últimos 30 días)
Dirk
Dirk el 28 de Jun. de 2013
Editada: Adam Danz el 19 de Sept. de 2021
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
  1 comentario
arman arefi
arman arefi el 27 de Mzo. de 2020
You can use Moving Average Function in the FileExchange. Please find the link below:

Iniciar sesión para comentar.

Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 28 de Jun. de 2013
A - your data
L = filter(ones(101,1)/101,1,[A(:) zeros(50,1)]);
out = L(51:end);

Más respuestas (5)

Image Analyst
Image Analyst el 28 de Jun. de 2013
Editada: Image Analyst el 28 de Jun. de 2013
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 comentarios
Nuchto
Nuchto el 30 de Nov. de 2017
So you could use ones(101,1) first, and onces it is convolved you can divide by 101?
Image Analyst
Image Analyst el 30 de Nov. de 2017
Yes.

Iniciar sesión para comentar.


Grzegorz Knor
Grzegorz Knor el 7 de Abr. de 2017
Editada: Adam Danz el 19 de Sept. de 2021
From MATLAB R2016a there is a function movmean which does not require additional toolboxes.
  1 comentario
Image Analyst
Image Analyst el 7 de Abr. de 2017
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.

Iniciar sesión para comentar.


Marc
Marc el 28 de Jun. de 2013
If you have the financial toolbox, doc movavg()....
[Short, Long] = movavg(Asset, Lead, Lag, Alpha)

the cyclist
the cyclist el 28 de Jun. de 2013
This page of the MATLAB documentation has an example of using the filter() command to calculate a moving average:
  1 comentario
Dirk
Dirk el 28 de Jun. de 2013
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

Iniciar sesión para comentar.


Jan
Jan el 28 de Jun. de 2013
There are many moving average filters in the FileExchange. Whenever a standard problem occurs, looking in the FEX is a good idea:

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by