【问题标题】:Full-weighted restriction of elements of large array to a smaller array in MatlabMatlab中大数组元素到小数组的全权限制
【发布时间】:2013-02-27 10:29:24
【问题描述】:

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

然后我想存储加权平均值来代替该元素并将数组下采样为 Nd = Ns/n 长数组。

理想情况下,我想使用类似于完全加权限制的东西 - 我对元素的加权比平均加权它的邻居要多。例如,对于 n=3,我会用 0.5 为元素加权,它的邻居每个用 0.25 加权。

在 Matlab 中是否有一种简单有效的方法可以做到这一点而无需使用下采样功能?我的代码必须与远程服务器上的旧版 Matlab 兼容。

【问题讨论】:

  • 我用一个循环来做,并编写逻辑来做加权平均。由于我的数据是周期性的,我在我的数组上使用了 repmat 来确保它的结束条件正确。

标签: arrays matlab


【解决方案1】:

您要查找的是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

【讨论】:

  • 我认为应该在第一个参数中除以 n 来过滤以获得平均值。
猜你喜欢
  • 2023-04-02
  • 2010-12-29
  • 2021-12-21
  • 2018-12-03
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 2012-05-13
  • 2011-10-24
相关资源
最近更新 更多