【问题标题】:Simulink From Workspace: can't use timestamps from matrixSimulink From Workspace:不能使用矩阵中的时间戳
【发布时间】:2013-06-13 14:06:09
【问题描述】:

我正在使用来自 Workspace 的 simulink 块来读取脚本提供的一些音频数据。我已将数据格式化为一个包含 2 列的矩阵,第一列是时间戳,第二列是数据。

在配置参数中,我指定了 Fixed-Step 和 Discrete 求解器。开始时间和停止时间也需要手动配置,好像不是数据来的。

另外,在 From Workspace 块配置中,我需要指定采样时间 (1/44100),否则如果我指定 -1,我会收到警告,从数据继承,然后得到奇怪的采样时间。

那么,如何让 simulink 仅使用矩阵中的采样时间,并使用第一个和最后一个时间戳作为模拟的开始和停止时间?

【问题讨论】:

  • 您要使用非统一采样时间吗?如果没有,我不确定我是否理解您描述的方法为什么行不通。可能还想发布模型的照片。
  • 我希望模型使用矩阵中的时间戳以及与每个时间戳关联的数据。我不希望通过任何方法进行插值,因为时间戳不完全是 44.1 khz 速率。 Mathworks 说我必须在源块中指定步骤,那么在矩阵中添加时间戳有什么意义?
  • 嗯,也许指定不统一的步骤会强制 simulink 使用矩阵中的时间戳。现在看看。

标签: matlab simulink


【解决方案1】:

您应该能够通过执行以下操作来做您想做的事情:

首先请注意,根据定义,您的问题不是固定步长,因此您不能使用固定步长求解器,根据定义,它是...固定步长。 您必须使用可变步长求解器。

假设您的(2 列)输入数据称为simin,然后将开始和停止时间分别设置为simin(1,1)simin(end,1)

在您的 From Workspace 块中,将采样时间设置为 0(这应该是默认值)。 同时取消选择插值数据选项;并将“在最终数据值之后形成输出:”设置为零(您将不会使用数据集末尾之后的任何内容,所以这应该没问题。

然后,您需要告诉求解器对它自然想要采取的步骤采取额外的步骤。 在模型配置参数的数据导入/导出窗格中执行此操作。 在窗格底部附近有一个选择框和一个用于执行此操作的编辑框。 但是请注意,这不会阻止求解器在其他时间点采取步骤,它只是强制它在您指定的时间采取额外的步骤。 但是因为你有你的 From WOrkspace 块到 not 内插,所以这也不应该是一个问题。您应该在此处输入simin(:,1),以便保证求解器在您输入数据中的时间点采取步骤。

请注意,如果您想要一个仅在 simin 时间向量中的时间点采样的输入块,那么执行此操作的唯一方法是编写一个使用 mdlGetTimeOfNextVarHit 方法告诉求解器的 S-Function下一个采样时间(对于这个块)应该是多少。

【讨论】:

  • 谢谢菲尔。我按照你的步骤,它似乎工作。现在我发现我正在使用的离散时间积分器存在问题。他们在抱怨(传播后的采样时间为 [0,0]。输入离散采样时间)。如何从最后两个时间戳中获取样本时间步长?
  • 我认为您要求下游离散积分器也具有可变步长。如果是这样,那是不可能的。一个离散块只能有一个固定的步长。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多