移动平均块 returns 列向量输入的错误值

Moving Average block returns wrong values for column vector input

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

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

编辑(在 Cris 发表评论后):

下面是一些屏幕截图,展示了 Simulink 中的一些建模参数:

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

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

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

我可以使用以下最小示例重现此内容:

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

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

使用 demux 拆分向量可得到所需的输出

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

The Moving Average block computes the moving average of the input signal along each channel independently over time.

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

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