MOVING will compute moving averages of order n (best taken as odd)
Usage: y=moving(x,n[,fun])
where x is the input vector (or matrix) to be smoothed.
m is number of points to average over (best odd, but even works)
y is output vector of same length as x
fun (optional) is a custom function rather than moving averages
Note:if x is a matrix then the smoothing will be done 'vertically'.
Example:
x=randn(300,1);
plot(x,'g.');
hold on;
plot(moving(x,7),'k');
plot(moving(x,7,'median'),'r');
plot(moving(x,7,@(x)max(x)),'b');
legend('x','7pt moving mean','7pt moving median','7pt moving max','location','best')
Aslak Grinsted (2021). Moving averages / Moving median etc (https://www.mathworks.com/matlabcentral/fileexchange/8251-moving-averages-moving-median-etc), MATLAB Central File Exchange. Retrieved .
Inspired: downsample_ts, scatstat1 local statistics of scattered 1d data, scatstat2 2D local statistics, Nth Octave Test Signal, Nth_Oct_Hand_Arm_&_AC_Filter_Tool_Box, Continuous Sound and Vibration Analysis, Calibrated Spectral Analysis
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Create scripts with code, output, and formatted text in a single executable document.
Very nicely written.
dydy m: The Undefined function error most often means Matlab can't find the function. The function may still be in your downloads folder. Put it in your current folder or add a path to wherever you keep it.
MatlabR2002b does not have smooth function so this one helps a lot!! thanks!!
I tried similar to this script for other data, but error found :
??? Undefined function or method 'moving' for input arguments of type 'double'. How do I change type of data?
Works perfectly. Thank You!
Works great.
super
thanks. It works very well. super.
Works genial, thank you for sharing!!
Slow!
At first, tests show that this function is faster than Matlab's "tsmovavg" function. But when you look at the result of this function, the output series needs to be moved by "floor( m /2 )". When this is taken into consideration, the entire function becomes much slower than Matlab's default function.
In addition, Matlab's tsmovavg function also takes the averages of multiple series simultaneously (matrices of m series X N data points)
The above was tested for "simple" moving averages.
This works great! It turns out I also need standard deviation's for the averages. Is it possible to easily modify your code to include this? or do you have any recommendations? Thank you so much!
Hi
I am new in using matlab. I am using it for trading rule such filter and moving average but I could not make it. does anyone have them already programmed in matlab.
thanks
Works great, thanks so much for posting!
Works well, thanks.
Better than Matlab's moving average function, simple and does the trick
works great and is very fast. thanks
Hi. I've updated the script to make it much more flexible. You can now easily calculate things like the moving 90th percentile.
For people with errors: i would appreciate if you email me your problems directly so that i can improve the code.
(Sorry - error reported is as follows:)
??? Subscript indices must either be real positive integers or logicals.
Error in ==> moving at 27
y=y([zeros(1,m2)+m2+1,(m2+1):(n-n2),zeros(1,n2)+(n-n2)],:);
not work
The script is excellent for wave data smoothing
Just delete it then. I'll still use it myself.
not work
moving can handle multiple columns at once which smooth can not. Smooth always uses an odd size window, even if you ask for an even sized one. They also handle edges a little differently. With moving.m it is very easy to spot where the edge is affecting the average.
So, i think smooth does not make moving obsolete.
use Matlabs smooth function