【问题标题】:Moving Average block returns wrong values for column vector input移动平均模块为列向量输入返回错误值
【发布时间】:2021-08-26 15:35:35
【问题描述】:

我正在使用 Simulink 使用经过训练的 Fine-KNN 模型进行实时分类。模型的输入数据是一个 50 点移动平均向量 [6x1]。为此,我使用 DSP 移动平均块和滑动窗口技术(窗口大小 = 50 并使用代码生成器进行模拟)。当我比较这个块的输入和输出的实时值时,我得到以下图:

从图中可以清楚地看出,输出有问题,因为输入和输出之间存在很大差异。可能是什么问题或我做错了什么?

编辑(根据 Cris 的评论):

以下是一些屏幕截图,用于展示 Simulink 中的一些建模参数:

  1. 显示用于测量实际输入和移动平均输出的探针以及移动平均模块参数的屏幕截图 Probes

  2. 可能影响模型性能的其他模块参数: 一种。 OPC Config real-time block parameters 湾。 OPC Read block parameters

PS:我能想到的一个问题是,实际输入以 10 毫秒的时间步长实时馈送到移动平均线,我不确定移动平均线块是否有缓冲区可以存储到“窗口长度”数据不断出现。我的意思是,移动平均块可能在很长一段时间内无法访问输入信号的 50 个值,我不确定它如何处理这种情况。

【问题讨论】:

  • 不看代码很难知道哪里出了问题。
  • 开始时的“斜坡”是由于您的 PS,即当没有足够的样本时它在缓冲区中使用 0,导致平均值逐渐增加。但是,您的实际问题是由根据我的回答中展示的问题

标签: matlab signal-processing simulink moving-average


【解决方案1】:

我可以通过以下最小示例重现这一点:

因此,[1; 2; 3] 的恒定输入给出了所有元素中大致为 2(输入元素的平均值)的移动平均值,而您预计输出为 [1; 2; 3],因为每个元素都是恒定的。

在您的示例中,输入平均约为 0.62,您在移动平均的输出中看到了这一点。

使用demux 将向量拆分为所需的输出

文档说移动平均块应该能够处理这个问题

移动平均模块计算每个通道上输入信号随时间变化的移动平均值。

事实证明,在这种情况下,channel 是您的向量的 。由于您有一个列向量,因此每次迭代中的列都会被堆叠和平均。不幸的是,底层代码是密封的,所以我们只能通过尝试来验证这个理论。

使用reshape 块将您的输入重塑为行数组。 然后你得到预期的输出

【讨论】:

  • 将输入重新整形为行向量解决了输出不准确的问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-22
  • 2021-04-12
  • 2021-08-13
  • 1970-01-01
  • 2022-12-15
  • 2012-11-06
  • 1970-01-01
相关资源
最近更新 更多