2010-06-24 13 views
9

Ich habe eine Matrix mit jeder Spalte stellt ein Feature im Laufe der Zeit. Ich muss den gleitenden Durchschnitt dieser Werte mit einer gegebenen Fenstergröße finden.Octave Zeitreihe Moving Average

Gibt es eine Funktion wie die one in MATLAB?

output = tsmovavg(vector, 's', lag, dim) 

Antwort

19

Sie können die FILTER Funktion verwenden. Ein Beispiel:

t = (0:.001:1)';        %#' 
vector = sin(2*pi*t) + 0.2*randn(size(t));  %# time series 

wndw = 10;          %# sliding window size 
output1 = filter(ones(wndw,1)/wndw, 1, vector); %# moving average 

oder sogar die IMFILTER und FSPECIAL aus dem Bild-Paket verwendet

output2 = imfilter(vector, fspecial('average', [wndw 1])); 

Eine letzte Option Indizierung wird (nicht für sehr großen Vektor empfohlen)

%# get indices of each sliding window 
idx = bsxfun(@plus, (1:wndw)', 0:length(vector)-wndw); 
%'# compute average of each 
output3 = mean(vector(idx),1); 

Bitte Beachten Sie den Unterschied in der Polsterung: output1(wndw:end) entspricht output3