我正在使用Simulink块来自工作区来读取脚本提供的一些音频数据。我已经将数据格式化为2列的矩阵,第一列是时间戳,第二列是数据。
在配置参数中,我指定了Fixed-Step和Discrete解算器。开始时间和停止也需要手动配置,似乎不是来自数据。
另外,在From Workspace块配置中,我需要指定采样时间(1/44100),否则如果指定-1则会收到警告,从数据继承然后获取奇怪的采样时间。
那么,如何才能使用simulink只使用矩阵中的采样时间并使用第一个和最后一个时间戳作为模拟的开始和停止时间?
答案 0 :(得分:2)
您应该可以通过执行以下操作来执行您想要的操作:
首先请注意,根据定义,您的问题不是固定步骤,因此您不能使用固定步骤求解器,根据定义,它是固定步骤。 您必须使用可变步长求解器。
假设您的(2列)输入数据被称为simin
,则将开始和停止时间分别设置为simin(1,1)
和simin(end,1)
。
在From Workspace块中,将采样时间设置为0(应该是默认值)。 同时取消选择Interpolate数据选项;并设置“将最终数据值之后的输出形式:”设置为零(您将不会使用超出数据集末尾的任何内容,因此这应该没问题。
然后你需要告诉求解者采取额外的步骤来自然地想要采取的步骤。
在“模型配置参数”的“数据导入/导出”窗格中执行此操作。
在窗格底部附近有一个选择框和一个用于执行此操作的编辑框。
但请注意,这并不会阻止求解程序在其他时间点执行步骤,它只会强制它在您指定的时间执行其他步骤。
但是因为你的From WOrkspace块到而不是插值,所以这也不是问题。您应该将simin(:,1)
放在此处,以便保证解算器在输入数据的时间点采取步骤。
请注意,如果您想要一个仅在simin
时间向量中的时间点采样的输入块,那么执行此操作的唯一方法是编写使用mdlGetTimeOfNextVarHit
方法的S函数告诉求解器下一个采样时间(对于这个块)应该是什么。