Simulin金宝appk上的家伙

金宝appSimulink &基于模型的设计

使用离散数据作为Simulink模型的输入金宝app

2019年8月更新:参见博客文章以时间表格式加载信号以改进的方式来解决本文中描述的问题。

-----------------

今天,我想看看一个经常让那些对模型有离散输入的Simulink用户感到沮丧的问题。金宝app

这个问题

我创建了一个简单的模型轮廓尺寸块直接连接到一个外港块,两者都配置为以0.001秒的采样时间执行。

最简单可能模型

我将模型配置为从工作区导入数据:

配置一个模型以从工作区导入数据

我模拟模型,并使用以下代码比较输入和输出:

Ts = 0.001;
T = (0:ts:10)';
U = (1:length(t))';
simOut = sim('exampleModel');
阀杆(abs (u-simOut.get (y) .signals.values))

对于某些示例,输出与输入不匹配。

比较输入和输出

的解释

为了理解这里发生了什么,比较输入数据的时间向量和Simulink使用的时间向量是很重要的。金宝app

比较时间向量

正如我们在这张图中看到的,Simulink求解器所采取的步骤与输入时间向量中指定的步骤不同。金宝app正如在技术方案1-1ITHX9, 金宝appSimulink使用以下公式计算时间:

time = stepSize * [0:N]'

虽然这两种方法看起来很相似,但由于浮点四舍五入,它们可能会给出不同的结果。正如您所想象的,如果输入数据稍晚于或早于求解器所采取的步骤,则可以跳过或重复一个数据点。

解决方案

为了避免这样的问题,建议在向模拟中输入离散数据时不要提供时间向量。例如,修改代码以使用没有时间的结构将允许import在每一步从向量中获取下一个样本。下面是一些代码,用于创建没有时间的信号结构,更新模型以使用该结构,并验证输入和输出是否相等。

inputStruct。时间= [];
inputStruct.signals.dimensions = 1;
inputStruct.signals.values = u;
set_param(“exampleModel”、“ExternalInput”、“inputStruct”)
simOut = sim('exampleModel');
规范(u-simOut.get (y) .signals.values)

ans =

0

现在轮到你了

看看文档部分为导入数据指定时间和信号值的指南要了解更多详细信息,请参阅本主题。

让我们知道您如何将数据导入到模型中这里的评论

|

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。