可变大小的缓冲区simulink

时间:2014-04-15 20:27:49

标签: variables size buffer simulink

我在simulink的每个模拟步骤中接收可变大小的数据。但是,在收到整个数据包之前,我需要等待一定数量的模拟步骤,因此我需要某种可变大小的缓冲区。我没有关于我将要收到的数据总量的信息。我得到的唯一信息是模拟步骤的数量,我必须等到收到整个数据。

我尝试通过matlab function block和几个delay blocks来实现它,以延迟matlab function block的输出数据进行一个模拟步骤。但总是在变量大小限制下失败(因为延迟块不支持它),我也没有找到任何支持该功能的buffer block,我需要这里。

希望,你可以帮助我!

1 个答案:

答案 0 :(得分:1)

鉴于您已了解输入和输出采样率,我建议您编写一个c-mex S函数。

这不会是微不足道的,但你可以

  1. 将输入和输出端口设置为具有不同的采样率
  2. 将输入和输出端口设置为具有可变信号长度
  3. 存储指向std :: vector< ...>的指针P工作向量中的类
  4. std :: vector< ...>使您能够在新输入数据到达时增加其大小,并在数据发布到输出时清空。
  5. 根据评论进行更新:

    对于代码生成,您需要指定缓冲区大小的上限,这使得MATLAB功能块适用。 指定缓冲区的最大大小,并使用内部持久变量跟踪填充的大小。

    但是在输入和输出上使用不同采样率的块的唯一方法是编写S函数。对于MATLAB函数方法,我可以想到两种方法,

    a)编写代码,使其具有填充内部缓冲区,并仅在缓冲区变满时更新输出。 当然,输出采样率将与输入采样率相同,但数据只会在您指定它时才会更改。

    b)有两个输出,一个是缓冲区,一个是"我只是变满了#34;逻辑信号。然后通过触发子系统跟随块,该子系统直接通过它提供缓冲器,并且是由逻辑信号触发的上升沿。然后,触发子系统的输出仅在缓冲区变满时的步骤中更新。