MATLAB功能块的工作原理是为您输入的MATLAB代码生成编译代码 . 为了生成代码,块需要知道您使用的所有输入和变量的大小,类型和复杂性 . 它根据输入的大小推断变量和输出的大小 . 使用时创建Buffer
Buffer = [Signal DelayedBuffer(1:59-1)];
很容易看出Buffer的大小是59个元素(假设Signal是标量) . MATLAB功能块可以推断出这个大小,并且还可以识别分配缓冲区的y也具有相同的大小 . 在第二种情况下,
Buffer = [Signal DelayedBuffer(1:BufferSize-1)];
BufferSize来自输入,MATLAB功能块在编译时不知道该值 . 因此,必须假设此值可以更改,从而导致可变大小的数据 . 即在编译时无法确定缓冲区的大小 . 分配缓冲区的'y'也被推断为可变大小的数据 . 错误消息表明您可能已将块参数中的输出大小指定为固定大小 . 博客的“端口和数据管理器”对话框中有一个复选框,表示输出端口是可变大小 . 您可以选中该框以查看其有效 . 但在你的情况下,对于循环缓冲区,最好使用持久变量,它给你固定大小的数据 .
您的BufferSize不需要在一次模拟中更改尝试将其用作MATLAB功能块的参数而不是输入 . 您也可以通过“端口和数据管理器”对话框执行此操作 .