2010-06-24 6 views
9

У меня есть матрица с каждым столбцом, представляющая собой функцию с течением времени. Мне нужно найти скользящее среднее этих значений с заданным размером окна.Октавные временные ряды Среднее скользящее среднее

Есть функция, например, one в MATLAB?

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

ответ

19

Вы можете использовать функцию FILTER. Пример:

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 

или даже использовать IMFILTER и FSPECIAL от изображения Пакет

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

Один окончательный вариант использует индексацию (не рекомендуется для очень большого вектора)

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

Пожалуйста обратите внимание на разницу в заполнении: output1(wndw:end) соответствует output3