我在使用导入我的Simulink块工作空间的数据时遇到问题。
我的案例:
我做了一个简单的框图来模拟结果,然后将这个方法实现到实际的Simulink块。我利用“从工作空间”块读取数据和范围来观察输出。这些是设置:
t=0:22/565:22
a.time=t
a.signals.values=ddata %ddata contains [565x1] datas
a.signals.dimensions=1;
我意识到范围内的结果与数据不匹配。
我发现在这个网站(http://blogs.mathworks.com/seth/2012/02/09/using-discrete-data-as-an-input-to-your-simulink-model/)上,Simulink求解器采取的步骤与输入时间向量中指定的步骤不同。
尝试解决:
我将时间向量设置为零,但是出现错误。
a.time=[];
错误:“为'test / From Workspace'指定的连续采样时间无效。当工作空间的输入是没有时间数据的结构时,不允许连续采样时间。要消除此错误,请选择离散采样时间或更改输入数据包括时间数据。“
问题:
如何在不使用时间向量的情况下解决此错误?
读取Simulink块中每个时间步的一行而不是整个数据列表的最佳方法是什么?
如果有人能为我的案例提供见解/解决方案/替代方法,我深表感谢。
答案 0 :(得分:0)
数据中的时间向量与模拟模型时Simulink将使用的时间步骤无关。 将您的输入时间/数据视为一个查找表,Simulink将使用该查找表为每个时间步(它决定采用)获取输入值(使用插值)。
要强制Simulink在给定时间点采取步骤,您需要更改“配置参数”对话框的“求解器”页面上的参数。 听起来你想要使用步长为22/565的固定步长求解器。
答案 1 :(得分:0)
也许您可以使用1-D Lookup Table block吗?您将时间向量用作断点,将ddata用作表数据。 如果Simulink在时间向量中的点之间有一个时间点,则可以使用线性/三次插值或使用最近的点。这样可以避免将Simulink强制设置为特定时间点。