0
Moving average

Hi all,

Is there a Scilab function to compute a running average over a specified number of column entries within an array:
i.e:
Values in array3 cell running average
65.3
34.7
77.0
45.3
104.0
2
0
Thanks in advance!
Andy


Scilab 26-10-18, 8:20 p.m. Noiser1234
0
Not as such. However, a routine for calculating a simple moving average can be easily written. Here is one. Please test it extensively before relying on it.
Please feel free to improve this code and report fail cases.
//Function to compute simple moving average. 
//vec is a simple row or column vector
//windw is the number of data points over which the average has to be computed
//avg is a column vector consisting of the computed moving averages
//Example:
//-->sma([6,3,7,4,10,2,0],3)
// ans  =
// 
//    5.3333333  
//    4.6666667  
//    7.         
//    5.3333333  
//    4.
//Author: Rupak Rokade
//FOSSEE, IIT Bombay

function avg=sma(vec, windw)
    avg=[]
    for i=1:length(vec)-windw+1
            av=sum(vec(i:i+(windw-1)))/windw
            avg=[avg;av]
    end
endfunction
29-10-18, 11:59 a.m. rupakrokade
Thanks again rupakrokade! 

This seems to work perfectly with stings of numbers (as in your example above) - my only question is, can this be modified to work with a vector (i.e. 1x50 number array?). 

Maybe I'm missing something in my code, but I get an error when I replace ([6,3,7,4,10,2,0],3)with ([x],3)where "x" represents my array of values.

Thanks in advance!

Andy

29-10-18, 8:20 p.m. Noiser1234

Login to add comment


0
I tried to execute the same sma function, as proposed by Noiser1234, through two approaches, and the results are as follows. The first approach:
--> sma([6,3,7,4,10,2,0],3)
ans =
5.3333333
4.6666667
7.
5.3333333
4.
And, the second approach:
--> iput = [6,3,7,4,10,2,0]; --> wndw = 3; --> movmean = sma(input,wndw);
at line 3 of function sma ( D:\Scilab\MovAvg.sce line 19 ) length: Wrong type for input argument(s).
It seems we need to work a bit on the implementation!
17-11-20, 9:01 p.m. abbas14


Log-in to answer to this question.