代码之家  ›  专栏  ›  技术社区  ›  Matt Mizumi

用MATLAB计算运行平均值

  •  2
  • Matt Mizumi  · 技术社区  · 16 年前

    计算一个简单的一维数据向量的运行平均值似乎足够简单。事实上,MATLAB文档 FILTER 很高兴地宣称:

    使用for循环。这个例子找到了运行平均值 使用窗口大小为3的16元素向量:

    D = [1:0.2:4]';
    windowSize = 3;
    F = ones(1,windowSize)/windowSize;
    Df = filter(F,1,D);
    

    结果是:

    Image of raw and filtered data plot from above example http://www.tc.umn.edu/~vande642/pictures/untitled.png

    出于我的目的,这个结果有两个恼人的地方:输出点n是输入点n-(windowSize-1)…n的平均值(即不居中,由水平移动证明)和可用数据左侧的点被视为零。

    FILTFILT

    Some people 在FEX上显然也遇到了同样的挫折,但我觉得奇怪的是,这么简单的东西需要定制代码。我有什么遗漏吗?

    1 回复  |  直到 16 年前
        1
  •  4
  •   Jonas    16 年前

    convolution . 因此,你不需要担心脏物。

    D = [1:0.2:4];
    windowSize = 3;
    F = ones(1,windowSize)/windowSize;
    Df = conv(D,F);
    %# if you didn't use 'valid', Df is larger than D. To correct:
    halfSize = floor(windowSize/2);
    Df = Df(halfSize+1:end-halfSize);
    

    当然,您仍然需要处理edge,因此应该先填充d,或者使用'valid'参数运行conv。例如,您可以使用 PADARRAY 如果你有图像处理工具箱。