在Matlab中将大数组元素全加权限制为较小的数组

时间:2013-03-12 02:28:59

标签: arrays matlab

我有一个包含Ns元素的Matlab数组。对于该数组中的每个元素,我想计算任一方面该元素及其邻居(平均总共n个值)的加权平均值。元素来自周期性数据,因此数组可以被认为是循环的。

然后,我想将加权平均值存储在该元素的位置,并将该数组下采样为Nd = Ns / n长数组。

理想情况下,我想使用类似于完全加权限制的东西 - 我会对元素进行加权,而不是在平均值上对邻居进行加权。例如,对于n = 3,我将元素加权为0.5,其邻居各自为0.25。

有没有一种简单有效的方法在Matlab中完成此操作而无需使用下采样功能?我的代码必须与远程服务器上的旧版Matlab兼容。

1 个答案:

答案 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