0

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

在配置参数中,我指定了 Fixed-Step 和 Discrete 求解器。Start time 和 Stop 也需要手动配置,似乎不是来自数据。

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

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

4

1 回答 1

2

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

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

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

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

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

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

于 2013-06-14T04:45:55.387 回答