Variables 可变大小缓冲区simulink

Variables 可变大小缓冲区simulink,variables,size,buffer,simulink,Variables,Size,Buffer,Simulink,我在simulink中的每个模拟步骤中接收可变大小的数据。但是,在接收整个数据包之前,我需要等待一定数量的模拟步骤,因此我需要某种可变大小的缓冲区。我没有关于我将要接收的数据总量的信息。我得到的唯一信息是模拟步骤的数量,我必须等到收到全部数据 我试图通过一个matlab函数块和几个延迟块来实现它,这些延迟块将matlab函数块的输出数据延迟一个模拟步骤。但总是在可变大小约束条件下失败(因为延迟块不支持它),我也没有找到任何支持我这里需要的功能的缓冲块 希望你能帮助我 鉴于您知道输入和输出采样率,

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

我试图通过一个
matlab函数块
和几个
延迟块
来实现它,这些延迟块将
matlab函数块的输出数据延迟一个模拟步骤。但总是在可变大小约束条件下失败(因为延迟块不支持它),我也没有找到任何支持我这里需要的功能的
缓冲块


希望你能帮助我

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

这不是小事,但你可以

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

    对于代码生成,您需要为缓冲区的大小指定一个上限,这使得MATLAB函数块非常合适。 指定缓冲区的最大大小,并使用内部持久性变量跟踪已填充的缓冲区大小

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

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


    b) 有两个输出,一个是缓冲区,一个是“我刚满”逻辑信号。然后,由一个触发子系统跟随该块,该子系统直接向缓冲区提供信息,并且是由逻辑信号触发的上升沿。然后,触发子系统的输出将仅在缓冲区满时更新。

    是否希望输出仅在缓冲区满时更新(即,以您知道必须等待所有数据到达的速率),或者您希望它以与到达的数据包相同的速率动态变大吗?我想等待,例如,4个模拟步骤,然后获取所有接收到的数据并对其进行处理。好的,谢谢。我不知道我是否可以这样做,因为simulink模型生成的代码将被嵌入式系统使用。你有没有其他的想法,我如何解决这个问题?你在最初的帖子中没有提到代码生成。Simulink编码器需要知道输出数组的最大大小才能生成代码,因此您必须猜测/估计最大大小,以便生成的代码始终为输出分配足够的内存(在编译时)。知道必须这样做可以更容易地创建缓冲区,因为现在可以使用分配的最大内存编写MATLAB函数块,并在新数据到达时填充它。当新数据到达时,使用一个持久变量跟踪下一个要填充的元素。我已经用这种方法尝试过了。但是我不知道如何设置MATLAB函数块,以等待一定的步骤,并用新的输入数据填充输出变量。我在答案中添加了更多的建议。谢谢。。我考虑了很多可能性,但我的主要问题是:只要必须包含传入数据,如何将其保存在matlab功能块的内部缓冲区中?