【发布时间】:2013-06-17 08:47:23
【问题描述】:
我遇到了许多其他人以前遇到的问题,因此我在询问以下内容之前阅读了一些讨论和参考资料:
我在 Simulink 中有一个 Matlab 功能块,它想成为一个调制器。它以[nx1] 数据帧作为输入,并应返回一个[lx1] 帧,其中l=n 或l = n/K,对于某些K,除以n。
但是,代码(非常简单的摘录)
function ak = Modulator(dataFrame,dataType)
coder.varsize('ak',length(dataFrame));
M = 4; % this is for simplicity in this extract
if dataType == 1 %input is a binary stream, bit mapping required
ak = zeros(round(length(dataFrame)/log2(M)),1);
else % input data is a stream of integer
ak = zeros(length(dataFrame),1);
end
end
无法编译,因为
"Data 'ak' is inferred as a variable size matrix,
while its specified type is something else."
现在,在line 2 中我指定它是一个可变大小的矩阵,并且我还使用了if/else 构造函数来初始化它。
为了使编译器满意,可以在数据和端口管理器中选中ak 的"Variable number of columns" 复选框,但这会导致一个新错误,因为级联中的块不接受可变数据,至少是我需要的,比如数字滤波器。
【问题讨论】:
-
您是否尝试过使用
coder.varsize中的dims-选项? -
是的,我做了,但显然放置或不放置 coder.varsize 命令没有任何区别..
标签: matlab simulink matlab-coder