Временной ряд октав Скользящая средняя - PullRequest
9 голосов
/ 25 июня 2010

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

Есть ли такая функция, как one в MATLAB?

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

1 Ответ

19 голосов
/ 25 июня 2010

Вы можете использовать функцию 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

...