2010-06-24 28 views
9

Tengo una matriz con cada columna representa una característica en el tiempo. Necesito encontrar el promedio móvil de estos valores con un tamaño de ventana dado.Octava serie de tiempo Media móvil

¿Existe una función como la one en MATLAB?

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

Respuesta

19

Puede usar la función FILTER. Un ejemplo:

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 

o incluso utilizar el IMFILTER y FSPECIAL de la imagen Paquete

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

Una última opción es el uso de indexación (no recomendado para el gran vector)

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

favor tenga en cuenta la diferencia en el relleno: output1(wndw:end) corresponde a output3

Cuestiones relacionadas