八度时间序列移动平均线

时间:2010-06-24 22:45:20

标签: matlab signal-processing time-series octave financial

我有一个矩阵,每列代表一段时间内的特征。我需要找到给定窗口大小的这些值的移动平均值。

MATLAB中是否有像one这样的函数?

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

1 个答案:

答案 0 :(得分: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

甚至使用图片包中的IMFILTERFSPECIAL

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