I have a problem that many others had before, so I read some discussions and references before asking the following:
I have a Matlab function block in Simulink, which would like to be a modulator. It gets as input a [nx1]
frame of data and should return a an [lx1]
frame, where either l=n
or l = n/K
, for some K
which divides n
.
However, the (very simplyfied extract of) code
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
Doesn't compile because
"Data 'ak' is inferred as a variable size matrix,
while its specified type is something else."
Now, in line 2
I specified that it is a variable size matrix, and I also used an if/else
constructor to initialize it.
To make the compiler happy, one may check the "Variable number of columns"
checkbox for ak
, in the Data and Ports Manager, but this turns out in a new error, because the blocks in cascade don't accept variable data, at least the ones I need, like digital filters.