【发布时间】:2011-03-28 02:08:09
【问题描述】:
计算简单一维数据向量的运行平均值似乎很简单。事实上,FILTER 的 MATLAB 文档很高兴地声称:
您可以使用过滤器来查找运行平均值,而无需 使用 for 循环。此示例查找运行平均值 一个 16 元素的向量,使用 3 的窗口大小:
D = [1:0.2:4]';
windowSize = 3;
F = ones(1,windowSize)/windowSize;
Df = filter(F,1,D);
结果:
出于我的目的,这个结果有两个令人讨厌的地方:输出点 n 是输入点 n-(windowSize-1)..n 的平均值(即不居中,如水平移位所示)并指向可用数据的左侧被视为零。
FILTFILT 处理这两个问题,但还有其他缺点。它是信号处理工具箱的一部分,它不能很好地处理 NaN(我希望将其排除在平均值之外)。
Somepeople 在 FEX 上显然有同样的挫败感,但我觉得奇怪的是,这么简单的事情需要自定义代码。我在这里遗漏了什么?
【问题讨论】:
-
filtfilt不依赖于其他 Signal Processing Toolbox 函数,是 m-Code。因此,您只需将其复制粘贴到您的代码中即可根据需要进行更改。 -
如果您没有 SP 工具箱,则不确定版权。我的直觉告诉我这是违法的。
标签: matlab