【问题标题】:Local Maxima block simulinkLocal Maxima 模块 simulink
【发布时间】:2014-10-22 18:29:01
【问题描述】:

我在块'Local maxima' 中有一个128 x 1 输入。我想将输入的4 最大值作为输出。我设置:最大局部最大值:4,邻域大小:[1 1]。我希望采用2x4 矩阵,每个矩阵在第一行都有我想要的值。但是,此块输出大小为2x42 矩阵。为什么会这样?

编辑:我使用'simout' 来观察块'Local maxima' 的输出。

提前致谢!

【问题讨论】:

  • 您是否尝试过使用显示块?会不会是它在每个时间步输出一个 2x4 矩阵,并且在 simout 中你得到了所有时间步?
  • 每次我执行模拟时,这个块都会产生 2x2x4 矩阵。我使用 simout 显示值。看一看:prntscr.com/4yqqy2
  • 您能否显示信号尺寸(显示 -> 信号和端口 -> 信号尺寸)并检查输入是否真的是 128x1,输出是否真的是 2x4?您还没有尝试过我的建议:不要使用 simout,而是使用 Display 块。我怀疑它输出的是一个 2x4 矩阵,但在每个时间步长,所以 simout 变量中的第三个(甚至可能是第一个)维度是时间。暂时不要使用simout
  • 你完全正确! prntscr.com/4yqzus 但是,如果我尝试将此输出与“子矩阵”块连接,则会出现此错误:prntscr.com/4yr0so 这就是为什么我认为这是尺寸错误。

标签: matlab block simulink


【解决方案1】:

正如我在 cmets 中提到的,块的输出可能是一个 2x4 矩阵,但在每个时间步。如果你有 101 个时间步长(从 0 到 10s,步长为 0.1),那么输入信号不是 128x1,而是 128x1x101,因此存储在 simout 中的输出将为 2x4x101。

【讨论】:

  • 我还没有找到一个只能给我二维矩阵(我想要的 2x4 矩阵)的块。你有什么想法吗?再次感谢!
  • 你不明白:Simulink 是用于基于时间的仿真,这就是 Simulink 的精髓。任何块都会向您输出信号:信号是随时间变化的东西。参数是不变的常数。 在每个时间步,该块完全按照您的意愿行事。您想要的是一个参数,这不是 Simulink 模块所做的。如果您想进行与时间无关的静态计算,请使用 MATLAB,而不是 Simulink。
  • 感谢您的帮助。
【解决方案2】:

我认为他想要做的是:

直接从 Simulink 生成二维矩阵/数组。换句话说,当数据被导出时......时间的第三维应该被省略。这会发生吗?

我知道获取输出并使用 matlab 对其进行编辑,使其从 3 维变为 2 维数组是微不足道的。但是以上可能吗?

【讨论】:

  • 你总是可以在 MATLAB 中对数据进行后处理并在特定时间步提取矩阵,例如M = simout.signals.values(:,:,2); 但正如我所说,他/她一开始就不应该使用 Simulink,这有点违背 Simulink 的目的。
  • 我明白了。感谢您的回答:)
猜你喜欢
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
相关资源
最近更新 更多