移動平均

ikeuchihiroki2008-03-26

移動平均Scilabで。
以下の特徴があります。

  • 入出力でデータ長が変化しません
  • 入出力で平均値が変化しません
  • ピーク位置がずれません
    • 移動量が奇数の場合のみ
function [ret] = moving_average(data,len)
    data=data(:);len_d=length(data);
    tmp=[ones(len-1,1)*data(1);data;ones(len-1,1)*data($)];

    h = ones(1,len)/len;
    ret = convol(h,tmp);

    side=(length(ret)-length(data))/2;
    ret = ret(floor(side)+1:$-ceil(side));

endfunction


使用例

getf('moving_average.sci');
a=ones(11,1);a(6)=2;
b=moving_average(a,3); //3点移動平均
scf;
plot(a);
plot(b,'r');