【问题标题】:Sampling frequency from Simulink to Matlab从 Simulink 到 Matlab 的采样频率
【发布时间】:2018-05-27 14:18:58
【问题描述】:

我正在使用 matlab 从 simulink 运行一个 simulink 模型。我的系统主要在 matlab 中,但我运行 slx 文件并导出要在 matlab 中使用的输出。模拟运行 48 秒(1 秒代表一小时)。当我得到输出时,我希望它的质量与我在 simulink 中查看时的质量相同,但事实并非如此。这是我的数据在 simulink 中的样子的示例:

这是我在matlab中绘制时的样子(导出时样本数变为307)

我尝试在 simulink 中更改步长或更改求解器,但这会使我的 simulink 输出失真,如下所示。

我的求解器是 ode45,如何控制数据的采样频率,以便在导出到 matlab 后不会得到不同的分辨率。 P.S 一旦我导出它,我将插入数据,以便在几个小时之间获取样本(每分钟而不是每小时一个样本)。如果我可以通过更改步长立即完成,那将是完美的。

按照您的建议,当我绘制它与时间而不是样本时,我得到了这个图

谢谢

【问题讨论】:

  • MATLAB 图中的蓝色信号不像(第一个)Simulink 图中的红线那样是一个真正的步骤,因为您使用plot 来可视化它而不是stairs。但是为什么它的高度只有 30,而 Simulink 图像显示高度为 50。你确定它们是同一个信号吗?
  • 此外,您无法将基于时间的信号(Simulink 中的信号)与基于索引的信号(MATLAB 中的信号)进行比较。当您将数据从 Simulink 转储到 MATLAB 时,您还应该保存与这些点对应的时间向量。我敢打赌,如果您的 MATLAB 图中的 x 轴是时间,那么这两个图看起来会相同(除了我之前评论中的 30 问题的高度)。
  • 你是对的,当我用时间绘制它时,它是一个不同的信号(我用数字与时间更新了帖子)。关于幅度,这只是增益,它是一个布尔信号(1 或零),所以为了看到它,我在 simulink 中将它乘以 50,在 matlab 中乘以 30(通过 misak)。但这是同一个信号,对我来说重要的是它不为零。

标签: matlab simulink


【解决方案1】:

您使用的是可变步长求解器 (ODE45),因此您很可能无法获得一致的采样频率。

确保/控制采样频率的唯一方法是使用固定步长求解器(例如 ode4)。

但是,至于为什么 Simulink 范围和绘图数据之间的数据看起来不同,对于可变时间步长求解器,有 优化因子(配置参数 -> 数据导入/导出 -> 附加参数) .默认设置为 1。将其设置为 100,您应该会获得更一致的样本密度。

关于细化因子应该知道什么?

  • 为了获得更平滑的输出和更好的时间分辨率,更改细化因子比减小步长要快得多。
  • 当优化因子发生变化时,求解器会通过计算这些点的连续扩展公式来生成额外的点。
  • 细化因子适用于可变步长求解器,在使用 ode45 时最有用。
  • 通常值为 4 会产生更平滑的结果。

https://blogs.mathworks.com/simulink/2009/07/14/refining-the-output-of-a-simulation/ https://uk.mathworks.com/help/simulink/gui/refine-factor.html

【讨论】:

    猜你喜欢
    • 2020-01-13
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2013-04-05
    • 1970-01-01
    • 2016-07-31
    相关资源
    最近更新 更多