我有一个包含Ns元素的Matlab数组。对于该数组中的每个元素,我想计算任一方面该元素及其邻居(平均总共n个值)的加权平均值。元素来自周期性数据,因此数组可以被认为是循环的。
然后,我想将加权平均值存储在该元素的位置,并将该数组下采样为Nd = Ns / n长数组。
理想情况下,我想使用类似于完全加权限制的东西 - 我会对元素进行加权,而不是在平均值上对邻居进行加权。例如,对于n = 3,我将元素加权为0.5,其邻居各自为0.25。
有没有一种简单有效的方法在Matlab中完成此操作而无需使用下采样功能?我的代码必须与远程服务器上的旧版Matlab兼容。
答案 0 :(得分:0)
您要找的是moving average,可以使用FIR filter获取。假设x
是您的数组并且它是一维的,您可以使用filter
命令:
y = filter(ones(1, n), 1, x);
要对结果进行下采样,请使用索引:
y_downsampled = y(1:n:Ns);
简单来说,ones(1, n)
表示权重。如果您想让一个元素的重量超过其他元素,请根据自己的喜好进行修改。在您的示例中,您可以将其更改为[0.25, 0.5, 0.25]
。
如果您的数组是二维的,则应使用其他合适的过滤命令,例如filter2
。