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
No products are associated with this question.
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.
If you have the financial toolbox, doc movavg()....
[Short, Long] = movavg(Asset, Lead, Lag, Alpha)
This page of the MATLAB documentation has an example of using the filter() command to calculate a moving average:
A - your data
L = filter(ones(101,1)/101,1,[A(:) zeros(50,1)]); out = L(51:end);
There are many moving average filters in the FileExchange. Whenever a standard problem occurs, looking in the FEX is a good idea: