我在simulink
的每个模拟步骤中接收可变大小的数据。但是,在收到整个数据包之前,我需要等待一定数量的模拟步骤,因此我需要某种可变大小的缓冲区。我没有关于我将要收到的数据总量的信息。我得到的唯一信息是模拟步骤的数量,我必须等到收到整个数据。
我尝试通过matlab function block
和几个delay blocks
来实现它,以延迟matlab function block
的输出数据进行一个模拟步骤。但总是在变量大小限制下失败(因为延迟块不支持它),我也没有找到任何支持该功能的buffer block
,我需要这里。
希望,你可以帮助我!
答案 0 :(得分:1)
鉴于您已了解输入和输出采样率,我建议您编写一个c-mex S函数。
这不会是微不足道的,但你可以
根据评论进行更新:
对于代码生成,您需要指定缓冲区大小的上限,这使得MATLAB功能块适用。 指定缓冲区的最大大小,并使用内部持久变量跟踪填充的大小。
但是在输入和输出上使用不同采样率的块的唯一方法是编写S函数。对于MATLAB函数方法,我可以想到两种方法,
a)编写代码,使其具有填充内部缓冲区,并仅在缓冲区变满时更新输出。 当然,输出采样率将与输入采样率相同,但数据只会在您指定它时才会更改。
b)有两个输出,一个是缓冲区,一个是"我只是变满了#34;逻辑信号。然后通过触发子系统跟随块,该子系统直接通过它提供缓冲器,并且是由逻辑信号触发的上升沿。然后,触发子系统的输出仅在缓冲区变满时的步骤中更新。