2010-06-24 18 views
9

Ho una matrice con ogni colonna rappresenta una funzionalità nel tempo. Devo trovare la media mobile di questi valori con una determinata dimensione della finestra.Serie temporali di ottava Media mobile

Esiste una funzione come one in MATLAB?

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

risposta

19

È possibile utilizzare la funzione FILTER. Un esempio:

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 anche utilizzare il IMFILTER e FSPECIAL dal Immagine pacchetto

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

Un'opzione finale sta utilizzando l'indicizzazione (non raccomandato per molto grande vettore)

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

prega notare la differenza di padding: output1(wndw:end) corrisponde a output3

Problemi correlati