Stuart’s MATLAB Videos

Watch and Learn

This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the Original version of the page.

Using convolution to smooth data with a moving average in MATLAB 5

Posted by Doug Hull,

I teach the introduction to MATLAB classes for all new hires in the Technical Support group at MathWorks. One of the attendees wanted to know how to do a moving average in MATLAB. This can be useful for filtering, or smoothing, noisy data. I realized I had never covered that on the blog, so here we go! I show how to do this from scratch using conv. If you have the Curve Fitting Toolbox, you might want to check out smooth, which adds some fancier smoothing methods.

5 CommentsOldest to Newest

Martin Offterdinger replied on : 2 of 5
How can I generate a moving average of a series of images of the form ImSer=(x,y,t); t being a time course. The series could eg be 512x512 pixels and 50 times points. The goal is to remove slow movements over time. I would require a way to specifiy a dimenson over which the average should be done. In this case a time average....
Zoltan replied on : 4 of 5
Well, it is great to see how much different tasks the convolution can be used for. A real friend of engineers. :) As a supplement to this post, here is an online demonstration to play around moving average: http://matlabtricks.com/post-4/online-demo-on-simple-moving-average
Bharath replied on : 5 of 5
Dear Doug, I think something that is missing in the video is that the "theoretical background" that is necessary before sliding the mask function (e.g. [a b c]). The sliding/mask function g(t) has to be reversed before sliding it over the main function h(t). Conv = Int_{x}^{y} [h)(t) * g(tau - t)] dt So, if you go by this definition, my mask function (mask = [a b c]) has to be - new mask = [c b a] before sliding from left. Or the original mask function can be used if the sliding is done from right end. In the example considered in the video, the values of a and c in the mask function are same, i.e. 1. Hence time reversal of this particular mask function is not necessary (although done, the results are same). For more understanding, an ex. a = [1 2 3 4 5] and mask = [1 2] can be tried. Please correct me if I am wrong.