You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

离散仿真中Simulink From Workspace模块数据点丢失问题排查

问题解答

核心结论

是,这确实是Simulink的时间步匹配逻辑导致的问题。

原因分析

你的场景是50Hz固定步长仿真(步长0.02s),输入数据为10Hz频率(间隔0.1s),通过补虚拟数据(-1)将数据扩展到50Hz时间戳,同时关闭了插值功能,预期是10Hz时间点取真实数据,中间步长取虚拟数据。但Simulink的From Workspace模块在时间戳匹配上有以下关键行为:

  • 当仿真时间严格精确命中你提供的数据时间戳时,模块会直接读取对应位置的数据值;
  • 若存在浮点精度误差(比如手动输入时间向量时的精度损失),或仿真初始时刻的对齐偏差,会出现两种异常:
    1. 跳过数据点:仿真步长刚好“跨过”某个数据的时间戳,模块会自动取最近的下一个有效数据;
    2. 重复取值:连续两个仿真时间步因浮点精度问题,被判定为落在同一个数据时间戳的匹配范围内,导致重复读取同一值。

临时方案的原理

你将时间向量偏移1/100秒(0.01s),本质是让仿真时间步刚好落在数据时间戳的间隙中。此时关闭插值的From Workspace会自动取前一个时间点的数据,刚好符合你“中间用虚拟数据、10Hz点用真实数据”的需求,但这属于绕开问题的临时手段,并非最优解。

更优解决方案

方案1:严格对齐时间戳(固定步长场景)

  • 使用固定步长求解器,设置步长为0.02(50Hz);
  • 用精确方式生成时间向量,比如:
    t = linspace(0, simulation_duration, simulation_duration/0.02 + 1);
    
  • 在From Workspace模块中,设置Sample Time为0.02,关闭Interpolate data选项;
  • 确保数据向量与时间向量严格一一对应,10Hz时间点(0, 0.1, 0.2...)放真实数据,其余位置放虚拟数据(-1)。

方案2:使用Signal Builder模块替代

  • 用Signal Builder模块可视化定义输入信号:
    • 添加10Hz的真实数据点,设置每个真实数据点之间的信号值为-1;
    • 模块会严格按照你定义的时间点输出值,中间自动保持虚拟数据,无需手动补全数据向量,彻底避免时间戳匹配问题。

方案3:启用Hold between samples(变步长场景)

  • 若必须使用变步长求解器,在From Workspace模块的Data Import Options中,关闭Interpolate data并启用Hold between samples;
  • 确保数据时间向量严格单调递增,且覆盖所有仿真时间区间,模块会自动在两个数据点之间保持前一个值,避免跳点或重复。

内容的提问来源于stack exchange,提问作者robbie crockett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:05:26